From 313ca1fafdfb9bf0a1186a9e55fbde4367e1b9a5 Mon Sep 17 00:00:00 2001 From: Mark Suckerberg Date: Thu, 14 Sep 2023 20:26:44 -0500 Subject: [PATCH] Total harddel audit + far more thorough unit testing (#2171) ## About The Pull Request Ports a bunch of harddel fixes from /tg/ + improved reftracking + create & destroy testing, plus adds many harddel fixes of my own from said testing both locally and on live Port list: tgstation/tgstation#57728 tgstation/tgstation#58972 tgstation/tgstation#59371 tgstation/tgstation#59612 (only the test, most harddel fixes I ignored) tgstation/tgstation#62725 tgstation/tgstation#63877 tgstation/tgstation#51544 tgstation/tgstation#59804 tgstation/tgstation#63276 tgstation/tgstation#62755 tgstation/tgstation#66649 tgstation/tgstation#72401 tgstation/tgstation#53816 tgstation/tgstation#73261 (just a few tweaks from this) tgstation/tgstation#73037 ## Why It's Good For The Game Hard deletes are the largest source of overtime currently, and it's becoming a problem now that we're approaching 60pop on the regular. For the sake of playability, drastic action needs to be taken, and this is that drastic action. I hate how big this PR is, it's one of my biggest mistakes so far. ## Changelog :cl: /:cl: --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> Co-authored-by: AnturK Co-authored-by: Rohesie Co-authored-by: tgstation-server Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Tastyfish Co-authored-by: Kyle Spier-Swenson Co-authored-by: Couls Co-authored-by: ZephyrTFA --- .github/CONTRIBUTING.md | 4 + .github/HARDDEL_GUIDE.md | 265 + .../JungleRuins/jungle_bombed_starport.dmm | 19979 ++++++++-------- .../LavaRuins/lavaland_surface_codelab.dmm | 16 +- .../RockRuins/rockplanet_crash_cult.dmm | 88 +- .../whitesands_surface_medipen_plant.dmm | 321 +- .../whitesands_surface_youreinsane.dmm | 14 +- _maps/RandomRuins/SpaceRuins/Fast_Food.dmm | 7 +- .../SpaceRuins/corporate_mining.dmm | 139 +- _maps/RandomRuins/SpaceRuins/hellfactory.dmm | 30 +- .../SpaceRuins/singularity_lab.dmm | 14031 ++++++----- _maps/RandomRuins/SpaceRuins/spacemall.dmm | 377 +- .../wasteplanet_abandoned_mechbay.dmm | 982 +- _maps/_basemap.dm | 10 +- .../Ruins}/lavaland_biodome_beach.dmm | 0 .../lavaland_surface_syndicate_base1.dmm | 9168 +++++++ .../Ships}/infiltrator_advanced.dmm | 0 _maps/deprecated/deprecated_datums.dm | 15 + _maps/outpost/hangar/test_20x20.dmm | 2 +- _maps/outpost/hangar/test_2_20x20.dmm | 322 +- _maps/outpost/hangar/test_2_40x20.dmm | 416 +- _maps/outpost/hangar/test_2_40x40.dmm | 6 +- _maps/outpost/hangar/test_40x20.dmm | 2 +- _maps/outpost/hangar/test_40x40.dmm | 2 +- _maps/outpost/hangar/test_56x20.dmm | 2 +- _maps/outpost/hangar/test_56x40.dmm | 2 +- _maps/outpost/outpost_test_1.dmm | 7 +- _maps/outpost/outpost_test_2.dmm | 90 +- .../shuttles/shiptest/independent_junker.dmm | 148 +- _maps/shuttles/shiptest/independent_meta.dmm | 427 +- .../shuttles/shiptest/independent_rigger.dmm | 89 +- .../shiptest/independent_shepherd.dmm | 41 +- .../shiptest/independent_tranquility.dmm | 568 +- _maps/shuttles/shiptest/inteq_talos.dmm | 231 +- _maps/shuttles/shiptest/inteq_vaquero.dmm | 1 - _maps/shuttles/shiptest/solgov_chronicle.dmm | 38 +- _maps/shuttles/shiptest/syndicate_aegis.dmm | 104 +- .../shiptest/syndicate_luxembourg.dmm | 153 +- .../shiptest/syndicate_twinkleshine.dmm | 49 +- .../subshuttles/independent_superpill.dmm | 10 +- check_regex.yaml | 2 +- code/__DEFINES/atoms.dm | 4 + code/__DEFINES/cooldowns.dm | 2 +- code/__DEFINES/flags.dm | 4 + code/__DEFINES/mobs.dm | 3 + code/__DEFINES/obj_flags.dm | 23 +- code/__DEFINES/qdel.dm | 7 + code/__DEFINES/subsystems.dm | 4 +- code/__DEFINES/traits.dm | 6 + code/__HELPERS/_logging.dm | 12 + code/__HELPERS/game.dm | 21 +- code/__HELPERS/unsorted.dm | 14 +- code/__HELPERS/virtual_z_level.dm | 5 + code/_compile_options.dm | 23 + code/_globalvars/bitfields.dm | 9 +- code/_globalvars/logging.dm | 5 + code/_onclick/adjacent.dm | 2 +- code/_onclick/hud/alert.dm | 3 +- code/_onclick/hud/credits.dm | 8 +- code/_onclick/hud/robot.dm | 12 + code/_onclick/hud/screen_objects.dm | 2 + code/controllers/master.dm | 3 +- code/controllers/subsystem/air.dm | 53 +- code/controllers/subsystem/atoms.dm | 13 +- code/controllers/subsystem/garbage.dm | 36 +- code/controllers/subsystem/idlenpcpool.dm | 2 +- code/controllers/subsystem/mapping.dm | 1 + code/controllers/subsystem/persistence.dm | 6 +- .../subsystem/processing/fields.dm | 6 - .../subsystem/processing/quirks.dm | 14 +- code/controllers/subsystem/shuttle.dm | 17 +- code/controllers/subsystem/timer.dm | 2 +- code/controllers/subsystem/vis_overlays.dm | 24 - code/datums/ai_laws.dm | 6 + code/datums/beam.dm | 6 +- code/datums/brain_damage/imaginary_friend.dm | 5 +- code/datums/browser.dm | 19 +- code/datums/components/caltrop.dm | 2 + code/datums/components/chasm.dm | 49 +- code/datums/components/connect_containers.dm | 68 + code/datums/components/connect_range.dm | 107 + code/datums/components/crafting/recipes.dm | 6 +- code/datums/components/fantasy/_fantasy.dm | 3 +- code/datums/components/mirv.dm | 2 +- code/datums/components/overlay_lighting.dm | 11 +- code/datums/components/pellet_cloud.dm | 14 +- code/datums/components/spawner.dm | 3 +- code/datums/components/storage/storage.dm | 16 +- code/datums/components/tackle.dm | 18 +- code/datums/components/udder.dm | 6 +- code/datums/dash_weapon.dm | 14 +- code/datums/datum.dm | 27 +- code/datums/diseases/parrotpossession.dm | 2 +- code/datums/dna.dm | 4 +- code/datums/elements/connect_loc.dm | 2 +- code/datums/elements/forced_gravity.dm | 7 + code/datums/hud.dm | 19 +- code/datums/map_zones.dm | 22 +- code/datums/mapgen/_biome.dm | 6 +- .../mapgen/planetary/JungleGenerator.dm | 4 +- code/datums/mapgen/planetary/LavaGenerator.dm | 8 +- code/datums/mapgen/planetary/RockGenerator.dm | 8 +- code/datums/mapgen/planetary/SnowGenerator.dm | 26 +- .../datums/mapgen/planetary/WasteGenerator.dm | 254 +- code/datums/mapgen/single_biome/Gas_Giant.dm | 15 +- code/datums/mind.dm | 54 +- code/datums/proximity_monitor/field.dm | 169 + .../proximity_monitor}/fields/gravity.dm | 8 +- .../fields/peaceborg_dampener.dm | 78 +- .../proximity_monitor}/fields/timestop.dm | 23 +- .../proximity_monitor/proximity_monitor.dm | 78 + code/datums/quixotejump.dm | 10 +- code/datums/ruins/lavaland.dm | 15 - code/datums/shuttles.dm | 17 +- code/datums/status_effects/buffs.dm | 2 +- code/datums/traits/_quirk.dm | 3 - code/datums/traits/negative.dm | 1 - code/datums/wires/explosive.dm | 7 +- code/game/area/ai_monitored.dm | 2 +- code/game/area/areas/ruins/_ruins.dm | 2 +- code/game/area/areas/shuttles.dm | 2 +- code/game/atoms.dm | 34 +- code/game/atoms_movable.dm | 17 +- .../game/gamemodes/clown_ops/clown_weapons.dm | 5 +- code/game/gamemodes/objective.dm | 5 + code/game/machinery/_machinery.dm | 16 +- code/game/machinery/airlock_cycle_control.dm | 2 +- code/game/machinery/autolathe.dm | 4 +- code/game/machinery/camera/camera.dm | 11 +- code/game/machinery/camera/motion.dm | 2 +- code/game/machinery/camera/presets.dm | 3 + code/game/machinery/camera/tracking.dm | 8 +- code/game/machinery/computer/Operating.dm | 30 +- code/game/machinery/computer/_computer.dm | 4 - code/game/machinery/computer/atmos_control.dm | 4 +- code/game/machinery/computer/dna_console.dm | 23 +- code/game/machinery/constructable_frame.dm | 2 +- code/game/machinery/cryopod.dm | 1 + code/game/machinery/deployable.dm | 2 +- code/game/machinery/dna_scanner.dm | 12 + code/game/machinery/doors/airlock.dm | 5 +- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/doors/firedoor.dm | 20 +- code/game/machinery/doors/windowdoor.dm | 5 +- code/game/machinery/fat_sucker.dm | 4 + code/game/machinery/flasher.dm | 6 +- code/game/machinery/hologram.dm | 2 + code/game/machinery/launch_pad.dm | 63 +- code/game/machinery/navbeacon.dm | 15 +- code/game/machinery/recycler.dm | 5 +- code/game/machinery/roulette_machine.dm | 5 + code/game/machinery/shieldgen.dm | 2 +- code/game/machinery/shuttle/shuttle_engine.dm | 12 +- .../machinery/shuttle/shuttle_engine_types.dm | 6 - code/game/machinery/shuttle/shuttle_heater.dm | 13 +- .../telecomms/machines/message_server.dm | 9 +- code/game/machinery/transformer.dm | 2 +- .../mecha/equipment/tools/medical_tools.dm | 34 +- code/game/mecha/mecha.dm | 45 +- code/game/objects/buckling.dm | 7 +- .../effects/anomalies/anomalies_flux.dm | 3 + .../effects/anomalies/anomalies_gravity.dm | 4 +- code/game/objects/effects/countdown.dm | 12 +- code/game/objects/effects/decals/cleanable.dm | 7 +- .../objects/effects/decals/cleanable/food.dm | 4 +- .../effects/decals/cleanable/robots.dm | 4 - code/game/objects/effects/decals/crayon.dm | 2 +- code/game/objects/effects/decals/decal.dm | 14 +- .../effects/effect_system/effect_shield.dm | 2 +- .../effect_system/effects_explosion.dm | 2 + code/game/objects/effects/effects.dm | 2 +- code/game/objects/effects/misc.dm | 1 + code/game/objects/effects/overlays.dm | 8 +- code/game/objects/effects/proximity.dm | 129 - .../objects/effects/spawners/gibspawner.dm | 20 +- .../objects/effects/spawners/structure.dm | 5 + code/game/objects/effects/spiders.dm | 14 +- code/game/objects/items.dm | 7 +- code/game/objects/items/RSF.dm | 3 +- code/game/objects/items/cash.dm | 2 +- code/game/objects/items/chrono_eraser.dm | 8 +- code/game/objects/items/devices/aicard.dm | 2 +- .../objects/items/devices/chameleonproj.dm | 4 +- .../items/devices/forcefieldprojector.dm | 8 +- .../objects/items/devices/geiger_counter.dm | 10 +- .../game/objects/items/devices/polycircuit.dm | 1 + code/game/objects/items/devices/scanners.dm | 8 +- .../objects/items/devices/transfer_valve.dm | 11 +- code/game/objects/items/dice.dm | 6 +- .../objects/items/grenades/clusterbuster.dm | 3 +- code/game/objects/items/grenades/festive.dm | 2 +- code/game/objects/items/grenades/plastic.dm | 5 +- .../objects/items/implants/implant_track.dm | 14 +- code/game/objects/items/melee/energy.dm | 4 + code/game/objects/items/melee/misc.dm | 2 +- code/game/objects/items/mop.dm | 5 +- code/game/objects/items/robot/robot_items.dm | 12 +- .../objects/items/stacks/license_plates.dm | 9 +- .../items/stacks/sheets/sheet_types.dm | 6 +- code/game/objects/items/stacks/wrap.dm | 3 +- code/game/objects/items/storage/fancy.dm | 2 + code/game/objects/items/stunbaton.dm | 5 +- code/game/objects/items/wayfinding.dm | 4 +- code/game/objects/objs.dm | 2 +- code/game/objects/structures/ai_core.dm | 7 +- .../objects/structures/beds_chairs/bed.dm | 9 + code/game/objects/structures/bedsheet_bin.dm | 4 +- .../structures/crates_lockers/closets.dm | 21 +- .../crates_lockers/closets/secure/freezer.dm | 2 +- .../structures/crates_lockers/crates.dm | 2 +- code/game/objects/structures/displaycase.dm | 3 - .../objects/structures/ghost_role_spawners.dm | 11 +- code/game/objects/structures/girders.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/holosign.dm | 8 +- code/game/objects/structures/manned_turret.dm | 2 +- code/game/objects/structures/mineral_doors.dm | 2 +- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/plasticflaps.dm | 30 +- code/game/objects/structures/railings.dm | 7 +- code/game/objects/structures/tables_racks.dm | 26 +- code/game/objects/structures/traps.dm | 16 +- .../objects/structures/windoor_assembly.dm | 5 +- code/game/objects/structures/window.dm | 22 +- code/game/turfs/change_turf.dm | 25 +- code/game/turfs/open/chasm.dm | 2 +- code/game/turfs/open/floor/catwalk_plating.dm | 6 +- code/game/turfs/open/openspace.dm | 3 + code/game/turfs/open/space/transit.dm | 16 +- code/game/turfs/turf.dm | 16 +- code/game/world.dm | 9 +- code/modules/admin/topic.dm | 2 +- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 4 + code/modules/admin/verbs/atmosdebug.dm | 57 +- code/modules/admin/verbs/secrets.dm | 2 +- code/modules/admin/verbs/shuttlepanel.dm | 12 +- .../view_variables/reference_tracking.dm | 158 +- .../abductor/equipment/glands/slime.dm | 4 +- code/modules/antagonists/blob/blob_mobs.dm | 9 +- .../blob/blobstrains/_blobstrain.dm | 4 + .../blob/blobstrains/energized_jelly.dm | 2 +- code/modules/antagonists/blob/overmind.dm | 1 + .../antagonists/blob/structures/_blob.dm | 4 +- .../antagonists/blob/structures/core.dm | 8 +- code/modules/antagonists/cult/blood_magic.dm | 9 +- code/modules/antagonists/cult/cult_items.dm | 9 +- .../antagonists/disease/disease_disease.dm | 1 + .../antagonists/disease/disease_mob.dm | 2 + code/modules/antagonists/revenant/revenant.dm | 6 +- .../antagonists/slaughter/slaughter.dm | 2 +- .../traitor/equipment/Malf_Modules.dm | 19 +- code/modules/assembly/assembly.dm | 4 + code/modules/assembly/flash.dm | 15 +- code/modules/assembly/proximity.dm | 12 +- .../environmental/LINDA_turf_tile.dm | 4 +- .../atmospherics/machinery/atmosmachinery.dm | 19 +- .../machinery/components/components_base.dm | 41 +- .../unary_devices/outlet_injector.dm | 17 +- .../components/unary_devices/relief_valve.dm | 4 +- .../components/unary_devices/thermomachine.dm | 3 +- .../atmospherics/machinery/datum_pipeline.dm | 92 +- .../atmospherics/machinery/other/meter.dm | 2 +- .../machinery/pipes/layermanifold.dm | 2 +- .../atmospherics/machinery/pipes/pipes.dm | 6 +- .../portable/portable_atmospherics.dm | 8 +- code/modules/atmospherics/multiz.dm | 2 +- code/modules/awaymissions/away_props.dm | 8 +- code/modules/awaymissions/capture_the_flag.dm | 36 +- code/modules/awaymissions/gateway.dm | 6 + .../modules/awaymissions/super_secret_room.dm | 6 +- code/modules/buildmode/buildmode.dm | 4 + code/modules/buildmode/effects/line.dm | 3 + code/modules/cargo/bounties/reagent.dm | 4 - code/modules/cargo/gondolapod.dm | 5 +- code/modules/cargo/supplypod.dm | 5 +- code/modules/client/preferences.dm | 42 +- code/modules/clothing/head/misc.dm | 2 +- .../modules/clothing/spacesuits/chronosuit.dm | 5 + code/modules/clothing/spacesuits/hardsuit.dm | 14 +- code/modules/clothing/suits/toggles.dm | 5 +- code/modules/clothing/under/accessories.dm | 17 +- code/modules/detectivework/detective_work.dm | 2 +- code/modules/economy/selling_pad.dm | 2 +- code/modules/error_handler/error_handler.dm | 2 +- code/modules/events/holiday/halloween.dm | 6 +- code/modules/events/spacevine.dm | 2 +- code/modules/events/wizard/greentext.dm | 3 +- code/modules/fields/fields.dm | 324 - code/modules/fields/turf_objects.dm | 67 - code/modules/fishing/fishing_rod.dm | 2 +- code/modules/flufftext/Hallucination.dm | 5 +- code/modules/food_and_drinks/drinks/drinks.dm | 2 +- .../kitchen_machinery/deep_fryer.dm | 5 + .../kitchen_machinery/grill.dm | 5 +- .../kitchen_machinery/microwave.dm | 2 + code/modules/holodeck/computer.dm | 4 +- code/modules/holodeck/holo_effect.dm | 60 +- code/modules/hydroponics/grown.dm | 3 + code/modules/hydroponics/grown/cotton.dm | 14 +- code/modules/hydroponics/seeds.dm | 19 +- code/modules/instruments/songs/_song.dm | 4 +- code/modules/language/language_holder.dm | 4 +- code/modules/lighting/lighting_atom.dm | 4 +- code/modules/lighting/lighting_object.dm | 2 +- code/modules/lighting/lighting_setup.dm | 2 +- code/modules/lighting/lighting_source.dm | 3 +- code/modules/mapping/map_template.dm | 1 + code/modules/mapping/mapping_helpers.dm | 18 +- code/modules/mining/fulton.dm | 2 +- code/modules/mining/laborcamp/laborstacker.dm | 16 +- .../mining/lavaland/necropolis_chests.dm | 12 + code/modules/mining/machine_processing.dm | 9 +- code/modules/mining/machine_stacking.dm | 20 +- code/modules/mining/minebot.dm | 18 +- code/modules/mining/ores_coins.dm | 2 +- code/modules/mob/dead/dead.dm | 4 + code/modules/mob/dead/new_player/login.dm | 4 +- .../modules/mob/dead/new_player/new_player.dm | 6 +- code/modules/mob/living/blood.dm | 3 +- code/modules/mob/living/brain/brain.dm | 13 +- code/modules/mob/living/brain/brain_item.dm | 3 + .../carbon/alien/humanoid/caste/hunter.dm | 2 +- .../living/carbon/alien/special/facehugger.dm | 4 + .../carbon/alien/utilities/structures.dm | 6 +- code/modules/mob/living/carbon/carbon.dm | 1 + code/modules/mob/living/carbon/emote.dm | 4 +- .../mob/living/carbon/hologram/hologram.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 1 + .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/carbon/human/human_say.dm | 2 +- .../carbon/human/species_types/golems.dm | 5 +- .../carbon/human/species_types/jellypeople.dm | 107 +- .../carbon/human/species_types/snail.dm | 6 + .../carbon/human/species_types/zombies.dm | 18 - code/modules/mob/living/carbon/life.dm | 6 +- code/modules/mob/living/damage_procs.dm | 2 +- code/modules/mob/living/inhand_holder.dm | 6 + code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/living_defense.dm | 5 +- code/modules/mob/living/living_movement.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 26 +- .../living/silicon/ai/freelook/cameranet.dm | 57 +- .../mob/living/silicon/ai/robot_control.dm | 6 + code/modules/mob/living/silicon/pai/pai.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 22 +- code/modules/mob/living/silicon/silicon.dm | 1 + .../mob/living/simple_animal/bot/bot.dm | 4 +- .../mob/living/simple_animal/bot/honkbot.dm | 5 +- .../mob/living/simple_animal/bot/secbot.dm | 5 +- .../mob/living/simple_animal/constructs.dm | 19 +- .../mob/living/simple_animal/friendly/cat.dm | 15 +- .../living/simple_animal/friendly/snake.dm | 4 + .../simple_animal/guardian/types/support.dm | 2 +- .../mob/living/simple_animal/hostile/bees.dm | 3 +- .../simple_animal/hostile/giant_spider.dm | 29 +- .../mob/living/simple_animal/hostile/goose.dm | 15 +- .../living/simple_animal/hostile/hostile.dm | 90 +- .../simple_animal/hostile/jungle/mook.dm | 11 +- .../simple_animal/hostile/mecha_pilot.dm | 4 +- .../hostile/megafauna/bubblegum.dm | 4 +- .../hostile/megafauna/colossus.dm | 15 +- .../hostile/megafauna/hierophant.dm | 4 +- .../hostile/megafauna/wendigo.dm | 2 + .../mob/living/simple_animal/hostile/mimic.dm | 2 +- .../hostile/mining_mobs/basilisk.dm | 3 +- .../hostile/mining_mobs/curse_blob.dm | 5 +- .../hostile/mining_mobs/elites/elite.dm | 15 +- .../mining_mobs/elites/goliath_broodmother.dm | 21 +- .../living/simple_animal/hostile/regalrat.dm | 7 + .../hostile/retaliate/retaliate.dm | 30 +- .../simple_animal/hostile/venus_human_trap.dm | 20 +- .../mob/living/simple_animal/parrot.dm | 125 +- .../mob/living/simple_animal/simple_animal.dm | 21 +- .../mob/living/simple_animal/slime/life.dm | 48 +- .../mob/living/simple_animal/slime/powers.dm | 2 +- .../mob/living/simple_animal/slime/slime.dm | 70 +- code/modules/mob/logout.dm | 4 +- code/modules/mob/mob.dm | 77 +- code/modules/mob/mob_defines.dm | 4 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/mob/mob_lists.dm | 1 - code/modules/mob/mob_movement.dm | 2 +- code/modules/mob/transform_procs.dm | 6 +- .../NTNet/NTNRC/conversation.dm | 29 +- .../computers/machinery/console_presets.dm | 2 - .../file_system/programs/alarm.dm | 20 +- .../file_system/programs/ntnrc_client.dm | 12 +- .../file_system/programs/sm_monitor.dm | 18 +- .../modular_computers/hardware/hard_drive.dm | 2 +- code/modules/ninja/energy_katana.dm | 3 +- code/modules/ninja/suit/suit.dm | 5 + code/modules/overmap/_overmap_datum.dm | 9 +- code/modules/overmap/helm.dm | 50 +- code/modules/overmap/missions.dm | 2 + code/modules/overmap/objects/dynamic_datum.dm | 9 +- code/modules/overmap/overmap_token.dm | 2 +- .../overmap/ships/controlled_ship_datum.dm | 38 +- code/modules/overmap/ships/ship_datum.dm | 2 +- code/modules/pixelshifting/pixelshift.dm | 2 +- .../plumbing/plumbers/grinder_chemical.dm | 5 +- code/modules/power/apc.dm | 17 +- code/modules/power/generator.dm | 2 +- .../power/singularity/containment_field.dm | 24 +- code/modules/power/singularity/narsie.dm | 1 + code/modules/power/singularity/singularity.dm | 2 +- code/modules/power/smes.dm | 2 - code/modules/power/solar.dm | 5 + code/modules/power/supermatter/supermatter.dm | 4 +- .../projectiles/ammunition/_ammunition.dm | 4 +- .../projectiles/ammunition/energy/portal.dm | 5 +- code/modules/projectiles/gun.dm | 2 + code/modules/projectiles/guns/energy.dm | 7 +- .../projectiles/guns/energy/dueling.dm | 11 +- .../projectiles/guns/energy/laser_gatling.dm | 10 + .../projectiles/guns/energy/special.dm | 4 +- code/modules/projectiles/guns/magic.dm | 3 +- code/modules/projectiles/guns/misc/medbeam.dm | 30 +- code/modules/projectiles/projectile.dm | 31 +- code/modules/projectiles/projectile/magic.dm | 1 + .../projectiles/projectile/special/curse.dm | 4 + .../projectiles/projectile/special/gravity.dm | 6 +- .../projectile/special/hallucination.dm | 2 +- .../projectile/special/wormhole.dm | 8 +- .../reagents/cat2_medicine_reagents.dm | 105 +- .../chemistry/reagents/other_reagents.dm | 10 +- .../chemistry/reagents/toxin_reagents.dm | 2 +- .../chemistry/recipes/cat2_medicines.dm | 24 +- .../reagents/chemistry/recipes/medicine.dm | 4 +- .../chemistry/recipes/pyrotechnics.dm | 4 +- code/modules/reagents/reagent_containers.dm | 16 +- .../reagents/reagent_containers/borghydro.dm | 2 +- .../reagents/reagent_containers/jug.dm | 2 +- .../reagents/reagent_containers/pill.dm | 4 +- .../reagents/reagent_containers/spray.dm | 2 +- code/modules/recycling/conveyor2.dm | 2 +- code/modules/recycling/disposal/bin.dm | 3 +- code/modules/research/designs.dm | 19 +- .../research/nanites/nanite_chamber.dm | 1 - .../nanites/nanite_chamber_computer.dm | 15 +- .../research/nanites/nanite_programs.dm | 3 + .../nanites/nanite_programs/utility.dm | 2 +- .../crossbreeding/_status_effects.dm | 2 +- .../xenobiology/crossbreeding/burning.dm | 8 +- .../research/xenobiology/xenobio_camera.dm | 4 +- .../modules/ruins/lavalandruin_code/puzzle.dm | 3 +- .../ruins/objects_and_mobs/ash_walker_den.dm | 9 + .../ruins/objects_and_mobs/necropolis_gate.dm | 4 +- .../ruins/objects_and_mobs/sin_ruins.dm | 2 +- code/modules/shuttle/docking.dm | 2 + code/modules/shuttle/on_move.dm | 57 +- code/modules/shuttle/shuttle.dm | 150 +- code/modules/shuttle/special.dm | 2 +- code/modules/spells/spell.dm | 25 +- code/modules/spells/spell_types/forcewall.dm | 4 +- code/modules/spells/spell_types/lichdom.dm | 3 + .../spells/spell_types/personality_commune.dm | 4 + code/modules/spells/spell_types/shapeshift.dm | 3 +- .../spells/spell_types/touch_attacks.dm | 6 +- code/modules/surgery/bodyparts/helpers.dm | 1 + .../surgery/bodyparts/robot_bodyparts.dm | 4 +- code/modules/surgery/organs/augments_arms.dm | 148 +- code/modules/tgui/tgui_alert.dm | 2 +- code/modules/unit_tests/README.md | 76 + code/modules/unit_tests/_unit_tests.dm | 65 +- code/modules/unit_tests/anchored_mobs.dm | 4 +- code/modules/unit_tests/bespoke_id.dm | 2 +- code/modules/unit_tests/biome_lists.dm | 18 + code/modules/unit_tests/component_tests.dm | 4 +- code/modules/unit_tests/create_and_destroy.dm | 219 + .../unit_tests/find_reference_sanity.dm | 132 + code/modules/unit_tests/keybinding_init.dm | 2 +- code/modules/unit_tests/open_air.dm | 8 +- code/modules/unit_tests/outfit_sanity.dm | 7 +- code/modules/unit_tests/planet_gen.dm | 19 + code/modules/unit_tests/plantgrowth_tests.dm | 6 +- code/modules/unit_tests/projectiles.dm | 24 +- code/modules/unit_tests/rcd.dm | 3 +- code/modules/unit_tests/reactions.dm | 2 +- code/modules/unit_tests/reagent_id_typos.dm | 2 +- code/modules/unit_tests/reagent_names.dm | 15 + .../unit_tests/reagent_recipe_collisions.dm | 2 +- code/modules/unit_tests/ruin_placement.dm | 53 + code/modules/unit_tests/say.dm | 4 +- .../unit_tests/ship_outpost_placement.dm | 21 +- code/modules/unit_tests/species_unique_id.dm | 14 + code/modules/unit_tests/species_whitelists.dm | 2 +- .../modules/unit_tests/stack_singular_name.dm | 18 + code/modules/unit_tests/subsystem_init.dm | 2 +- .../unit_tests/subsystem_metric_sanity.dm | 12 +- code/modules/unit_tests/supply_pack.dm | 2 +- code/modules/unit_tests/timer_sanity.dm | 4 +- code/modules/unit_tests/unit_test.dm | 82 +- code/modules/vehicles/atv.dm | 42 +- code/modules/vending/_vending.dm | 10 +- code/modules/zombie/organs.dm | 2 +- html/changelogs/AutoChangeLog-pr-63276.yml | 4 + shiptest.dme | 15 +- .../tgui/interfaces/OperatingComputer.js | 3 + tools/build/build.js | 5 +- tools/merge-upstream-pull-request.sh | 10 +- tools/tgs_scripts/PreCompile.sh | 1 - 501 files changed, 33042 insertions(+), 22133 deletions(-) create mode 100644 .github/HARDDEL_GUIDE.md rename _maps/{RandomRuins/LavaRuins => deprecated/Ruins}/lavaland_biodome_beach.dmm (100%) create mode 100644 _maps/deprecated/Ruins/lavaland_surface_syndicate_base1.dmm rename _maps/{shuttles/misc => deprecated/Ships}/infiltrator_advanced.dmm (100%) create mode 100644 code/__DEFINES/atoms.dm delete mode 100644 code/controllers/subsystem/processing/fields.dm create mode 100644 code/datums/components/connect_containers.dm create mode 100644 code/datums/components/connect_range.dm create mode 100644 code/datums/proximity_monitor/field.dm rename code/{modules => datums/proximity_monitor}/fields/gravity.dm (74%) rename code/{modules => datums/proximity_monitor}/fields/peaceborg_dampener.dm (65%) rename code/{modules => datums/proximity_monitor}/fields/timestop.dm (92%) create mode 100644 code/datums/proximity_monitor/proximity_monitor.dm delete mode 100644 code/game/objects/effects/proximity.dm delete mode 100644 code/modules/fields/fields.dm delete mode 100644 code/modules/fields/turf_objects.dm create mode 100644 code/modules/unit_tests/README.md create mode 100644 code/modules/unit_tests/biome_lists.dm create mode 100644 code/modules/unit_tests/create_and_destroy.dm create mode 100644 code/modules/unit_tests/find_reference_sanity.dm create mode 100644 code/modules/unit_tests/planet_gen.dm create mode 100644 code/modules/unit_tests/reagent_names.dm create mode 100644 code/modules/unit_tests/ruin_placement.dm create mode 100644 code/modules/unit_tests/species_unique_id.dm create mode 100644 code/modules/unit_tests/stack_singular_name.dm create mode 100644 html/changelogs/AutoChangeLog-pr-63276.yml diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 64a36fb4c17b..70f333da19f9 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -350,6 +350,10 @@ This prevents nesting levels from getting deeper then they need to be. - [tgui/README.md](../tgui/README.md) - [tgui/tutorial-and-examples.md](../tgui/docs/tutorial-and-examples.md) +### Don't create code that hangs references + +This is part of the larger issue of hard deletes, read this file for more info: [Guide to Harddels](HARDDEL_GUIDE.md)) + ### Other Notes - Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the "tools.dm" file) diff --git a/.github/HARDDEL_GUIDE.md b/.github/HARDDEL_GUIDE.md new file mode 100644 index 000000000000..4790150ea0d2 --- /dev/null +++ b/.github/HARDDEL_GUIDE.md @@ -0,0 +1,265 @@ +# Hard Deletes +1. [What is hard deletion](#What-is-hard-deletion) +2. [Causes of hard deletes](#causes-of-hard-deletes) +3. [Detecting hard deletes](#detecting-hard-deletes) +4. [Techniques for fixing hard deletes](#techniques-for-fixing-hard-deletes) +5. [Help my code is erroring how fix](#help-my-code-is-erroring-how-fix) + +## What is Hard Deletion +Hard deletion is a very expensive operation that basically clears all references to some "thing" from memory. Objects that undergo this process are referred to as hard deletes, or simply harddels + +What follows is a discussion of the theory behind this, why we would ever do it, and the what we do to avoid doing it as often as possible + +I'm gonna be using words like references and garbage collection, but don't worry, it's not complex, just a bit hard to pierce + +### Why do we need to Hard Delete? + +Ok so let's say you're some guy called Jerry, and you're writing a programming language + +You want your coders to be able to pass around objects without doing a full copy. So you'll store the pack of data somewhere in memory + +```dm +/someobject + var/id = 42 + var/name = "some shit" +``` + +Then you want them to be able to pass that object into say a proc, without doing a full copy. So you let them pass in the object's location in memory instead +This is called passing something by reference + +```dm +someshit(someobject) //This isn't making a copy of someobject, it's passing in a reference to it +``` + +This of course means they can store that location in memory in another object's vars, or in a list, or whatever + +```dm +/datum + var/reference + +/proc/someshit(mem_location) + var/datum/some_obj = new() + some_obj.reference = mem_location +``` + +But what happens when you get rid of the object we're passing around references to? If we just cleared it out from memory, everything that holds a reference to it would suddenly be pointing to nowhere, or worse, something totally different! + +So then, you've gotta do something to clean up these references when you want to delete an object + +We could hold a list of references to everything that references us, but god, that'd get really expensive wouldn't it + +Why not keep count of how many times we're referenced then? If an object's ref count is ever 0, nothing whatsoever cares about it, so we can freely get rid of it + +But if something's holding onto a reference to us, we're not gonna have any idea where or what it is + +So I guess you should scan all of memory for that reference? + +```dm +del(someobject) //We now need to scan memory until we find the thing holding a ref to us, and clear it +``` + +This pattern is about how BYOND handles this problem of hanging references, or Garbage Collection + +It's not a broken system, but as you can imagine scanning all of memory gets expensive fast + +What can we do to help that? + +### How we can avoid hard deletes + +If hard deletion is so slow, we're gonna need to clean up all our references ourselves + +In our codebase we do this with `/datum/proc/Destroy()`, a proc called by `qdel()`, whose purpose I will explain later + +This procs only job is cleaning up references to the object it's called on. Nothing more, nothing else. Don't let me catch you giving it side effects + +There's a long long list of things this does, since we use it a TON. So I can't really give you a short description. It will always move the object to nullspace though + +## Causes Of Hard Deletes + +Now that you know the theory, let's go over what can actually cause hard deletes. Some of this is obvious, some of it's much less so. + +The BYOND reference has a list [Here](https://secure.byond.com/docs/ref/#/DM/garbage), but it's not a complete one + +* Stored in a var +* An item in a list, or associated with a list item +* Has a tag +* Is on the map (always true for turfs) +* Inside another atom's contents +* Inside an atom's vis_contents +* A temporary value in a still-running proc +* Is a mob with a key +* Is an image object attached to an atom + +Let's briefly go over the more painful ones yeah? + +### Sleeping procs + +Any proc that calls `sleep()`, `spawn()`, or anything that creates a seperate "thread" (not technically a thread, but it's the same in these terms. Not gonna cause any race conditions tho) will hang references to any var inside it. This includes the usr it started from, the src it was called on, and any vars created as a part of processing + +### Static vars + +`/static` and `/global` vars count for this too, they'll hang references just as well as anything. Be wary of this, these suckers can be a pain to solve + +### Range() and View() like procs + +Some internal BYOND procs will hold references to objects passed into them for a time after the proc is finished doing work, because they cache the returned info to make some code faster. You should never run into this issue, since we wait for what should be long enough to avoid this issue as a part of garbage collection + +This is what `qdel()` does by the by, it literally just means queue deletion. A reference to the object gets put into a queue, and if it still exists after 5 minutes or so, we hard delete it + +### Walk() procs + +Calling `walk()` on something will put it in an internal queue, which it'll remain in until `walk(thing, 0)` is called on it, which removes it from the queue + +This sort is very cheap to harddel, since BYOND prioritizes checking this queue first when it's clearing refs, but it should be avoided since it causes false positives + +You can read more about how BYOND prioritizes these things [Here](https://www.patreon.com/posts/diving-for-35855766) + +## Detecting Hard Deletes + +For very simple hard deletes, simple inspection should be enough to find them. Look at what the object does during `Initialize()`, and see if it's doing anything it doesn't undo later. +If that fails, search the object's typepath, and look and see if anything is holding a reference to it without regard for the object deleting + +BYOND currently doesn't have the capability to give us information about where a hard delete is. Fortunately we can search for most all of then ourselves. +The procs to perform this search are hidden behind compile time defines, since they'd be way too risky to expose to admin button pressing + +If you're having issues solving a harddel and want to perform this check yourself, go to `_compile_options.dm` and uncomment `TESTING`, `REFERENCE_TRACKING`, and `GC_FAILURE_HARD_LOOKUP` + +You can read more about what each of these do in that file, but the long and short of it is if something would hard delete our code will search for the reference (This will look like your game crashing, just hold out) and print information about anything it finds to the runtime log, which you can find inside the round folder inside `/data/logs/year/month/day` + +It'll tell you what object is holding the ref if it's in an object, or what pattern of list transversal was required to find the ref if it's hiding in a list of some sort + +## Techniques For Fixing Hard Deletes + +Once you've found the issue, it becomes a matter of making sure the ref is cleared as a part of Destroy(). I'm gonna walk you through a few patterns and discuss how you might go about fixing them + +### Our Tools + +First and simplest we have `Destroy()`. Use this to clean up after yourself for simple cases + +```dm +/someobject/Initialize() + . = ..() + GLOB.somethings += src //We add ourselves to some global list + +/someobject/Destroy() + GLOB.somethings -= src //So when we Destroy() clean yourself from the list + return ..() +``` + +Next, and slightly more complex, pairs of objects that reference each other + +This is helpful when for cases where both objects "own" each other + +```dm +/someobject + var/someotherobject/buddy + +/someotherobject + var/someobject/friend + +/someobject/Initialize() + if(!buddy) + buddy = new() + buddy.friend = src + +/someotherobject/Initialize() + if(!friend) + friend = new() + friend.buddy = src + +/someobject/Destroy() + if(buddy) + buddy.friend = null //Make sure to clear their ref to you + buddy = null //We clear our ref to them to make sure nothing goes wrong + +/someotherobject/Destroy() + if(friend) + friend.buddy = null //Make sure to clear their ref to you + friend = null //We clear our ref to them to make sure nothing goes wrong +``` + +Something similar can be accomplished with `QDELETED()`, a define that checks to see if something has started being `Destroy()`'d yet, and `QDEL_NULL()`, a define that `qdel()`'s a var and then sets it to null + +Now let's discuss something a bit more complex, weakrefs + +You'll need a bit of context, so let's do that now + +BYOND has an internal bit of behavior that looks like this + +`var/string = "\ref[someobject]"` + +This essentially gets that object's position in memory directly. Unlike normal references, this doesn't count for hard deletes. You can retrieve the object in question by using `locate()` + +`var/someobject/someobj = locate(string)` + +This has some flaws however, since the bit of memory we're pointing to might change, which would cause issues. Fortunately we've developed a datum to handle worrying about this for you, `/datum/weakref` + +You can create one using the `WEAKREF()` proc, and use weakref.resolve() to retrieve the actual object + +This should be used for things that your object doesn't "own", but still cares about + +For instance, a paper bin would own the paper inside it, but the paper inside it would just hold a weakref to the bin + +There's no need to clean these up, just make sure you account for it being null, since it'll return that if the object doesn't exist or has been queued for deletion + +```dm +/someobject + var/datum/weakref/our_coin + +/someobject/proc/set_coin(/obj/item/coin/new_coin) + our_coin = WEAKREF(new_coin) + +/someobject/proc/get_value() + if(!our_coin) + return 0 + + var/obj/item/coin/potential_coin = our_coin.resolve() + if(!potential_coin) + our_coin = null //Remember to clear the weakref if we get nothing + return 0 + return potential_coin.value +``` + +Now, for the worst case scenario + +Let's say you've got a var that's used too often to be weakref'd without making the code too expensive + +You can't hold a paired reference to it because it's not like it would ever care about you outside of just clearing the ref + +So then, we want to temporarily remember to clear a reference when it's deleted + +This is where I might lose you, but we're gonna use signals + +`qdel()`, the proc that sets off this whole deletion business, sends a signal called `COMSIG_PARENT_QDELETING` + +We can listen for that signal, and if we hear it clear whatever reference we may have + +Here's an example + +```dm +/somemob + var/mob/target + +/somemob/proc/set_target(new_target) + if(target) + UnregisterSignal(target, COMSIG_PARENT_QDELETING) //We need to make sure any old signals are cleared + target = new_target + if(target) + RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/clear_target) //Call clear_target if target is ever qdel()'d + +/somemob/proc/clear_target(datum/source) + SIGNAL_HANDLER + set_target(null) +``` + +This really should be your last resort, since signals have some limitations. If some subtype of somemob also registered for parent_qdeleting on the same target you'd get a runtime, since signals don't support it + +But if you can't do anything else for reasons of conversion ease, or hot code, this will work + +## Help My Code Is Erroring How Fix + +First, do a quick check. + +Are you doing anything to the object in `Initialize()` that you don't undo in `Destroy()`? I don't mean like, setting its name, but are you adding it to any lists, stuff like that + +If this fails, you're just gonna have to read over this doc. You can skip the theory if you'd like, but it's all pretty important for having an understanding of this problem diff --git a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm index d33b5f21f9ef..c0fc2fcfc956 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm @@ -1,75 +1,41 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/tree/jungle{ - icon_state = "tree10" - }, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"ab" = ( +/obj/structure/chair{ + dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"af" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"ah" = ( -/obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, +"ac" = ( +/obj/structure/spacevine, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"ai" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"ag" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) "aj" = ( /turf/open/floor/mineral/plastitanium{ icon_state = "plastitanium_dam2" }, /area/ruin/jungle/starport) -"am" = ( -/obj/structure/flora/junglebush/large, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "an" = ( /obj/structure/door_assembly, /obj/structure/spider/stickyweb, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"ap" = ( -/obj/effect/decal/cleanable/ash, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"aq" = ( -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) -"ar" = ( -/obj/machinery/power/floodlight{ - anchored = 1; - state_open = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "0-8" +"as" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/girder/displaced, +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "av" = ( /obj/structure/spider/stickyweb, @@ -77,27 +43,18 @@ icon_state = "wood-broken4" }, /area/ruin/jungle/starport) -"ax" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"ay" = ( -/obj/effect/decal/cleanable/insectguts, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"az" = ( +/obj/structure/railing, +/turf/open/floor/plasteel/stairs{ + dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) -"aC" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"aD" = ( +/obj/structure/spacevine, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) "aF" = ( /obj/structure/girder, @@ -105,12 +62,15 @@ icon_state = "platingdmg3" }, /area/ruin/jungle/starport) -"aG" = ( +"aH" = ( +/obj/structure/spider/stickyweb, +/obj/machinery/light/broken/directional/east, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"aJ" = ( /obj/structure/spider/stickyweb, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) "aK" = ( /obj/structure/spacevine, @@ -123,33 +83,49 @@ /obj/machinery/light/broken/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"aS" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ +"aO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"aU" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spacevine, -/turf/open/floor/plating/grass/jungle{ +"aP" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"aQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"aW" = ( +"aT" = ( +/obj/effect/decal/cleanable/glass, /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"aX" = ( -/obj/structure/spacevine, +"aY" = ( +/obj/structure/railing{ + dir = 4 + }, /obj/structure/spider/stickyweb, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -157,9 +133,10 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/vault, /area/ruin/jungle/starport) -"bb" = ( -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/rust, +"bd" = ( +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, /area/overmap_encounter/planetoid/jungle/explored) "bf" = ( /obj/structure/railing{ @@ -170,40 +147,31 @@ /obj/item/storage/fancy/donut_box, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) +"bh" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/jungle/explored) "bi" = ( /obj/machinery/door/airlock/hatch, /obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/ruin/jungle/starport) -"bj" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"bk" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland0" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"bo" = ( -/obj/machinery/telecomms/processor, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"bp" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +"bm" = ( +/obj/structure/railing{ + dir = 4 }, -/area/overmap_encounter/planetoid/jungle/explored) -"br" = ( -/obj/structure/spacevine, -/obj/structure/flora/grass/jungle, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"bn" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/cocoon, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) "bs" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -213,71 +181,61 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) -"bv" = ( -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +"bt" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"bw" = ( -/obj/structure/railing{ - dir = 8 +"bu" = ( +/obj/structure/flora/rock/pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"bz" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/flora/junglebush, -/turf/open/floor/plating/grass/jungle{ +"by" = ( +/obj/structure/spacevine, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"bB" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 8 +"bA" = ( +/obj/structure/railing{ + dir = 10 }, -/obj/structure/railing/corner, -/obj/structure/railing/corner{ - dir = 8 +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"bE" = ( -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"bD" = ( +/obj/structure/railing, +/turf/open/floor/plasteel/stairs/old{ + dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) "bF" = ( /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"bG" = ( -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 - }, -/turf/open/floor/concrete/reinforced{ +"bH" = ( +/obj/item/chair, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"bK" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"bI" = ( -/obj/structure/spacevine/dense, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-10" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"bL" = ( +/obj/effect/turf_decal/arrows{ + dir = 8 }, +/obj/structure/spacevine, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "bM" = ( /obj/effect/decal/cleanable/blood/drip, @@ -289,110 +247,115 @@ "bN" = ( /turf/closed/wall/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"bQ" = ( -/obj/structure/girder/displaced, -/turf/open/floor/concrete/slab_1{ +"bP" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"bR" = ( -/turf/closed/wall/concrete/reinforced, -/area/overmap_encounter/planetoid/jungle/explored) -"bS" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 1 +"bT" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/obj/structure/closet/secure_closet/engineering_welding{ - anchored = 1 +/area/overmap_encounter/planetoid/jungle/explored) +"bU" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"cd" = ( -/obj/structure/spacevine, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +"bX" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"cg" = ( -/obj/structure/sign/syndicate{ - pixel_x = 32 - }, +"bZ" = ( +/obj/effect/decal/cleanable/vomit/old, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ci" = ( -/obj/effect/decal/cleanable/shreds, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/grass/jungle{ +"ce" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"cj" = ( -/obj/structure/reagent_dispensers/foamtank, -/turf/open/floor/concrete/slab_1{ +"cn" = ( +/obj/structure/spacevine, +/obj/structure/spider/stickyweb, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ck" = ( +"cp" = ( +/obj/structure/spacevine, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"cq" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/junglebush/b, /obj/structure/flora/grass/jungle, -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"cs" = ( -/obj/effect/turf_decal/box/corners, -/turf/open/floor/concrete/slab_1{ +"cu" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ct" = ( -/obj/structure/railing{ +"cv" = ( +/obj/effect/turf_decal/weather/dirt{ dir = 6 }, -/turf/open/floor/concrete/slab_1{ +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"cy" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"cB" = ( -/turf/open/floor/plasteel/stairs{ - dir = 1 +"cz" = ( +/obj/structure/sign/syndicate{ + pixel_x = 32 }, -/area/overmap_encounter/planetoid/jungle/explored) -"cC" = ( /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"cI" = ( -/obj/effect/decal/cleanable/ash/large, +"cE" = ( +/obj/effect/decal/cleanable/shreds, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"cJ" = ( -/obj/structure/spacevine, -/obj/structure/flora/grass/jungle, -/obj/structure/flora/junglebush/b, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/turf/open/floor/plating{ + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) -"cK" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 8 - }, -/turf/open/floor/plating/rust, +"cF" = ( +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"cN" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +"cH" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) "cO" = ( /obj/structure/cable{ @@ -400,16 +363,6 @@ }, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"cP" = ( -/obj/structure/table{ - name = "officer's table"; - desc = "A square piece of metal standing on four metal legs. It can not move. This one feels more important than the others" - }, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) "cQ" = ( /obj/machinery/shower{ dir = 4; @@ -427,65 +380,92 @@ icon_state = "platingdmg1" }, /area/ruin/jungle/starport) -"cU" = ( -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"cV" = ( -/obj/structure/railing/corner, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "cW" = ( /obj/machinery/computer/security{ dir = 4 }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"cY" = ( -/obj/structure/cable{ - icon_state = "4-9" +"cX" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"dk" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, -/turf/open/floor/plasteel, +"da" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland9" + }, /area/overmap_encounter/planetoid/jungle/explored) -"dl" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/grass/jungle, +"dc" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/machinery/light/broken/directional/south, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"dd" = ( +/obj/structure/flora/rock/jungle, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"dm" = ( -/obj/effect/turf_decal/arrows{ - dir = 8 - }, +"df" = ( /obj/structure/spacevine, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"dg" = ( +/obj/structure/spider/stickyweb, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"dp" = ( -/obj/item/stack/cable_coil/cut/red, -/obj/effect/decal/cleanable/glass, -/obj/structure/girder/displaced, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam2" +"dj" = ( +/obj/effect/turf_decal/borderfloor/corner{ + dir = 4 + }, +/obj/structure/spacevine, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"do" = ( +/obj/item/stack/sheet/mineral/plastitanium, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"dr" = ( +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/concrete{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"dt" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/item/shard, +/turf/open/floor/plasteel/stairs/left, +/area/overmap_encounter/planetoid/jungle/explored) +"du" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs/medium{ + dir = 4 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"dv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "dw" = ( @@ -494,11 +474,20 @@ icon_state = "panelscorched" }, /area/ruin/jungle/starport) -"dy" = ( -/obj/structure/girder, -/obj/item/stack/sheet/mineral/plastitanium, -/obj/item/stack/sheet/mineral/plastitanium, -/turf/open/floor/plating/rust, +"dx" = ( +/turf/open/floor/plasteel/stairs, +/area/overmap_encounter/planetoid/jungle/explored) +"dz" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/railing, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"dA" = ( +/obj/structure/spacevine, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) "dB" = ( /obj/structure/table, @@ -511,58 +500,45 @@ icon_state = "panelscorched" }, /area/ruin/jungle/starport) -"dE" = ( -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"dJ" = ( -/obj/structure/cable{ - icon_state = "6-9" - }, +"dF" = ( /obj/structure/spacevine, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"dP" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ruin/jungle/starport) -"dQ" = ( -/obj/structure/railing{ +"dI" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/stairs/medium{ dir = 1 }, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"dR" = ( -/turf/open/floor/plasteel/stairs/right, +"dO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"dT" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/junglebush/b, -/turf/open/floor/plating/grass/jungle{ +"dP" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/jungle/starport) +"dS" = ( +/obj/effect/decal/cleanable/insectguts, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"dU" = ( -/obj/effect/decal/cleanable/molten_object, -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug"; - light_color = "#a0ad20"; - light_range = 3 - }, +"dV" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/spider/stickyweb, +/obj/item/stack/cable_coil/cut/red, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"dY" = ( -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ +"dW" = ( +/obj/effect/turf_decal/arrows, +/obj/structure/spacevine, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -581,90 +557,86 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) -"ef" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/concrete/slab_1{ +"ec" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ej" = ( -/obj/structure/railing, -/turf/open/water/jungle, +"ed" = ( +/turf/closed/wall, /area/overmap_encounter/planetoid/jungle/explored) -"ek" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/jungle{ +"eh" = ( +/obj/structure/flora/junglebush/b, +/obj/structure/flora/junglebush/c, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"em" = ( -/obj/structure/cable{ - icon_state = "6-9" +"ei" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/spider/stickyweb, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"en" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +/turf/open/floor/plasteel/stairs{ + dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) -"eo" = ( -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/concrete{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"eq" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"er" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree4" - }, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, +"ep" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) -"es" = ( -/obj/structure/flora/grass/jungle/b, -/obj/structure/flora/junglebush/large, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"et" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, /area/overmap_encounter/planetoid/jungle/explored) -"eu" = ( -/obj/structure/spider/stickyweb, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) "ev" = ( /obj/machinery/light/directional/west, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) +"ew" = ( +/obj/structure/spacevine, +/mob/living/simple_animal/hostile/poison/giant_spider/nurse, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "ex" = ( /obj/structure/curtain, /turf/open/floor/plasteel, /area/ruin/jungle/starport) +"eA" = ( +/obj/structure/flora/junglebush/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "eB" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/ruin/jungle/starport) -"eJ" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 4 - }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"eC" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland7" }, /area/overmap_encounter/planetoid/jungle/explored) +"eG" = ( +/turf/closed/wall/mineral/plastitanium, +/area/overmap_encounter/planetoid/jungle/explored) "eK" = ( /obj/structure/window/plasma/reinforced{ dir = 1 @@ -677,12 +649,18 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport) -"eP" = ( -/obj/structure/railing/corner{ - dir = 8 +"eO" = ( +/obj/structure/railing{ + dir = 1 }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"eQ" = ( +/obj/structure/railing, /obj/structure/spacevine/dense, -/turf/open/floor/concrete/reinforced{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -691,12 +669,54 @@ /obj/item/toy/eightball, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"fb" = ( +"eU" = ( +/obj/structure/spacevine, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/flora/rock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"eV" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland9" + icon_state = "wasteland2" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"eZ" = ( +/obj/item/chair, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"fc" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/railing{ + dir = 4 }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"fd" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"fg" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "fi" = ( /obj/machinery/door/airlock{ @@ -708,39 +728,45 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/starport) -"fj" = ( +"fl" = ( +/obj/structure/spacevine, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"fn" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"fp" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"fs" = ( -/obj/structure/railing{ - dir = 4 +"ft" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 }, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"fu" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) "fv" = ( /obj/machinery/computer/crew{ dir = 4 }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"fw" = ( -/obj/structure/railing{ - dir = 4 +"fx" = ( +/obj/item/geiger_counter, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/concrete{ + light_range = 2 }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ +/area/overmap_encounter/planetoid/jungle/explored) +"fz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -749,33 +775,41 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"fG" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 10 +"fB" = ( +/obj/machinery/atmospherics/components/binary/valve{ + dir = 1 }, -/obj/effect/turf_decal/weather/dirt{ - dir = 9 +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, -/turf/open/water/jungle, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"fO" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/concrete/reinforced{ +"fC" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"fP" = ( +"fD" = ( /obj/item/chair, -/obj/structure/spider/stickyweb, +/obj/item/stack/cable_coil/cut/red, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"fS" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/right{ - dir = 4 +"fE" = ( +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"fV" = ( +"fJ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/donkpockets, /obj/effect/spawner/lootdrop/donkpockets, @@ -783,6 +817,17 @@ /obj/effect/spawner/lootdrop/donkpockets, /turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) +"fL" = ( +/turf/open/floor/plasteel/stairs/left{ + dir = 1 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"fT" = ( +/obj/effect/turf_decal/borderfloor/corner{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) "fW" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 4 @@ -799,160 +844,141 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/ruin/jungle/starport/plasma) -"fX" = ( -/obj/effect/decal/remains/human, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"fY" = ( +"fZ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, /area/overmap_encounter/planetoid/jungle/explored) -"gb" = ( -/obj/structure/railing{ - dir = 10 +"gf" = ( +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 8 }, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"ge" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" +"gi" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"gg" = ( -/obj/effect/decal/cleanable/ash/large, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gh" = ( -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plating/grass{ - desc = "A patch of grass. It looks well manicured"; +"gn" = ( +/obj/structure/spacevine, +/obj/structure/spacevine, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gj" = ( -/obj/structure/railing{ - dir = 6 +"gp" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"gk" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"gl" = ( -/obj/item/chair, -/obj/structure/spider/stickyweb, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"gn" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"go" = ( -/obj/structure/spider/stickyweb, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gs" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/junglebush, +"gv" = ( +/obj/structure/spacevine/dense, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gt" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/spacevine, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"gC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"gw" = ( -/obj/effect/decal/cleanable/ash/large, +"gG" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland4" +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gx" = ( -/obj/effect/decal/cleanable/ash, -/turf/open/floor/plating/rust, +"gN" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"gA" = ( +"gO" = ( /obj/item/ammo_casing/caseless/rocket{ desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" + }, +/obj/structure/rack, +/turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) -"gE" = ( -/obj/structure/cable{ - icon_state = "2-9" +"gP" = ( +/obj/structure/fluff/fokoff_sign{ + icon_state = "fokrads"; + desc = "A crudely made sign with the universal radiation hazard symbol painted onto it." }, -/turf/open/floor/concrete/reinforced{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gI" = ( -/obj/structure/railing, -/turf/open/floor/plasteel/stairs{ +"gR" = ( +/obj/effect/turf_decal/industrial/stand_clear{ dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"gJ" = ( -/obj/structure/spacevine, -/obj/effect/turf_decal/weather/dirt{ - dir = 5 +/obj/structure/railing/corner{ + dir = 4 }, -/turf/open/water/jungle, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"gK" = ( -/obj/structure/railing/corner{ - dir = 8 +"gT" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 }, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gM" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/railing, -/turf/open/floor/concrete/reinforced{ +"gU" = ( +/obj/effect/decal/cleanable/shreds, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"gQ" = ( -/obj/structure/flora/rock, +"gV" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" + icon_state = "wasteland4" }, /area/overmap_encounter/planetoid/jungle/explored) -"gZ" = ( -/obj/structure/chair{ +"gW" = ( +/turf/open/floor/plasteel/stairs/left, +/area/overmap_encounter/planetoid/jungle/explored) +"gX" = ( +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"ha" = ( -/obj/structure/flora/tree/jungle{ - icon_state = "tree9" - }, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"gY" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" }, /area/overmap_encounter/planetoid/jungle/explored) "hb" = ( @@ -980,56 +1006,40 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"hi" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/structure{ - desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; - dir = 8; - icon = 'icons/obj/turrets.dmi'; - icon_state = "syndie_off"; - name = "defunct laser cannon"; - pixel_x = 26 - }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, +"hf" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"hl" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, +"hh" = ( +/obj/structure/spacevine, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"ho" = ( -/obj/structure/girder/displaced, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"hj" = ( +/obj/structure/cable{ + icon_state = "1-6" }, -/area/overmap_encounter/planetoid/jungle/explored) -"hq" = ( -/obj/structure/railing{ - dir = 2 +/obj/structure/cable{ + icon_state = "1-10" }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/concrete/slab_1{ +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"hr" = ( -/obj/structure/table/reinforced, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"hs" = ( -/obj/effect/turf_decal/industrial/warning{ +"hk" = ( +/obj/structure/spacevine, +/obj/effect/turf_decal/weather/dirt{ dir = 4 }, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"hp" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, /area/overmap_encounter/planetoid/jungle/explored) "ht" = ( @@ -1039,43 +1049,10 @@ /obj/machinery/light/small/broken/directional/north, /turf/open/floor/plasteel/patterned, /area/ruin/jungle/starport) -"hu" = ( -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"hv" = ( +"hy" = ( +/obj/effect/decal/remains/human, /obj/structure/spider/stickyweb, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"hw" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"hB" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plasteel/stairs/left, -/area/overmap_encounter/planetoid/jungle/explored) -"hC" = ( -/obj/item/stack/cable_coil/cut/red, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) "hE" = ( /obj/structure/cable{ @@ -1083,14 +1060,25 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"hG" = ( -/obj/structure/railing{ - dir = 6 +"hF" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"hH" = ( +/obj/structure/spacevine, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, +/area/overmap_encounter/planetoid/jungle/explored) +"hI" = ( +/obj/effect/turf_decal/atmos/plasma, /obj/structure/railing/corner{ - pixel_x = -23 + dir = 1 }, -/turf/open/water/jungle, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "hJ" = ( /obj/machinery/vending/games, @@ -1105,32 +1093,35 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/starport) +"hM" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "hN" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ruin/jungle/starport) -"hP" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 +"hO" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, +/area/overmap_encounter/planetoid/jungle/explored) +"hR" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"hT" = ( -/obj/effect/decal/cleanable/plastic, +"hS" = ( +/obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/glass, /turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"hV" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 8 + icon_state = "panelscorched" }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "hW" = ( /obj/machinery/computer/mech_bay_power_console{ @@ -1138,31 +1129,37 @@ }, /turf/open/floor/vault, /area/ruin/jungle/starport) -"hX" = ( -/obj/structure/flora/junglebush, -/obj/structure/flora/junglebush/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"hY" = ( -/obj/structure/flora/rock/jungle, +"hZ" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/stairs/medium, /area/overmap_encounter/planetoid/jungle/explored) "ib" = ( /obj/item/stack/sheet/metal, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, /turf/open/floor/plasteel, /area/ruin/jungle/starport) +"ic" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/sign/warning/gasmask{ + pixel_y = 32 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) "id" = ( /obj/structure/spacevine, /turf/open/floor/mineral/plastitanium{ icon_state = "plastitanium_dam5" }, /area/ruin/jungle/starport) +"if" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/jungle/explored) "ig" = ( /obj/effect/decal/cleanable/vomit/old, /obj/machinery/light/directional/east, @@ -1174,153 +1171,77 @@ }, /turf/open/floor/engine/hull, /area/ruin/jungle/starport) -"ij" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/nurse, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"ik" = ( -/obj/effect/decal/cleanable/dirt, +"ii" = ( /obj/structure/spacevine, -/obj/structure/cable{ - icon_state = "2-5" +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/turf/open/floor/carpet/black{ - name = "Door mat"; - desc = "Don't forget to get the dirt off you before going in!" +/area/overmap_encounter/planetoid/jungle/explored) +"il" = ( +/obj/effect/decal/cleanable/glass/plasma, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"in" = ( -/obj/structure/railing{ - dir = 1 +"io" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland7" }, +/area/overmap_encounter/planetoid/jungle/explored) +"ip" = ( /obj/structure/railing, -/turf/open/floor/plasteel/stairs{ +/obj/effect/turf_decal/industrial/warning{ dir = 8 }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"io" = ( -/turf/closed/wall/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) -"iq" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/railing{ - dir = 1 - }, +"ir" = ( /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"is" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/railing/corner{ - dir = 8; - pixel_x = 23 - }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"iu" = ( -/obj/structure/table{ - name = "officer's table"; - desc = "A square piece of metal standing on four metal legs. It can not move. This one feels more important than the others" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) "iz" = ( /obj/structure/spider/stickyweb, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"iD" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"iE" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"iH" = ( -/obj/effect/decal/cleanable/glass/plasma, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"iJ" = ( -/obj/structure/railing, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"iL" = ( -/obj/machinery/computer/mech_bay_power_console{ - dir = 4 - }, -/turf/open/floor/vault, -/area/overmap_encounter/planetoid/jungle/explored) -"iN" = ( -/obj/structure/table/reinforced, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, -/area/overmap_encounter/planetoid/jungle/explored) -"iO" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"iB" = ( +/obj/effect/decal/cleanable/molten_object/large, +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 }, -/area/overmap_encounter/planetoid/jungle/explored) -"iU" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug"; + light_color = "#a0ad20"; + light_range = 3 }, /area/overmap_encounter/planetoid/jungle/explored) -"iW" = ( -/obj/effect/turf_decal/box/corners{ +"iC" = ( +/obj/structure/railing{ dir = 8 }, -/turf/open/floor/concrete/slab_1{ +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"iX" = ( -/obj/structure/spacevine/dense, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"iM" = ( +/turf/open/floor/plasteel/stairs/left{ + dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) -"jc" = ( +"je" = ( /obj/structure/railing/corner, -/obj/effect/decal/cleanable/oil, -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"jd" = ( /obj/structure/spacevine, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"je" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) "jf" = ( /obj/structure/table, /obj/item/toy/clockwork_watch, @@ -1332,134 +1253,155 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/starport) -"jl" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, +"ji" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"jn" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 +"jj" = ( +/obj/effect/turf_decal/arrows, +/obj/structure/spacevine/dense, +/turf/open/floor/concrete{ + light_range = 2 }, -/turf/open/floor/concrete/slab_1{ +/area/overmap_encounter/planetoid/jungle/explored) +"jk" = ( +/obj/structure/flora/junglebush, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"jo" = ( -/turf/open/floor/plasteel/stairs/right{ - dir = 1 +"jm" = ( +/obj/structure/frame/computer{ + dir = 4 }, +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) -"jq" = ( -/obj/structure/spacevine, -/obj/structure/flora/rock/jungle, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"jr" = ( +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, +/obj/effect/decal/cleanable/molten_object/large, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug" }, /area/overmap_encounter/planetoid/jungle/explored) -"jt" = ( +"js" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, +/obj/structure/spacevine, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"jw" = ( -/obj/structure/spider/stickyweb, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/plasteel, +"ju" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"jx" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg1" +"jv" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"jE" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spacevine/dense, +"jx" = ( +/obj/structure/flora/junglebush/c, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"jH" = ( -/turf/open/floor/plasteel/stairs/left, -/area/overmap_encounter/planetoid/jungle/explored) -"jK" = ( -/obj/structure/chair/office{ - dir = 1 +"jy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"jP" = ( -/obj/structure/table_frame, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"jQ" = ( +"jz" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland3" +/turf/open/floor/plasteel/stairs/right{ + dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) -"jR" = ( -/obj/structure/chair/office{ - dir = 8 +"jA" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/spider/stickyweb, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam4" }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"jS" = ( -/obj/effect/decal/cleanable/insectguts, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" +/area/overmap_encounter/planetoid/jungle/explored) +"jB" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 5 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"jU" = ( +"jJ" = ( +/obj/structure/spacevine/dense, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "5-8" }, -/obj/structure/spacevine, /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"jV" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +"jK" = ( +/obj/structure/chair/office{ + dir = 1 }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"jM" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"jX" = ( -/obj/structure/spacevine, -/obj/structure/flora/rock/jungle, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"jN" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"jZ" = ( -/obj/structure/railing, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plasteel/stairs{ - dir = 4 +"jO" = ( +/obj/structure/spacevine, +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"kc" = ( -/obj/effect/turf_decal/arrows{ +"jR" = ( +/obj/structure/chair/office{ dir = 8 }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"jT" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, /area/overmap_encounter/planetoid/jungle/explored) "kf" = ( /turf/open/floor/plating/rust, /area/ruin/jungle/starport) +"kg" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" + }, +/area/overmap_encounter/planetoid/jungle/explored) "kh" = ( /obj/machinery/atmospherics/components/unary/portables_connector{ dir = 4 @@ -1467,109 +1409,115 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) -"kl" = ( -/obj/structure/chair{ - dir = 4 +"ki" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plasteel/grimy, -/area/ruin/jungle/starport) -"kn" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, -/area/ruin/jungle/starport) -"ko" = ( /obj/structure/spacevine/dense, -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"kr" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 }, -/area/overmap_encounter/planetoid/jungle/explored) -"kC" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"kD" = ( +"kj" = ( /obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/obj/structure/spider/cocoon{ + icon_state = "cocoon3" }, -/area/overmap_encounter/planetoid/jungle/explored) -"kE" = ( -/obj/machinery/door/airlock/glass{ - dir = 4; - pixel_y = 0 +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"kF" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" +"kl" = ( +/obj/structure/chair{ + dir = 4 }, -/area/overmap_encounter/planetoid/jungle/explored) -"kI" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/grimy, +/area/ruin/jungle/starport) +"km" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-9" }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"kN" = ( -/obj/structure/spacevine, -/turf/open/floor/mineral/plastitanium, +"kn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"kO" = ( +"kt" = ( +/obj/effect/decal/remains/human, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"kv" = ( /obj/structure/railing{ - dir = 4 + dir = 1 }, /turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"kQ" = ( -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/obj/effect/decal/cleanable/molten_object, +"kw" = ( +/obj/effect/decal/cleanable/ash/large, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" + icon_state = "wasteland5" }, /area/overmap_encounter/planetoid/jungle/explored) -"kS" = ( -/obj/structure/rack, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/turf/open/floor/plasteel/dark, +"kx" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/item/extinguisher/advanced, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/item/geiger_counter, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"kV" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 8 +"kz" = ( +/obj/structure/railing/corner, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/floor/concrete/slab_1{ +/area/overmap_encounter/planetoid/jungle/explored) +"kG" = ( +/obj/structure/spacevine, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"kW" = ( +"kH" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/remains/human, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"la" = ( +"kK" = ( +/obj/structure/door_assembly, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"kL" = ( +/obj/effect/turf_decal/number/zero{ + pixel_x = -7; + pixel_y = 32 + }, +/obj/effect/turf_decal/number/three{ + pixel_x = 5; + pixel_y = 32 + }, /obj/structure{ desc = "A devastating strike weapon of times past. The mountings seem broken now."; dir = 4; @@ -1577,50 +1525,52 @@ icon_state = "mecha_missilerack_six"; name = "ancient missile rack"; pixel_x = -26; - pixel_y = -5 + pixel_y = 11 }, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"lf" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"lg" = ( -/obj/machinery/door/airlock{ - dir = 4 - }, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plasteel/tech/techmaint, +"kM" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"lh" = ( -/obj/structure/railing/corner, +"kN" = ( /obj/structure/spacevine, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport) +"kP" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken/directional/east, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"li" = ( -/obj/structure/door_assembly, +"kX" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/flora/grass/jungle, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"lj" = ( -/obj/structure/railing/corner{ - dir = 8 +"lb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"lk" = ( -/obj/effect/decal/cleanable/insectguts, +"ll" = ( +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, +/obj/effect/decal/cleanable/molten_object, +/obj/structure/spacevine, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" + icon_state = "wasteland_dug" }, /area/overmap_encounter/planetoid/jungle/explored) "lm" = ( @@ -1630,103 +1580,51 @@ icon_state = "platingdmg1" }, /area/ruin/jungle/starport) +"ln" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "lo" = ( /obj/item/stack/cable_coil/cut/red, /obj/structure/spider/stickyweb, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"lr" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"lt" = ( -/obj/effect/turf_decal/borderfloor/corner{ - dir = 4 - }, -/obj/structure/spacevine, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"lE" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"lF" = ( -/obj/machinery/processor, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"lG" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"lI" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/mineral/plastitanium, -/area/ruin/jungle/starport/tower) -"lL" = ( -/obj/item/rack_parts, -/obj/structure/girder/displaced, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"lO" = ( -/obj/structure/spacevine, -/obj/structure/spider/stickyweb, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ +"lp" = ( +/obj/item/geiger_counter, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"lQ" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 8 - }, -/obj/structure/railing, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"lR" = ( -/obj/structure/mecha_wreckage/ripley/firefighter, +"ls" = ( +/obj/machinery/autolathe, /turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) -"lS" = ( -/obj/structure/spacevine, -/obj/structure/spider/stickyweb, +"lu" = ( +/obj/structure/flora/junglebush, /obj/structure/flora/grass/jungle, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"lW" = ( -/obj/item/stack/sheet/mineral/plastitanium, -/obj/item/stack/sheet/mineral/plastitanium, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"lX" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ +"lw" = ( +/obj/effect/turf_decal/box/corners{ dir = 8 }, -/turf/open/floor/engine/hull, -/area/overmap_encounter/planetoid/jungle/explored) -"lY" = ( -/obj/machinery/door/airlock/glass, -/turf/open/floor/plasteel/tech/techmaint, -/area/overmap_encounter/planetoid/jungle/explored) -"ma" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/concrete/reinforced{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"mb" = ( -/obj/effect/decal/cleanable/dirt/dust, +"ly" = ( +/obj/structure/spacevine, /obj/structure/cable{ icon_state = "1-2" }, @@ -1734,139 +1632,230 @@ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"md" = ( -/obj/structure/closet/firecloset/full{ - anchored = 1 - }, -/obj/item/extinguisher/advanced, -/obj/structure/railing{ - dir = 10 - }, +"lB" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/glass, /obj/structure/spider/stickyweb, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam2" }, /area/overmap_encounter/planetoid/jungle/explored) -"mh" = ( -/obj/structure/spacevine, -/obj/structure/flora/rock/jungle, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"lD" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "4-8" }, -/area/overmap_encounter/planetoid/jungle/explored) -"mi" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/medium{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"mn" = ( -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" +"lG" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, -/turf/open/floor/plating/dirt/jungle{ +/area/overmap_encounter/planetoid/jungle/explored) +"lI" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport/tower) +"lM" = ( +/obj/structure/spacevine, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"mo" = ( -/obj/machinery/suit_storage_unit/industrial/atmos_firesuit, -/obj/item/watertank/atmos, -/turf/open/floor/vault, +"lU" = ( +/obj/effect/turf_decal/box/corners, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"mp" = ( -/obj/effect/decal/cleanable/insectguts, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +"lZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/spacevine, +/obj/structure/cable{ + icon_state = "2-5" + }, +/turf/open/floor/carpet/black{ + name = "Door mat"; + desc = "Don't forget to get the dirt off you before going in!" }, /area/overmap_encounter/planetoid/jungle/explored) -"mr" = ( -/obj/effect/turf_decal/arrows{ +"mc" = ( +/obj/structure/railing{ dir = 8 }, /obj/structure/spacevine, -/turf/open/floor/plating/rust, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"me" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"ms" = ( +"mg" = ( +/obj/structure/spacevine/dense, /obj/structure/flora/rock/jungle, -/obj/structure/flora/grass/jungle, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"mv" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/nurse, -/turf/open/floor/plasteel, -/area/ruin/jungle/starport) +"mj" = ( +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"mk" = ( +/obj/item/rack_parts, +/obj/structure/girder/displaced, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"mq" = ( +/obj/item/shard, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"mu" = ( +/obj/structure/cable{ + icon_state = "4-10" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "mw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"mB" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +"mz" = ( +/obj/machinery/telecomms/processor, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam2" }, /area/overmap_encounter/planetoid/jungle/explored) -"mK" = ( -/obj/structure/railing, -/obj/structure/spacevine, +"mA" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/spacevine/dense, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"mP" = ( -/obj/item/watertank/atmos, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"mD" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"mQ" = ( -/obj/structure/flora/rock/jungle, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"mE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs/medium{ + dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) -"mX" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ +"mF" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/obj/structure/window/plasma/reinforced{ +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"mG" = ( +/obj/machinery/door/airlock/glass{ dir = 4 }, +/obj/structure/barricade/wooden/crude, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"na" = ( -/obj/effect/turf_decal/industrial/traffic/corner{ - dir = 1 +"mI" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, -/turf/open/floor/concrete{ +/area/overmap_encounter/planetoid/jungle/explored) +"mJ" = ( +/obj/item/stack/sheet/mineral/plastitanium, +/obj/item/stack/sheet/mineral/plastitanium, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ng" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 +"mS" = ( +/obj/structure/table, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"mU" = ( +/obj/structure/cable{ + icon_state = "5-10" }, -/obj/structure{ - desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; - dir = 8; - icon = 'icons/obj/turrets.dmi'; - icon_state = "syndie_off"; - name = "defunct laser cannon"; - pixel_x = 26 +/obj/structure/spider/stickyweb, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, -/turf/open/floor/concrete/slab_1{ +/area/overmap_encounter/planetoid/jungle/explored) +"mW" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"nb" = ( +/obj/structure/spacevine, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"nc" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"ne" = ( +/obj/structure/spacevine, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"nh" = ( -/obj/structure/table, +"nf" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_welding{ + anchored = 1 + }, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "ni" = ( @@ -1874,6 +1863,21 @@ /obj/machinery/light/broken/directional/north, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) +"nj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"nk" = ( +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/overmap_encounter/planetoid/jungle/explored) "nm" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -1881,64 +1885,79 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/ruin/jungle/starport) -"np" = ( -/obj/structure/railing{ - dir = 8 +"nq" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/grass/jungle, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/turf/open/floor/plasteel/stairs/old, -/area/overmap_encounter/planetoid/jungle/explored) -"nt" = ( -/obj/structure/door_assembly, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"nz" = ( -/obj/structure/sign/syndicate{ - pixel_y = -32 +"nr" = ( +/obj/effect/turf_decal/arrows{ + dir = 4 }, +/obj/structure/spacevine/dense, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"nD" = ( -/obj/effect/turf_decal/number/zero{ - pixel_x = -7; - pixel_y = 32 +"ns" = ( +/turf/open/floor/plasteel/stairs{ + dir = 1 }, -/obj/effect/turf_decal/number/four{ - pixel_x = 6; - pixel_y = 32 +/area/overmap_encounter/planetoid/jungle/explored) +"nw" = ( +/obj/structure/railing, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, -/obj/structure{ - desc = "A devastating strike weapon of times past. The mountings seem broken now."; - dir = 4; - icon = 'icons/mecha/mecha_equipment.dmi'; - icon_state = "mecha_missilerack_six"; - name = "ancient missile rack"; - pixel_x = -26; - pixel_y = 11 +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"ny" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/structure/spider/stickyweb, +/turf/open/floor/vault, +/area/overmap_encounter/planetoid/jungle/explored) +"nA" = ( +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/area/overmap_encounter/planetoid/jungle/explored) +"nB" = ( +/obj/structure/flora/rock, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, /area/overmap_encounter/planetoid/jungle/explored) "nF" = ( /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"nI" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/toxins, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/wood{ - icon_state = "wood-broken3" - }, -/area/ruin/jungle/starport) -"nK" = ( -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +"nG" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"nH" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"nI" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/toxins, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, +/area/ruin/jungle/starport) "nM" = ( /obj/structure/chair{ dir = 4 @@ -1946,78 +1965,58 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"nN" = ( -/obj/structure/cable{ - icon_state = "1-10" - }, -/obj/structure/spider/stickyweb, +"nS" = ( /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"nP" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"nT" = ( +/obj/structure/closet/emcloset/anchored, +/obj/effect/turf_decal/borderfloor{ + dir = 1 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"nQ" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 +"nZ" = ( +/obj/structure/table/reinforced, +/obj/structure/spider/stickyweb, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"oa" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"nV" = ( -/obj/effect/decal/cleanable/vomit/old, +"ob" = ( /obj/structure/spider/stickyweb, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/mineral/plastitanium, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, /area/overmap_encounter/planetoid/jungle/explored) -"nW" = ( -/obj/structure/flora/rock/pile, +"oc" = ( +/obj/effect/decal/cleanable/glass, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland4" + icon_state = "wasteland8" }, /area/overmap_encounter/planetoid/jungle/explored) -"nY" = ( -/obj/structure/table/rolling, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = 10; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = -10; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = 2; - pixel_y = 5 +"od" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = -6; - pixel_y = 5 +/area/overmap_encounter/planetoid/jungle/explored) +"oe" = ( +/obj/structure/spacevine, +/obj/structure/spider/stickyweb, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) "of" = ( /obj/structure/cable{ @@ -2028,49 +2027,39 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"oj" = ( -/obj/structure/flora/rock, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +"og" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"ok" = ( -/obj/structure/spacevine, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"oi" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, /area/overmap_encounter/planetoid/jungle/explored) -"on" = ( -/obj/structure/railing, -/turf/open/floor/plasteel/stairs/old{ - dir = 8 - }, +"om" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"oo" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "oq" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/vault, /area/ruin/jungle/starport) -"or" = ( -/obj/structure/railing, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"ot" = ( -/obj/item/stack/ore/salvage/scrapmetal/five, +"os" = ( +/obj/structure/spider/stickyweb, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ou" = ( -/obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ +"ow" = ( +/obj/effect/turf_decal/arrows, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -2079,31 +2068,27 @@ dir = 1 }, /area/ruin/jungle/starport/tower) -"oz" = ( -/obj/effect/decal/cleanable/molten_object, -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug" +"oy" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "oA" = ( /turf/open/floor/wood, /area/ruin/jungle/starport) -"oC" = ( -/obj/structure/railing/corner, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"oD" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"oF" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree5" +"oH" = ( +/obj/structure/railing/corner, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -2111,198 +2096,226 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) -"oT" = ( -/obj/structure/flora/junglebush, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"oW" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"oK" = ( +/obj/structure/spacevine/dense, +/obj/structure/cable{ + icon_state = "1-2" }, -/area/overmap_encounter/planetoid/jungle/explored) -"oY" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +/obj/structure/cable{ + icon_state = "1-10" }, -/area/overmap_encounter/planetoid/jungle/explored) -"pa" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/spider/stickyweb, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"pf" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ph" = ( -/obj/structure/cable{ - icon_state = "4-10" +"oL" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"pl" = ( -/obj/effect/turf_decal/arrows, +"oN" = ( /obj/structure/spacevine, -/turf/open/floor/concrete{ - light_range = 2 +/obj/effect/turf_decal/weather/dirt{ + dir = 1 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"po" = ( +"oQ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"oS" = ( +/obj/effect/decal/cleanable/generic, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"px" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 +"oU" = ( +/obj/structure/railing/corner{ + dir = 8 }, +/obj/structure/spider/stickyweb, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"py" = ( -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plasteel, +"oV" = ( +/turf/open/floor/plasteel/stairs/right{ + dir = 4 + }, /area/overmap_encounter/planetoid/jungle/explored) -"pB" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"oX" = ( +/obj/structure/railing{ + dir = 6 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"pC" = ( +"pb" = ( /obj/effect/turf_decal/industrial/stand_clear{ dir = 4 }, -/obj/structure/spacevine, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"pE" = ( -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"pe" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 }, +/turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) -"pG" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ +"pi" = ( +/obj/effect/turf_decal/industrial/traffic{ dir = 4 }, -/obj/structure/window/plasma/reinforced{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plating, -/area/ruin/jungle/starport) -"pI" = ( -/obj/structure/table, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"pJ" = ( -/obj/structure/flora/tree/jungle/small, -/turf/open/floor/plating/grass/jungle{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"pK" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken2" +"pk" = ( +/obj/structure/cable{ + icon_state = "6-9" }, -/area/ruin/jungle/starport) -"pL" = ( -/obj/effect/decal/cleanable/ash/large, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland3" +/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"pM" = ( +"pn" = ( +/obj/structure/table, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"pr" = ( /obj/structure/table, /turf/open/floor/plating, -/area/ruin/jungle/starport) -"pP" = ( +/area/overmap_encounter/planetoid/jungle/explored) +"pu" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland6" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"pv" = ( /obj/structure/spacevine, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam3" +/obj/structure/flora/rock/jungle, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, -/area/ruin/jungle/starport) -"pT" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) -"qb" = ( -/obj/structure/flora/junglebush/b, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ +"pz" = ( +/obj/structure/railing/corner, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"qf" = ( -/obj/effect/turf_decal/industrial/warning{ +"pG" = ( +/obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 4 }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/obj/structure/window/plasma/reinforced{ + dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"qh" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plating, +/area/ruin/jungle/starport) +"pH" = ( +/obj/effect/turf_decal/industrial/traffic/corner, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"qi" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"pK" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/ruin/jungle/starport) +"pM" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/ruin/jungle/starport) +"pO" = ( +/obj/effect/turf_decal/atmos/plasma, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"qm" = ( -/obj/structure/railing{ - dir = 4 +"pP" = ( +/obj/structure/spacevine, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam3" + }, +/area/ruin/jungle/starport) +"pQ" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland3" }, +/area/overmap_encounter/planetoid/jungle/explored) +"pS" = ( +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"pU" = ( +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"qn" = ( -/obj/structure/railing{ - dir = 4 +"pY" = ( +/obj/structure/chair, +/obj/item/stack/sheet/metal, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"pZ" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"qa" = ( +/obj/effect/decal/cleanable/insectguts, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, +/area/overmap_encounter/planetoid/jungle/explored) +"qc" = ( +/obj/structure/flora/junglebush/b, +/obj/structure/flora/grass/jungle, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"qs" = ( -/obj/structure/railing, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"qd" = ( +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"qk" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"qq" = ( +/obj/structure/cable{ + icon_state = "2-5" }, +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) "qt" = ( /obj/structure/door_assembly, @@ -2332,34 +2345,18 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"qz" = ( -/obj/structure/spacevine, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"qC" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden, -/turf/open/floor/plating, +"qD" = ( +/obj/item/chair, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"qE" = ( -/obj/effect/decal/cleanable/shreds, +"qG" = ( +/obj/item/stack/cable_coil/cut/red, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"qH" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/stairs/medium{ - dir = 1 - }, -/area/overmap_encounter/planetoid/jungle/explored) "qI" = ( /obj/structure/closet, /turf/open/floor/plating{ @@ -2374,20 +2371,48 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"qK" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" +"qL" = ( +/obj/effect/turf_decal/number/zero{ + pixel_x = -7; + pixel_y = 32 + }, +/obj/effect/turf_decal/number/four{ + pixel_x = 6; + pixel_y = 32 + }, +/obj/structure{ + desc = "A devastating strike weapon of times past. The mountings seem broken now."; + dir = 4; + icon = 'icons/mecha/mecha_equipment.dmi'; + icon_state = "mecha_missilerack_six"; + name = "ancient missile rack"; + pixel_x = -26; + pixel_y = 11 + }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"qO" = ( -/obj/structure/railing/corner{ - dir = 8 +"qM" = ( +/obj/machinery/atmospherics/components/binary/pump, +/obj/structure{ + desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; + dir = 8; + icon = 'icons/obj/turrets.dmi'; + icon_state = "syndie_off"; + name = "defunct laser cannon"; + pixel_x = 26 }, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"qN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland4" + }, +/area/overmap_encounter/planetoid/jungle/explored) "qP" = ( /obj/structure/rack, /obj/item/ammo_casing/caseless/rocket{ @@ -2410,41 +2435,63 @@ }, /turf/open/floor/vault, /area/ruin/jungle/starport) -"qR" = ( -/obj/effect/decal/cleanable/shreds, -/turf/closed/wall, +"qQ" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"qT" = ( -/obj/structure/railing{ - dir = 10 +"qS" = ( +/obj/structure/chair{ + dir = 8 }, -/obj/structure/spacevine/dense, +/obj/structure/spider/stickyweb, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"qW" = ( +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"qX" = ( +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"qY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/spacevine, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "ra" = ( /obj/item/stack/cable_coil/cut/red, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/ruin/jungle/starport) -"rb" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"rc" = ( -/obj/item/chair, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) "rd" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 }, /turf/open/floor/vault, /area/ruin/jungle/starport) +"rf" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/junglebush/large, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "rh" = ( /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt/dust, @@ -2452,22 +2499,9 @@ icon_state = "panelscorched" }, /area/ruin/jungle/starport) -"ri" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"rj" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/railing/corner, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, +"rk" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) "rl" = ( /obj/structure/spider/stickyweb, @@ -2479,92 +2513,36 @@ /obj/effect/decal/cleanable/glass, /turf/open/floor/plating, /area/ruin/jungle/starport) -"rn" = ( -/obj/structure/table_frame, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) "ro" = ( /obj/structure/curtain, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"rq" = ( -/obj/structure/railing/corner{ - dir = 4 +"ru" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 8 }, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/spacevine, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"rr" = ( -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"rt" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland3" - }, -/area/overmap_encounter/planetoid/jungle/explored) "rv" = ( /obj/structure/chair{ dir = 4 }, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"ry" = ( -/obj/structure/railing, +"rE" = ( /obj/structure/railing{ - dir = 4 - }, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"rz" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"rA" = ( -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/obj/effect/decal/cleanable/molten_object/large, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"rB" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"rG" = ( -/obj/item/stack/cable_coil/cut/red, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"rH" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 + dir = 8 }, -/turf/open/floor/concrete{ +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"rI" = ( -/obj/structure/railing, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/overmap_encounter/planetoid/jungle/explored) "rJ" = ( /obj/structure/chair{ dir = 1 @@ -2572,54 +2550,42 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"rK" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/telecomms/receiver, -/turf/open/floor/plating/dirt/jungle/wasteland, -/area/overmap_encounter/planetoid/jungle/explored) -"rM" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"rV" = ( -/obj/structure/railing{ - dir = 4 +"rO" = ( +/obj/structure{ + desc = "A devastating strike weapon of times past. The mountings seem broken now."; + dir = 4; + icon = 'icons/mecha/mecha_equipment.dmi'; + icon_state = "mecha_missilerack_six"; + name = "ancient missile rack"; + pixel_x = -26; + pixel_y = -5 }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"rX" = ( -/obj/structure/sink/kitchen{ - dir = 8; - pixel_x = 11 - }, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"rY" = ( -/obj/structure/spider/stickyweb, +"rR" = ( +/obj/structure/bed/pod, +/obj/structure/curtain, +/obj/machinery/light/broken/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ruin/jungle/starport) +"rS" = ( /obj/structure/flora/grass/jungle/b, +/obj/structure/flora/junglebush, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"rZ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +"rT" = ( +/obj/structure/mecha_wreckage/ripley/firefighter, +/turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) -"sc" = ( -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/concrete{ - light_range = 2 - }, +"sb" = ( +/obj/structure/chair, +/obj/effect/decal/cleanable/shreds, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) "sd" = ( /obj/structure/table/reinforced, @@ -2630,271 +2596,242 @@ /obj/structure/closet, /turf/open/floor/wood, /area/ruin/jungle/starport) -"si" = ( -/obj/structure/railing{ - dir = 2 - }, -/obj/effect/turf_decal/industrial/warning{ +"sf" = ( +/obj/effect/turf_decal/industrial/stand_clear{ dir = 8 }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/obj/structure/railing/corner, +/obj/structure/railing/corner{ + dir = 8 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"sr" = ( -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"st" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/dirt/jungle{ +"sg" = ( +/obj/structure/flora/tree/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"su" = ( -/obj/structure/railing{ - dir = 2 +"sh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland3" }, -/obj/structure/spacevine, +/area/overmap_encounter/planetoid/jungle/explored) +"sj" = ( +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/extinguisher, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/turf/open/floor/vault, +/area/overmap_encounter/planetoid/jungle/explored) +"sk" = ( +/obj/structure/spacevine/dense, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"sv" = ( -/obj/effect/decal/cleanable/shreds, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ +"sl" = ( +/obj/structure/spider/stickyweb, +/obj/machinery/light/broken/directional/south, +/mob/living/simple_animal/hostile/poison/giant_spider/nurse, +/turf/open/floor/plasteel, +/area/ruin/jungle/starport) +"sm" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"sy" = ( -/obj/structure/railing, -/obj/structure/railing{ +"sn" = ( +/obj/structure/railing/corner{ dir = 8 }, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"sC" = ( -/obj/structure/cable{ - icon_state = "4-8" +"sp" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, -/obj/structure/cable{ - icon_state = "4-8" +/area/overmap_encounter/planetoid/jungle/explored) +"sz" = ( +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 +/obj/effect/decal/cleanable/molten_object, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug" }, -/turf/open/floor/concrete/reinforced{ +/area/overmap_encounter/planetoid/jungle/explored) +"sA" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland3" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"sB" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/suit/fire/atmos, +/obj/item/clothing/mask/gas/atmos, +/obj/item/clothing/head/hardhat/atmos, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"sD" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"sE" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) "sF" = ( /obj/structure/closet/wardrobe/black, /turf/open/floor/plating{ icon_state = "platingdmg1" }, /area/ruin/jungle/starport) +"sH" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "sK" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/donkpockets, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"sL" = ( -/obj/structure/door_assembly, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"sM" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"sP" = ( -/obj/structure/flora/tree/jungle{ - icon_state = "tree8" +"sN" = ( +/obj/structure/closet/emcloset/anchored, +/obj/structure/railing{ + dir = 10 }, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"sQ" = ( -/obj/structure/railing{ - dir = 4 +"sS" = ( +/obj/machinery/telecomms/broadcaster, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam2" }, -/obj/effect/turf_decal/borderfloor{ - dir = 5 +/area/overmap_encounter/planetoid/jungle/explored) +"tb" = ( +/obj/structure/table/reinforced, +/obj/item/binoculars, +/obj/item/pen/fountain, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"td" = ( +/obj/structure/window/plasma/reinforced{ + dir = 4 }, +/obj/machinery/suit_storage_unit/open, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"sT" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"sU" = ( -/obj/structure/flora/rock, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +"te" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/stairs/medium{ + dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) -"sW" = ( -/obj/structure/sign/syndicate{ - pixel_x = -32 - }, +"tj" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"sX" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"tm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland9" }, /area/overmap_encounter/planetoid/jungle/explored) -"sY" = ( -/obj/structure/girder/displaced, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +"tn" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland7" }, /area/overmap_encounter/planetoid/jungle/explored) -"tb" = ( -/obj/structure/table/reinforced, -/obj/item/binoculars, -/obj/item/pen/fountain, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"tc" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/structure{ - desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; - dir = 4; - icon = 'icons/obj/turrets.dmi'; - icon_state = "syndie_off"; - name = "defunct laser cannon"; - pixel_x = -26 - }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"tf" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/spacevine, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"tg" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"th" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"tk" = ( -/obj/structure/rack, -/obj/item/mecha_parts/mecha_equipment/extinguisher, -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, -/turf/open/floor/vault, -/area/overmap_encounter/planetoid/jungle/explored) "to" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/wood, /area/ruin/jungle/starport) -"tr" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/glass, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"tt" = ( -/obj/structure/cable{ - icon_state = "6-8" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"tp" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"tv" = ( -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"tx" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" +"ts" = ( +/obj/structure/railing{ + dir = 4 }, -/area/overmap_encounter/planetoid/jungle/explored) -"tz" = ( -/obj/structure/spider/stickyweb, +/obj/structure/spacevine, /turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"tA" = ( -/obj/effect/decal/cleanable/insectguts, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"tw" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"tB" = ( +"ty" = ( /obj/structure/spacevine, /obj/effect/turf_decal/weather/dirt{ - dir = 9 + dir = 6 }, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"tC" = ( -/obj/structure/railing/corner, -/obj/structure/spacevine, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/concrete/slab_1{ +"tD" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"tE" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +"tF" = ( +/obj/structure/cable{ + icon_state = "4-8" }, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"tI" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/mineral/plastitanium, +"tH" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "tJ" = ( /obj/item/stack/ore/salvage/scrapmetal/five, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"tL" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel, +"tK" = ( +/obj/structure/railing, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "tM" = ( /obj/structure/cable{ @@ -2907,90 +2844,77 @@ icon_state = "plastitanium_dam2" }, /area/ruin/jungle/starport) -"tN" = ( -/obj/structure/flora/junglebush, -/obj/structure/flora/junglebush/b, -/obj/structure/flora/junglebush/large, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"tP" = ( +/obj/structure/rack, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"tT" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"tO" = ( +"tV" = ( /obj/structure/spacevine, /turf/open/floor/plating{ - icon_state = "platingdmg2" + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) -"tQ" = ( -/obj/machinery/atmospherics/components/binary/valve{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, +"ua" = ( /obj/structure/railing/corner{ - dir = 8 + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"tR" = ( -/obj/effect/radiation{ - rad_power = 180; - rad_range = 2 - }, -/obj/effect/decal/cleanable/molten_object/large, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug"; - light_color = "#a0ad20"; - light_range = 3 +"ub" = ( +/obj/structure/railing{ + dir = 6 }, -/area/overmap_encounter/planetoid/jungle/explored) -"tW" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ud" = ( +"uf" = ( +/obj/item/stack/cable_coil/cut/red, /obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ue" = ( +"um" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 10 - }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"uh" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/junglebush/large, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"ui" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland9" + dir = 9 }, -/area/overmap_encounter/planetoid/jungle/explored) -"uk" = ( -/obj/structure/spacevine/dense, /obj/effect/turf_decal/weather/dirt{ dir = 5 }, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"uq" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"un" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 + }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "ur" = ( @@ -3010,6 +2934,14 @@ /obj/machinery/atmospherics/components/binary/pump, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) +"uy" = ( +/obj/structure/flora/tree/jungle/small{ + icon_state = "tree3" + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "uz" = ( /obj/structure/window/plasma/reinforced{ dir = 8 @@ -3017,19 +2949,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"uA" = ( -/obj/structure/railing, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"uB" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) "uC" = ( /obj/structure/spider/stickyweb, /obj/structure/spacevine, @@ -3037,44 +2956,65 @@ icon_state = "platingdmg3" }, /area/ruin/jungle/starport) -"uD" = ( -/obj/structure/spacevine/dense, -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"uJ" = ( +"uE" = ( /obj/structure/railing{ dir = 10 }, -/turf/open/floor/plating, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"uL" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland5" +"uK" = ( +/obj/structure/chair{ + dir = 4 }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"uN" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/grass/jungle, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ +"uO" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"uP" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/glass, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/jungle/explored) "uQ" = ( /obj/structure/cable, /obj/structure/spider/stickyweb, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) "uR" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/overmap_encounter/planetoid/jungle/explored) -"uT" = ( -/obj/machinery/shower{ - dir = 4; - desc = "An old shower. It looks rusted." - }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"uS" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"uT" = ( +/obj/machinery/shower{ + dir = 4; + desc = "An old shower. It looks rusted." + }, /obj/structure/mirror{ pixel_y = 30 }, @@ -3082,111 +3022,91 @@ /obj/machinery/light/floor, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"uW" = ( +"uU" = ( +/obj/structure/spacevine/dense, /obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon{ - icon_state = "cocoon3" +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"uY" = ( +"vc" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/structure/spacevine, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"vf" = ( -/obj/structure/flora/tree/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, +"vd" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/stairs/medium, /area/overmap_encounter/planetoid/jungle/explored) -"vi" = ( +"ve" = ( /obj/structure/railing{ - dir = 8 + dir = 1 }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +/turf/open/floor/plasteel/stairs{ + dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) -"vj" = ( -/obj/structure/frame/machine, -/turf/open/floor/plating/dirt/jungle/wasteland, -/area/overmap_encounter/planetoid/jungle/explored) -"vk" = ( -/obj/effect/decal/cleanable/ash, +"vg" = ( +/obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"vm" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 +"vl" = ( +/obj/structure/railing/corner{ + dir = 8 }, -/turf/open/water/jungle, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) -"vo" = ( -/obj/structure/spacevine, -/obj/structure/spacevine, -/turf/open/floor/concrete{ +"vn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"vp" = ( -/obj/effect/turf_decal/industrial/warning/corner{ +"vr" = ( +/obj/structure/chair/comfy/shuttle{ + name = "Grav Couch"; dir = 8 }, -/turf/open/floor/concrete{ - light_range = 2 - }, +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) -"vq" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland7" +"vs" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 1 }, -/area/overmap_encounter/planetoid/jungle/explored) -"vt" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland4" +/turf/open/floor/concrete{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"vu" = ( -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/item/stack/cable_coil/cut/red, -/obj/effect/decal/cleanable/glass, +"vv" = ( /obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"vw" = ( +"vx" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam5" - }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"vz" = ( -/obj/effect/decal/cleanable/ash/large, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" - }, +"vA" = ( +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) -"vB" = ( -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/obj/structure{ - desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; - dir = 8; - icon = 'icons/obj/turrets.dmi'; - icon_state = "syndie_off"; - name = "defunct laser cannon"; - pixel_x = 26 - }, -/turf/open/floor/concrete/slab_1{ +"vC" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -3199,54 +3119,48 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"vG" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ +"vE" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"vK" = ( -/obj/structure/girder/displaced, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"vH" = ( +/obj/structure/spider/stickyweb, +/obj/structure/cable{ + icon_state = "1-2" }, +/turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"vL" = ( +"vJ" = ( /obj/structure/spacevine, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"vM" = ( -/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"vQ" = ( -/obj/effect/turf_decal/arrows{ - dir = 8 +"vK" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, +/area/ruin/jungle/starport) +"vT" = ( /obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"vR" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ +"vU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -3255,6 +3169,26 @@ /obj/effect/decal/remains/human, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) +"vW" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plasteel/stairs/left, +/area/overmap_encounter/planetoid/jungle/explored) +"vX" = ( +/obj/structure/railing, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"vZ" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "wa" = ( /obj/structure/chair{ dir = 8 @@ -3262,14 +3196,6 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"wb" = ( -/obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "wc" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3285,103 +3211,104 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) -"we" = ( -/obj/structure/chair{ - dir = 8 +"wf" = ( +/obj/item/rack_parts, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"wo" = ( +/obj/structure/railing, +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, -/obj/structure/spider/stickyweb, -/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"wg" = ( +"wr" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/spacevine, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"wi" = ( -/obj/effect/turf_decal/atmos/plasma, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +"wt" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 }, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"wk" = ( -/obj/structure/chair{ - dir = 4 +/obj/effect/turf_decal/weather/dirt{ + dir = 9 }, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/rust, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"wl" = ( -/obj/structure/spacevine, -/turf/closed/wall/concrete/reinforced, +"wv" = ( +/obj/structure/rack, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"wm" = ( -/obj/structure/flora/rock, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"ww" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"ws" = ( -/obj/item/stack/sheet/mineral/plastitanium, -/obj/item/stack/sheet/mineral/plastitanium, -/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"wx" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland3" }, /area/overmap_encounter/planetoid/jungle/explored) "wy" = ( /obj/structure/spider/stickyweb, /turf/open/floor/wood, /area/ruin/jungle/starport) -"wA" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "wB" = ( /obj/structure/spider/stickyweb, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"wE" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/structure/spider/stickyweb, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"wG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/stairs/medium{ - dir = 4 +"wC" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "wH" = ( /obj/structure/girder/displaced, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"wJ" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, +"wI" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"wK" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave, -/turf/open/floor/plasteel/dark, +"wM" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"wN" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +"wO" = ( +/obj/structure{ + desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; + dir = 8; + icon = 'icons/obj/turrets.dmi'; + icon_state = "syndie_off"; + name = "defunct laser cannon"; + pixel_x = 26 }, -/obj/structure/spacevine, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, /turf/open/floor/concrete/slab_1{ light_range = 2 }, @@ -3392,62 +3319,31 @@ /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/jungle/starport) -"wQ" = ( -/obj/structure/spacevine, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"wT" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +"wR" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/turf/open/floor/plasteel/stairs/medium{ - dir = 8 +/obj/structure/spacevine, +/obj/structure/railing, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"wW" = ( -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" - }, -/obj/structure/rack, -/turf/open/floor/vault, +"wY" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating/dirt/jungle/wasteland, /area/overmap_encounter/planetoid/jungle/explored) -"wX" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/structure/flora/rock/pile, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" +"xd" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/arrows{ + dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"wZ" = ( -/obj/structure/flora/rock/pile, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"xb" = ( -/obj/structure/spacevine, +"xf" = ( +/obj/structure/railing, /obj/structure/spacevine, /turf/open/floor/plating/dirt/jungle{ light_range = 2 @@ -3460,36 +3356,17 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"xi" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 5 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 9 - }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"xj" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland5" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"xl" = ( -/obj/structure/chair{ - dir = 1 +"xh" = ( +/obj/structure/cable{ + icon_state = "4-9" }, +/obj/structure/spacevine, /obj/structure/spider/stickyweb, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"xm" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"xn" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plasteel, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "xo" = ( /obj/structure/spider/stickyweb, @@ -3506,17 +3383,13 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) -"xr" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland9" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"xt" = ( -/obj/structure/spacevine, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"xs" = ( +/obj/item/radio/intercom/directional/north{ + pixel_y = 24 }, -/area/overmap_encounter/planetoid/jungle/explored) +/obj/item/stack/sheet/metal, +/turf/open/floor/plasteel, +/area/ruin/jungle/starport) "xu" = ( /obj/structure/cable{ icon_state = "0-4" @@ -3525,40 +3398,119 @@ icon_state = "wood-broken4" }, /area/ruin/jungle/starport) -"xA" = ( -/obj/effect/turf_decal/atmos/plasma, -/obj/structure/spacevine, +"xw" = ( +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) +"xz" = ( +/obj/structure/spider/stickyweb, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel, +/area/ruin/jungle/starport) +"xC" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"xD" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "xE" = ( /obj/structure/bed/pod, /obj/structure/curtain, /obj/item/stack/sheet/metal, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"xI" = ( +"xF" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"xG" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug"; + light_color = "#a0ad20"; + light_range = 3 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"xH" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = 11 + }, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"xL" = ( +/obj/structure/railing/corner, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"xM" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/spider/stickyweb, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"xO" = ( /obj/structure/spacevine, /obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"xJ" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/rust, +"xP" = ( +/obj/machinery/atmospherics/components/binary/pump, +/obj/structure{ + desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; + dir = 4; + icon = 'icons/obj/turrets.dmi'; + icon_state = "syndie_off"; + name = "defunct laser cannon"; + pixel_x = -26 + }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"xQ" = ( -/obj/effect/decal/cleanable/shreds, +"xS" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/stairs/medium, +/area/overmap_encounter/planetoid/jungle/explored) +"xT" = ( +/obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"xU" = ( +/obj/effect/decal/cleanable/ash, +/obj/structure/spacevine, /turf/open/floor/plating{ - icon_state = "panelscorched" + icon_state = "platingdmg3" }, /area/overmap_encounter/planetoid/jungle/explored) -"xZ" = ( -/obj/structure/flora/grass/jungle/b, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ +"xX" = ( +/obj/structure/railing, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -3569,175 +3521,127 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport/tower) -"yb" = ( +"yf" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"ym" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/plastitanium, +/area/overmap_encounter/planetoid/jungle/explored) +"yr" = ( +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ - icon_state = "4-9" + icon_state = "1-2" }, -/obj/structure/spacevine, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"yc" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon, +"ys" = ( /obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"yd" = ( -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "floor5-old" - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"yh" = ( -/obj/item/stack/cable_coil/cut/red, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"yi" = ( -/obj/structure/spider/stickyweb, -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"yu" = ( +/obj/structure/girder/displaced, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"yj" = ( -/obj/item/stack/ore/salvage/scrapmetal/five, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ +"yx" = ( +/obj/structure/spacevine, +/obj/structure/flora/rock/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"yp" = ( -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"yq" = ( -/obj/structure/chair, -/obj/item/stack/sheet/metal, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"yt" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"yv" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"yw" = ( -/obj/item/chair, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"yx" = ( -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/vault, -/area/overmap_encounter/planetoid/jungle/explored) "yA" = ( /obj/structure/spider/stickyweb, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/starport) -"yD" = ( -/obj/item/stack/sheet/mineral/plastitanium, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/water/jungle, +"yI" = ( +/obj/item/chair, +/obj/structure/spider/stickyweb, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"yH" = ( -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"yO" = ( +/obj/effect/decal/cleanable/molten_object/large, +/obj/effect/radiation{ + rad_power = 180; + rad_range = 3 }, -/area/overmap_encounter/planetoid/jungle/explored) -"yJ" = ( -/obj/structure/chair{ - dir = 8 +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug"; + light_color = "#a0ad20"; + light_range = 3 }, -/obj/effect/decal/cleanable/insectguts, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"yM" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine, +"yP" = ( +/obj/structure/flora/rock, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" + icon_state = "wasteland9" }, /area/overmap_encounter/planetoid/jungle/explored) "yQ" = ( /obj/structure/table/rolling, /turf/open/floor/vault, /area/ruin/jungle/starport) -"yY" = ( -/obj/structure/flora/rock, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland4" +"yU" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/concrete{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"zc" = ( -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, +"yV" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"yW" = ( +/obj/effect/turf_decal/atmos/plasma, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"ze" = ( +"za" = ( /obj/structure/railing{ - dir = 10 + dir = 5 }, -/obj/structure/spacevine, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"zi" = ( -/obj/structure{ - desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; - dir = 4; - icon = 'icons/obj/turrets.dmi'; - icon_state = "syndie_off"; - name = "defunct laser cannon"; - pixel_x = -26 - }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"zd" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland5" }, /area/overmap_encounter/planetoid/jungle/explored) -"zk" = ( +"zg" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/glass/plasma, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"zn" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 +"zj" = ( +/obj/structure/chair{ + dir = 4 }, -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/jungle, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"zo" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +"zl" = ( +/obj/structure/spacevine, +/obj/structure/spacevine, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"zm" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) "zr" = ( /obj/machinery/shower{ dir = 4; @@ -3749,6 +3653,12 @@ /obj/machinery/light/floor, /turf/open/floor/plasteel/patterned, /area/ruin/jungle/starport) +"zt" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "zu" = ( /obj/machinery/door/airlock{ dir = 4 @@ -3760,29 +3670,41 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/starport) -"zw" = ( -/obj/structure/spacevine, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"zv" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug" }, /area/overmap_encounter/planetoid/jungle/explored) -"zG" = ( -/turf/open/floor/plating/rust, +"zB" = ( +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"zI" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/spacevine, +"zD" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"zJ" = ( -/obj/structure/railing{ - dir = 4 +"zF" = ( +/obj/effect/decal/cleanable/shreds, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, +/area/overmap_encounter/planetoid/jungle/explored) +"zG" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"zH" = ( /obj/structure/spider/stickyweb, /turf/open/floor/concrete/reinforced{ light_range = 2 @@ -3800,94 +3722,77 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport) -"zT" = ( -/obj/structure/spacevine, -/turf/open/floor/plating, +"zL" = ( +/obj/structure/frame/machine, +/turf/open/floor/vault, +/area/overmap_encounter/planetoid/jungle/explored) +"zM" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"zN" = ( +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"zQ" = ( +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) "zV" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/broken/directional/north, /turf/open/floor/plating, /area/ruin/jungle/starport) -"zZ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"Aa" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "Ab" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"Ae" = ( -/obj/structure/girder/displaced, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"Af" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Ai" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) -"Aj" = ( -/obj/structure/railing, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Ak" = ( -/turf/open/floor/plasteel/stairs{ - dir = 8 +"Ac" = ( +/turf/open/floor/plating{ + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) -"Am" = ( -/obj/structure/railing{ - dir = 1 +"Ah" = ( +/obj/structure/flora/tree/jungle/small{ + icon_state = "tree1" }, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"Aq" = ( -/obj/machinery/telecomms/broadcaster, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam2" +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"As" = ( -/obj/structure/sign/syndicate{ - anchored = 0 - }, -/turf/open/floor/concrete/slab_1{ +"Al" = ( +/obj/structure/spacevine, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"At" = ( -/obj/structure/railing, -/obj/structure/spacevine, +"An" = ( /obj/structure/railing{ dir = 4 }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +/turf/open/floor/plasteel/stairs/right, /area/overmap_encounter/planetoid/jungle/explored) -"Av" = ( -/obj/effect/decal/cleanable/ash/large, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland5" +"Ap" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ax" = ( +"Aw" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-8" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, -/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) "Az" = ( /obj/structure/cable{ @@ -3898,60 +3803,83 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"AB" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, +"AA" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/shreds, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"AD" = ( -/obj/effect/decal/cleanable/molten_object, +"AE" = ( +/obj/structure/spacevine/dense, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"AF" = ( -/obj/structure/spacevine/dense, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +"AK" = ( +/obj/structure/spacevine, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"AG" = ( -/obj/machinery/autolathe, -/turf/open/floor/vault, +"AL" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam5" + }, /area/overmap_encounter/planetoid/jungle/explored) -"AH" = ( -/obj/structure/rack, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/obj/item/reagent_containers/food/snacks/canned/beans, -/turf/open/floor/plating/rust, +"AM" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plasteel/stairs/old, /area/overmap_encounter/planetoid/jungle/explored) -"AO" = ( -/turf/open/floor/plasteel/stairs{ - dir = 4 +"AP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) "AQ" = ( /obj/structure/spider/stickyweb, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"AR" = ( +"AS" = ( +/obj/structure/sign/syndicate{ + anchored = 0 + }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"AT" = ( /obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"AU" = ( +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 + }, +/obj/effect/decal/cleanable/molten_object/large, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland7" + icon_state = "wasteland_dug"; + light_color = "#a0ad20"; + light_range = 3 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"AV" = ( +/obj/structure/spacevine, +/obj/structure/flora/rock/jungle, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "AX" = ( @@ -3961,137 +3889,245 @@ }, /turf/open/floor/plasteel, /area/ruin/jungle/starport) +"AY" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "AZ" = ( /obj/structure/closet, /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"Bg" = ( -/obj/structure/railing{ - dir = 10 +"Ba" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 }, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Bi" = ( +"Bb" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "6-8" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Bk" = ( +"Bc" = ( /obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ +/obj/machinery/light/directional/west, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Bm" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, +"Bd" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Be" = ( +/obj/item/stack/sheet/mineral/plastitanium, +/obj/item/stack/sheet/mineral/plastitanium, +/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Bp" = ( -/obj/structure/railing, -/obj/structure/spacevine, -/turf/open/floor/concrete/slab_1{ +"Bf" = ( +/obj/effect/decal/remains/human, +/obj/machinery/light/broken/directional/east, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"Bo" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Bs" = ( +"Bq" = ( +/obj/effect/decal/cleanable/ash, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland5" +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"Bu" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Bt" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland9" +"Bw" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/item/extinguisher/advanced, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "Bx" = ( /turf/closed/wall/rust, /area/ruin/jungle/starport) -"By" = ( -/obj/structure/railing, -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/floor/plating/dirt/jungle{ +"BA" = ( +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Bz" = ( -/obj/structure/flora/rock, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"BB" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland4" }, /area/overmap_encounter/planetoid/jungle/explored) -"BC" = ( -/obj/item/rack_parts, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) "BD" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/jungle/starport/tower) -"BF" = ( -/obj/structure/closet/emcloset/anchored, -/obj/effect/turf_decal/borderfloor{ - dir = 1 +"BE" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"BH" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 6 +"BG" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) +"BJ" = ( +/obj/structure/table, +/obj/item/radio/intercom/directional/north{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/jungle/starport) "BK" = ( /obj/structure/bed, /obj/structure/curtain/cloth/fancy, /turf/open/floor/wood, /area/ruin/jungle/starport) +"BL" = ( +/obj/structure/flora/tree/jungle{ + icon_state = "tree8" + }, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "BM" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/jungle/starport/plasma) -"BN" = ( +"BT" = ( /obj/item/stack/sheet/mineral/plastitanium, /obj/item/stack/sheet/mineral/plastitanium, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"BU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/spacevine/dense, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"BQ" = ( -/turf/open/floor/plasteel/stairs/right{ - dir = 4 +"BV" = ( +/obj/structure/girder, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"BX" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"BR" = ( +"Cb" = ( +/obj/effect/decal/cleanable/shreds, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/spacevine/dense, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"Cc" = ( +/obj/structure/flora/tree/jungle{ + icon_state = "tree9" + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "Cd" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/ruin/jungle/starport) -"Ce" = ( +"Cg" = ( +/obj/structure/flora/tree/jungle/small{ + icon_state = "tree4" + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Cj" = ( /obj/structure/spacevine/dense, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Ck" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 6 + dir = 10 }, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) +"Cl" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/glass, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"Cm" = ( +/obj/item/stack/cable_coil/cut/red, +/obj/effect/decal/cleanable/glass, +/obj/structure/girder/displaced, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam2" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Cn" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "Co" = ( /obj/structure/closet, /obj/item/clothing/under/syndicate/aclfgrunt, @@ -4102,34 +4138,55 @@ icon_state = "platingdmg2" }, /area/ruin/jungle/starport) -"Cp" = ( -/obj/structure/railing/corner{ - dir = 4 +"Cq" = ( +/obj/structure/railing{ + dir = 10 }, -/obj/structure/spider/stickyweb, +/obj/structure/spacevine/dense, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Cu" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg3" +"Cx" = ( +/obj/structure/table{ + name = "officer's table"; + desc = "A square piece of metal standing on four metal legs. It can not move. This one feels more important than the others" }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"Cv" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 4 +"CA" = ( +/obj/structure/railing, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"CB" = ( +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Cy" = ( +"CC" = ( /obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, /area/overmap_encounter/planetoid/jungle/explored) -"Cz" = ( -/obj/effect/decal/cleanable/plastic, -/turf/open/floor/concrete{ +"CD" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"CE" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -4141,18 +4198,31 @@ icon_state = "plastitanium_dam3" }, /area/ruin/jungle/starport) -"CG" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 9 +"CK" = ( +/obj/structure/railing/corner, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, -/obj/effect/turf_decal/weather/dirt{ - dir = 5 +/area/overmap_encounter/planetoid/jungle/explored) +"CL" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"CO" = ( -/obj/structure/flora/junglebush, -/turf/open/floor/plating/grass/jungle{ +"CM" = ( +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"CN" = ( +/obj/item/watertank/atmos, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -4163,16 +4233,22 @@ }, /turf/open/floor/plasteel, /area/ruin/jungle/starport) +"CQ" = ( +/obj/structure/spacevine, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "CR" = ( /obj/effect/decal/cleanable/blood/drip, /obj/machinery/light/directional/north, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"CS" = ( -/obj/effect/decal/remains/human, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"CU" = ( +/obj/structure/spacevine, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "CV" = ( @@ -4183,65 +4259,17 @@ icon_state = "wood-broken4" }, /area/ruin/jungle/starport) -"CW" = ( -/obj/item/radio/intercom/directional/south, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/plating/rust, -/area/ruin/jungle/starport) -"CZ" = ( -/obj/structure/spacevine, -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"Da" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"De" = ( -/obj/structure/flora/rock, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Df" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"Dg" = ( -/obj/structure/frame/computer{ - dir = 4 +"Dl" = ( +/obj/structure/railing{ + dir = 10 }, -/turf/open/floor/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) -"Dh" = ( -/obj/structure/flora/grass/jungle/b, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/obj/structure/sign/syndicate{ + pixel_y = 32 }, -/area/overmap_encounter/planetoid/jungle/explored) -"Dj" = ( -/obj/structure/frame/computer, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Dk" = ( -/obj/structure/door_assembly/door_assembly_eng, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "Dm" = ( /obj/machinery/atmospherics/pipe/manifold/orange{ dir = 8 @@ -4250,21 +4278,6 @@ /obj/structure/spider/cocoon, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Dn" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland7" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Dq" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) "Dr" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -4278,36 +4291,25 @@ /obj/item/stack/sheet/metal, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"Dw" = ( -/obj/item/chair, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"Dz" = ( -/obj/structure/railing, +"Dt" = ( +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"DA" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree3" +"Dy" = ( +/obj/effect/radiation{ + rad_power = 66; + rad_range = 2 }, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/obj/effect/decal/cleanable/molten_object, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"DD" = ( -/obj/structure/railing, -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"DG" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1 - }, +"DF" = ( +/obj/effect/decal/cleanable/ash/large, /obj/structure/spacevine, /turf/open/floor/plating/dirt/jungle{ light_range = 2 @@ -4318,50 +4320,27 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"DI" = ( -/turf/open/floor/plasteel/stairs, -/area/overmap_encounter/planetoid/jungle/explored) -"DL" = ( -/obj/structure/rack, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/turf/open/floor/plasteel/dark, -/area/overmap_encounter/planetoid/jungle/explored) -"DM" = ( -/obj/structure/railing{ - dir = 8 +"DJ" = ( +/obj/structure/cable{ + icon_state = "6-9" }, /obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"DO" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "1-2" +"DK" = ( +/obj/structure/flora/rock/pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland5" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"DQ" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, +"DN" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "DR" = ( /obj/structure/toilet{ @@ -4370,23 +4349,23 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plasteel/patterned, /area/ruin/jungle/starport) -"DU" = ( -/obj/structure/flora/junglebush/large, -/turf/open/floor/plating/grass/jungle{ +"DS" = ( +/obj/effect/decal/cleanable/ash, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"DX" = ( -/obj/structure/flora/rock/jungle, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +"DV" = ( +/obj/machinery/light/broken/directional/west, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"DY" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland3" - }, +"DZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "Ea" = ( /obj/structure/railing{ @@ -4396,20 +4375,17 @@ /obj/machinery/light/broken/directional/south, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"Eb" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"Ed" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland4" }, /area/overmap_encounter/planetoid/jungle/explored) -"Ef" = ( -/obj/effect/turf_decal/borderfloor/corner{ - dir = 4 +"Ee" = ( +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "Eg" = ( /obj/structure/window/plasma/reinforced{ @@ -4418,6 +4394,12 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) +"Eh" = ( +/obj/machinery/power/shuttle/engine/fueled/plasma{ + dir = 8 + }, +/turf/open/floor/engine/hull, +/area/overmap_encounter/planetoid/jungle/explored) "Ei" = ( /obj/structure/sink{ pixel_y = 17 @@ -4427,81 +4409,106 @@ }, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"El" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"Em" = ( -/obj/effect/turf_decal/weather/dirt{ +"Ej" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ dir = 4 }, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"En" = ( -/obj/effect/turf_decal/arrows, -/obj/effect/decal/cleanable/glass, /turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Eq" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland6" +"Ek" = ( +/obj/structure/flora/tree/jungle{ + icon_state = "tree10" }, -/area/overmap_encounter/planetoid/jungle/explored) -"Eu" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 1 +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/obj/structure/railing{ - dir = 4 +/area/overmap_encounter/planetoid/jungle/explored) +"Es" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/junglebush/large, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"ED" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/light/broken/directional/north, -/turf/open/floor/plasteel, +"Et" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, /area/overmap_encounter/planetoid/jungle/explored) -"EE" = ( -/obj/structure/flora/grass/jungle/b, -/obj/structure/flora/grass/jungle, +"Ev" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"EG" = ( -/obj/effect/decal/cleanable/oil, +"Ey" = ( +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = 10; + pixel_y = 5 + }, +/obj/structure/table/rolling, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = -10; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = -6; + pixel_y = 5 + }, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"EH" = ( -/obj/structure/table, -/obj/structure/spacevine, -/turf/open/floor/vault, -/area/ruin/jungle/starport) -"EI" = ( -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/plating/dirt/jungle{ +"EA" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"EJ" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland4" +"EB" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"EK" = ( -/obj/effect/decal/cleanable/glass, -/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, -/turf/open/floor/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) +"EH" = ( +/obj/structure/table, +/obj/structure/spacevine, +/turf/open/floor/vault, +/area/ruin/jungle/starport) "EM" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -4516,215 +4523,301 @@ /obj/item/clothing/under/syndicate/combat, /turf/open/floor/plating, /area/ruin/jungle/starport) -"EN" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"EQ" = ( -/obj/structure/spacevine, -/mob/living/simple_animal/hostile/poison/giant_spider/nurse, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"ET" = ( -/obj/effect/decal/cleanable/glass, +"EP" = ( +/obj/structure/rack, /turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) -"EU" = ( -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 4 - }, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "EV" = ( /obj/structure/table, /obj/item/toy/cards/deck/syndicate, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) +"EX" = ( +/turf/open/floor/plasteel/stairs/right, +/area/overmap_encounter/planetoid/jungle/explored) +"EY" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"EZ" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"Fa" = ( +/obj/structure/spacevine, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) "Fb" = ( /obj/machinery/light/directional/north, /obj/machinery/suit_storage_unit/inherit/industrial, /turf/open/floor/vault, /area/ruin/jungle/starport) -"Fc" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" +"Fe" = ( +/obj/structure/railing, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/turf/open/floor/plasteel/stairs{ +/area/overmap_encounter/planetoid/jungle/explored) +"Ff" = ( +/obj/effect/turf_decal/arrows{ dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"Fg" = ( -/obj/structure/spacevine, -/obj/effect/turf_decal/weather/dirt{ - dir = 6 +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"Fk" = ( -/obj/item/stack/sheet/metal, -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +"Fh" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Fq" = ( -/obj/structure/rack, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass/twenty, -/obj/item/stack/sheet/glass/twenty, -/turf/open/floor/plasteel/dark, +"Fl" = ( +/obj/machinery/atmospherics/pipe/manifold/orange{ + dir = 8 + }, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"Fs" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle{ +"Fm" = ( +/obj/structure/table/rolling, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = 10; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = -10; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/vault, +/area/overmap_encounter/planetoid/jungle/explored) +"Fn" = ( +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/structure/spacevine, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"Fr" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" + }, +/area/overmap_encounter/planetoid/jungle/explored) "Ft" = ( /obj/machinery/door/poddoor{ id = "jbs3" }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"Fx" = ( -/obj/structure/spider/stickyweb, +"Fu" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass/plasma, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"FA" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam4" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"FK" = ( -/obj/item/shard, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, +"Fv" = ( +/obj/structure/frame/machine, +/obj/item/circuitboard/machine/telecomms/receiver, +/turf/open/floor/plating/dirt/jungle/wasteland, /area/overmap_encounter/planetoid/jungle/explored) -"FM" = ( -/obj/machinery/light/broken/directional/west, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"Fw" = ( +/obj/structure/railing{ + dir = 6 }, -/area/overmap_encounter/planetoid/jungle/explored) -"FP" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/obj/structure/railing/corner{ + pixel_x = -23 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"FQ" = ( +"Fy" = ( +/obj/effect/decal/cleanable/oil, /obj/structure/spacevine/dense, -/obj/structure/flora/rock/jungle, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"FY" = ( -/obj/structure/flora/rock, +"Fz" = ( /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland9" + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"Gb" = ( -/obj/structure/spacevine, +"FB" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 1 + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 }, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"Gc" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 8 +"FG" = ( +/obj/structure/railing{ + dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/jungle/starport) -"Gh" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/spacevine/dense, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, -/turf/open/floor/wood, -/area/ruin/jungle/starport) -"Gj" = ( -/obj/structure/railing{ +/area/overmap_encounter/planetoid/jungle/explored) +"FI" = ( +/obj/structure/rack, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"FL" = ( +/obj/structure/reagent_dispensers/foamtank, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"FR" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"FS" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 + }, +/obj/structure/spacevine, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"FU" = ( +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"FX" = ( +/obj/machinery/atmospherics/pipe/manifold/orange{ dir = 8 }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/structure/spacevine/dense, -/turf/open/floor/concrete/reinforced{ +/obj/structure/spacevine, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"Ga" = ( +/obj/structure/railing/corner, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Gl" = ( -/obj/effect/turf_decal/industrial/traffic{ +"Gc" = ( +/obj/structure/frame/computer{ + anchored = 1; dir = 8 }, -/turf/open/floor/concrete{ +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport) +"Gd" = ( +/obj/effect/turf_decal/box/corners, +/obj/structure/spacevine, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Gm" = ( -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/rust, +"Ge" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/flora/grass/jungle, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"Gr" = ( -/obj/structure/railing{ - dir = 9 +"Gh" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/wood, +/area/ruin/jungle/starport) +"Gi" = ( +/obj/structure/cable{ + icon_state = "2-9" + }, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Gs" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/suit/fire/atmos, -/obj/item/clothing/mask/gas/atmos, -/obj/item/clothing/head/hardhat/atmos, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +"Gk" = ( +/obj/structure/spacevine/dense, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"Gt" = ( -/obj/structure/barricade/wooden/crude, +"Gn" = ( +/obj/structure/flora/tree/jungle{ + icon_state = "tree6" + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Go" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"Gx" = ( -/obj/structure/spacevine/dense, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ +"Gp" = ( +/obj/item/stack/sheet/mineral/plastitanium, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"Gq" = ( +/obj/structure/cable{ + icon_state = "4-9" + }, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Gy" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/junglebush/b, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"Gu" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, /area/overmap_encounter/planetoid/jungle/explored) -"Gz" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/concrete{ +"Gv" = ( +/turf/open/floor/plating/grass{ + desc = "A patch of grass. It looks well manicured"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -4734,6 +4827,14 @@ icon_state = "wood-broken7" }, /area/ruin/jungle/starport) +"GB" = ( +/obj/effect/decal/cleanable/shreds, +/turf/closed/wall, +/area/overmap_encounter/planetoid/jungle/explored) +"GC" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) "GD" = ( /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 4 @@ -4743,243 +4844,226 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"GH" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/item/shard, -/turf/open/floor/plasteel/stairs/left, -/area/overmap_encounter/planetoid/jungle/explored) -"GI" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-10" - }, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"GE" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 1 }, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"GJ" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/turf/open/water/jungle, +"GM" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"GK" = ( +"GO" = ( +/obj/structure/bed/pod, +/obj/structure/curtain, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ruin/jungle/starport) +"GQ" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/spacevine/dense, +/obj/structure/spacevine, /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"GL" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plasteel/stairs{ - dir = 8 +"GR" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 4 }, -/area/overmap_encounter/planetoid/jungle/explored) -"GP" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "GS" = ( /obj/effect/decal/remains/human, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"GT" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/machinery/power/floodlight{ - anchored = 1; - state_open = 1 +"GU" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, +/area/overmap_encounter/planetoid/jungle/explored) +"GV" = ( +/obj/structure/catwalk/over/plated_catwalk, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/spider/stickyweb, +/obj/structure/spacevine, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"GX" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"Ha" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"Hc" = ( +/obj/structure/railing{ + dir = 1 }, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"GY" = ( +"Hd" = ( /obj/structure/spacevine/dense, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"GZ" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 +"He" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Hk" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/junglebush/c, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, +/area/overmap_encounter/planetoid/jungle/explored) +"Hm" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/concrete/slab_1{ +/obj/structure/railing/corner, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ha" = ( -/obj/structure/chair/office{ - dir = 4 +"Hs" = ( +/obj/structure/table, +/obj/item/wallframe/apc, +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"Hh" = ( -/obj/machinery/atmospherics/pipe/manifold/orange{ +/turf/open/floor/plasteel/grimy, +/area/ruin/jungle/starport) +"Ht" = ( +/obj/structure/railing/corner{ dir = 8 }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/structure/spacevine/dense, -/obj/structure/spacevine, -/turf/open/floor/plating, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"Hi" = ( +"Hu" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/structure/spider/stickyweb, /obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/turf/open/floor/mineral/plastitanium, +/area/overmap_encounter/planetoid/jungle/explored) +"Hw" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/grass{ + desc = "A patch of grass. It looks well manicured"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Hy" = ( +/obj/structure/railing, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Hj" = ( +"HD" = ( /obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/power/floodlight{ + anchored = 1; + state_open = 1 + }, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, +/obj/structure/spider/stickyweb, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Ho" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"Hp" = ( -/obj/structure/spacevine, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"Hq" = ( -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/obj/effect/decal/cleanable/molten_object/large, +"HE" = ( +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug"; - light_color = "#a0ad20"; - light_range = 3 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Hr" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/slab_1{ - light_range = 2 + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"Hs" = ( -/obj/structure/table, -/obj/item/wallframe/apc, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plasteel/grimy, -/area/ruin/jungle/starport) -"Hv" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"HG" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/east, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"HH" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland0" }, /area/overmap_encounter/planetoid/jungle/explored) -"Hx" = ( +"HK" = ( +/obj/item/stack/sheet/metal, +/obj/item/stack/sheet/metal, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/girder/displaced, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Hz" = ( -/obj/effect/turf_decal/industrial/traffic/corner{ - dir = 8 - }, -/turf/open/floor/concrete{ +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"HB" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"HO" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland0" }, /area/overmap_encounter/planetoid/jungle/explored) -"HF" = ( +"HR" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/vault, +/area/overmap_encounter/planetoid/jungle/explored) +"HS" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-10" }, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"HG" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom/directional/east, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"HI" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ +"HU" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"HM" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"HT" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"HV" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) "HW" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"HX" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +"HY" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 + }, +/obj/structure/railing, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "HZ" = ( @@ -4990,76 +5074,70 @@ /obj/structure/chair, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"Ie" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +"Ig" = ( +/obj/structure/spider/stickyweb, +/obj/machinery/light/broken/directional/south, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"Ii" = ( +"Ik" = ( +/obj/structure/flora/junglebush, /obj/structure/flora/junglebush/b, -/obj/structure/flora/junglebush/c, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ij" = ( -/obj/effect/turf_decal/industrial/traffic/corner{ +"Io" = ( +/obj/structure/chair/comfy/shuttle{ + name = "Grav Couch"; dir = 4 }, -/turf/open/floor/concrete{ +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport) +"Is" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ik" = ( -/turf/closed/wall/rust, +"Iv" = ( +/obj/item/chair, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"Il" = ( -/obj/structure/railing/corner, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +"Iw" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"Im" = ( +"Ix" = ( /obj/structure/railing{ - dir = 5 + dir = 4 }, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Io" = ( -/obj/structure/chair/comfy/shuttle{ - name = "Grav Couch"; - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/jungle/starport) -"Iq" = ( -/obj/structure/flora/rock/pile, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland5" +"Iz" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) -"It" = ( +"IB" = ( /obj/structure/spacevine/dense, -/obj/structure/flora/junglebush/large, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Iy" = ( -/obj/effect/turf_decal/arrows, +"IC" = ( /obj/structure/spacevine/dense, -/turf/open/floor/concrete{ +/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -5067,24 +5145,9 @@ /obj/item/stack/ore/salvage/scrapmetal/five, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"IF" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/ash, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"IG" = ( -/obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"II" = ( -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/dirt/jungle{ +"IH" = ( +/obj/machinery/light/broken/directional/east, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -5095,150 +5158,126 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/ruin/jungle/starport) -"IN" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) -"IQ" = ( -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"IR" = ( -/turf/open/floor/mineral/plastitanium, +"IM" = ( +/obj/structure{ + desc = "A devastating strike weapon of times past. The mountings seem broken now."; + dir = 4; + icon = 'icons/mecha/mecha_equipment.dmi'; + icon_state = "mecha_missilerack_six"; + name = "ancient missile rack"; + pixel_x = -26; + pixel_y = -5 + }, +/obj/effect/decal/remains/human, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"IU" = ( +"IO" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"IW" = ( -/obj/structure/cable{ - icon_state = "2-4" +"IP" = ( +/obj/effect/decal/cleanable/molten_object/large, +/obj/effect/radiation{ + rad_power = 99; + rad_range = 3 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug"; + light_color = "#a0ad20"; + light_range = 3 }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +/area/overmap_encounter/planetoid/jungle/explored) +"IT" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" }, /area/overmap_encounter/planetoid/jungle/explored) "IY" = ( /obj/structure/table/rolling, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"IZ" = ( -/obj/structure/spacevine, -/obj/structure/spacevine, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, +"Ja" = ( +/obj/structure/table/reinforced, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) -"Jd" = ( -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"Jb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 }, -/area/overmap_encounter/planetoid/jungle/explored) -"Je" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/sign/syndicate{ - pixel_y = 32 +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"Jc" = ( +/obj/structure/frame/computer, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Jj" = ( -/turf/open/floor/plasteel/stairs/left{ - dir = 8 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Jn" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +"Jf" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Jo" = ( -/obj/structure/spacevine, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"Js" = ( -/obj/structure/flora/tree/jungle/small, -/obj/structure/flora/grass/jungle/b, +"Jh" = ( +/obj/structure/flora/tree/jungle{ + icon_state = "tree4" + }, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Jt" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +"Jm" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plating/rust, +/area/ruin/jungle/starport) +"Jw" = ( +/obj/structure/railing{ + dir = 10 }, -/area/overmap_encounter/planetoid/jungle/explored) -"Ju" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 +/obj/structure/railing/corner{ + dir = 8; + pixel_x = 23 }, -/turf/open/floor/plating, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) -"JA" = ( -/obj/structure/chair/comfy/shuttle{ - name = "Grav Couch"; - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, +"Jx" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) -"JB" = ( -/obj/effect/turf_decal/industrial/warning/corner, +"Jz" = ( +/obj/effect/turf_decal/arrows, /turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"JC" = ( -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"JG" = ( -/obj/effect/turf_decal/borderfloor/corner{ - dir = 1 +"JD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"JH" = ( -/obj/structure{ - desc = "A devastating strike weapon of times past. The mountings seem broken now."; - dir = 4; - icon = 'icons/mecha/mecha_equipment.dmi'; - icon_state = "mecha_missilerack_six"; - name = "ancient missile rack"; - pixel_x = -26; - pixel_y = -5 +/obj/structure/cable{ + icon_state = "1-6" }, -/obj/effect/decal/remains/human, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"JI" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland3" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"JK" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine/dense, +"JE" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -5246,53 +5285,54 @@ /obj/machinery/atmospherics/components/unary/portables_connector, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"JN" = ( -/obj/structure/spacevine, -/obj/structure/flora/rock/jungle, +"JM" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/junglebush/b, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"JO" = ( -/obj/structure/railing{ - dir = 4 +"JS" = ( +/obj/structure/railing/corner{ + dir = 8 }, /obj/structure/spacevine, /turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"JP" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-6" +"JV" = ( +/obj/structure/railing, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +/area/overmap_encounter/planetoid/jungle/explored) +"JW" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/cocoon, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) -"JQ" = ( -/obj/effect/decal/cleanable/ash/large, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland0" +"JX" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport/tower) +"JY" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"JR" = ( -/obj/item/radio/intercom/directional/north{ - pixel_y = 24 +"Ka" = ( +/obj/structure/spider/stickyweb, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/obj/item/stack/sheet/metal, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel, -/area/ruin/jungle/starport) -"JT" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) -"JU" = ( +"Kc" = ( /obj/effect/turf_decal/industrial/traffic/corner{ dir = 8 }, @@ -5300,62 +5340,66 @@ icon_state = "platingdmg2" }, /area/overmap_encounter/planetoid/jungle/explored) -"JX" = ( -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/mineral/plastitanium, -/area/ruin/jungle/starport/tower) -"Kb" = ( -/obj/effect/turf_decal/industrial/traffic{ - dir = 4 +"Kd" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" }, -/turf/open/floor/concrete{ - light_range = 2 +/area/overmap_encounter/planetoid/jungle/explored) +"Kh" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, /area/overmap_encounter/planetoid/jungle/explored) -"Km" = ( +"Ki" = ( +/obj/effect/decal/remains/human, /obj/structure/spider/stickyweb, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ko" = ( -/obj/structure/closet/firecloset/full{ - anchored = 1 +"Kk" = ( +/obj/structure/spacevine, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/obj/item/extinguisher/advanced, -/obj/effect/turf_decal/borderfloor{ +/area/overmap_encounter/planetoid/jungle/explored) +"Kl" = ( +/obj/structure/railing{ dir = 1 }, -/obj/item/geiger_counter, -/turf/open/floor/plating, +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"Kq" = ( -/obj/effect/turf_decal/industrial/stand_clear{ +"Kn" = ( +/obj/structure/flora/junglebush, +/obj/structure/flora/junglebush/b, +/obj/structure/flora/junglebush/large, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Kw" = ( +/obj/structure/railing{ dir = 8 }, /obj/structure/spacevine/dense, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"Ks" = ( -/obj/structure/railing/corner, -/obj/structure/spacevine, /turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Kv" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 +"Kx" = ( +/obj/item/clothing/under/syndicate/aclfgrunt, +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, /area/overmap_encounter/planetoid/jungle/explored) -"Kw" = ( -/obj/structure/girder, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) "Kz" = ( /obj/machinery/atmospherics/components/unary/portables_connector{ dir = 4 @@ -5365,22 +5409,62 @@ /obj/machinery/light/directional/west, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/plasma) +"KB" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light/broken/directional/north, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"KC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"KD" = ( +/obj/structure/sign/syndicate{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "KE" = ( /mob/living/simple_animal/hostile/poison/giant_spider/hunter, /turf/open/floor/plating{ icon_state = "panelscorched" }, /area/ruin/jungle/starport) -"KJ" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 8 +"KF" = ( +/obj/effect/turf_decal/industrial/warning/corner, +/turf/open/floor/concrete{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"KM" = ( -/obj/effect/turf_decal/box/corners, -/obj/structure/spacevine, -/turf/open/floor/concrete/slab_1{ +"KG" = ( +/obj/machinery/processor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"KL" = ( +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" + }, +/obj/item/stack/cable_coil/cut/red, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"KN" = ( +/obj/item/stack/cable_coil/cut/red, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -5391,61 +5475,70 @@ /obj/item/wallframe/apc, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"KP" = ( -/obj/structure/door_assembly, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"KQ" = ( +/obj/structure/spacevine, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt, +/area/overmap_encounter/planetoid/jungle/explored) +"KR" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"KS" = ( -/obj/effect/turf_decal/industrial/stand_clear{ +"KX" = ( +/obj/structure/railing/corner{ dir = 8 }, -/obj/structure/spacevine/dense, +/obj/machinery/light/directional/west, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"KT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +"KY" = ( +/turf/closed/wall/concrete/reinforced, /area/overmap_encounter/planetoid/jungle/explored) -"KU" = ( +"La" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/ruin/jungle/starport) +"Lb" = ( /obj/structure/flora/rock/pile, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland6" + icon_state = "wasteland2" }, /area/overmap_encounter/planetoid/jungle/explored) -"KW" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland7" +"Lf" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"La" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken7" +"Lh" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 }, -/area/ruin/jungle/starport) -"Ld" = ( -/turf/open/floor/plasteel/stairs/left{ - dir = 1 +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Lj" = ( +"Li" = ( /obj/structure/spacevine, -/obj/effect/turf_decal/weather/dirt{ - dir = 10 +/obj/structure/flora/rock/jungle, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"Ll" = ( -/obj/structure/railing/corner, -/turf/open/floor/concrete/slab_1{ +"Lk" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -5458,20 +5551,22 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"Lr" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" +"Lq" = ( +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +/obj/structure/railing, +/turf/open/floor/plasteel/stairs{ + dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) -"Lt" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon, -/turf/open/floor/plating/rust, +"Lu" = ( +/obj/structure/flora/tree/jungle/small{ + icon_state = "tree5" + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "Lv" = ( /obj/structure/railing{ @@ -5480,15 +5575,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"Lz" = ( -/obj/item/weldingtool, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"Lx" = ( +/obj/structure/cable{ + icon_state = "4-8" }, +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) -"LA" = ( -/obj/structure/flora/junglebush/b, -/turf/open/floor/plating/grass/jungle{ +"Ly" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -5496,30 +5591,36 @@ /obj/structure/tank_dispenser/oxygen, /turf/open/floor/vault, /area/ruin/jungle/starport) -"LD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"LF" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, /area/overmap_encounter/planetoid/jungle/explored) -"LG" = ( -/obj/structure/railing/corner{ - dir = 8 +"LJ" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"LH" = ( -/obj/structure/girder/displaced, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"LI" = ( -/obj/machinery/atmospherics/pipe/manifold/orange{ - dir = 8 +"LK" = ( +/obj/machinery/suit_storage_unit/industrial/atmos_firesuit, +/obj/item/watertank/atmos, +/turf/open/floor/vault, +/area/overmap_encounter/planetoid/jungle/explored) +"LL" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/glass, +/obj/structure/spider/stickyweb, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "LM" = ( /obj/structure/closet, @@ -5532,11 +5633,11 @@ icon_state = "wood-broken2" }, /area/ruin/jungle/starport) -"LO" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland6" - }, +"LN" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/spider/stickyweb, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "LP" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -5544,174 +5645,140 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport) -"LT" = ( -/obj/structure/railing, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"LU" = ( -/obj/item/geiger_counter, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/concrete{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"LV" = ( -/obj/structure/table, +"LY" = ( /obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"LW" = ( -/obj/structure/closet/emcloset/anchored, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/concrete/reinforced{ +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"LX" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"Ma" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/junglebush/large, +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Mc" = ( -/obj/structure/railing, -/obj/effect/decal/cleanable/oil, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"Mg" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "4-8" }, -/area/overmap_encounter/planetoid/jungle/explored) -"Mf" = ( -/obj/structure/spacevine, -/obj/machinery/light/directional/west, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Mh" = ( -/obj/structure/table, -/obj/item/radio/intercom/directional/south, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/grimy, -/area/ruin/jungle/starport) "Mi" = ( /obj/machinery/light/broken/directional/west, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"Mq" = ( -/turf/open/floor/concrete{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Mr" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, -/area/ruin/jungle/starport) -"Mu" = ( -/obj/effect/decal/remains/human, +"Mk" = ( /obj/structure/spider/stickyweb, /turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) -"Mz" = ( +"Ml" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/spacevine, -/turf/open/floor/plating/rust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland0" + }, /area/overmap_encounter/planetoid/jungle/explored) -"MC" = ( +"Mp" = ( +/obj/structure/table{ + name = "officer's table"; + desc = "A square piece of metal standing on four metal legs. It can not move. This one feels more important than the others" + }, /obj/structure/spider/stickyweb, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/stairs/medium, -/area/overmap_encounter/planetoid/jungle/explored) -"MD" = ( /obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"MG" = ( -/obj/effect/turf_decal/arrows{ - dir = 4 +"Mr" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/ruin/jungle/starport) +"Mt" = ( +/obj/structure/railing/corner{ + dir = 8 }, +/obj/machinery/light/broken/directional/west, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"MI" = ( +"Mv" = ( +/obj/effect/decal/cleanable/oil, /obj/structure/railing, -/obj/item/stack/ore/salvage/scrapmetal/five, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"MJ" = ( -/obj/structure/railing/corner, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"Mx" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport/plasma) +"ME" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland9" }, /area/overmap_encounter/planetoid/jungle/explored) -"MK" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ +"MF" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"MN" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/weather/dirt{ - dir = 9 +"MH" = ( +/turf/open/floor/plasteel/stairs{ + dir = 4 }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) "MQ" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"MR" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +"MS" = ( +/obj/item/stack/sheet/mineral/plastitanium, +/obj/item/stack/sheet/mineral/plastitanium, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"MT" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/jungle{ +"MU" = ( +/obj/structure/railing, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"MW" = ( +/obj/structure/railing, +/turf/open/floor/plasteel/stairs{ + dir = 4 + }, +/area/overmap_encounter/planetoid/jungle/explored) "MX" = ( /obj/structure/curtain, /obj/structure/spider/stickyweb, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"MY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland0" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Na" = ( -/obj/effect/decal/remains/human, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, +"MZ" = ( +/obj/item/chair, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"Nc" = ( +"Nb" = ( /obj/structure/spacevine, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/turf/open/floor/concrete/reinforced{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "Nd" = ( @@ -5719,11 +5786,17 @@ /obj/structure/spacevine, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"Ng" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 +"Ne" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plating/rust, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Nf" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/vault, /area/overmap_encounter/planetoid/jungle/explored) "Nh" = ( /obj/structure/filingcabinet, @@ -5732,18 +5805,50 @@ /obj/item/ammo_box/magazine/m10mm, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"Nl" = ( -/obj/structure/railing{ +"Nj" = ( +/obj/effect/turf_decal/borderfloor{ dir = 1 }, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"Nk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"Nn" = ( +/obj/effect/turf_decal/box/corners, +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Nm" = ( -/obj/structure/table/reinforced, -/obj/structure/spider/stickyweb, -/turf/open/floor/plasteel/dark, +"No" = ( +/obj/effect/decal/cleanable/insectguts, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Nq" = ( +/obj/structure/door_assembly/door_assembly_eng, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Nr" = ( +/obj/structure/spacevine, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "Nt" = ( /obj/structure/cable{ @@ -5752,71 +5857,72 @@ /obj/machinery/power/rtg/geothermal, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Nx" = ( -/obj/effect/decal/cleanable/molten_object/large, -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug"; - light_color = "#a0ad20"; - light_range = 3 +"Nw" = ( +/obj/effect/turf_decal/arrows{ + dir = 4 }, -/area/overmap_encounter/planetoid/jungle/explored) -"NB" = ( -/obj/effect/turf_decal/arrows, -/turf/open/floor/concrete{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"NC" = ( -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"NE" = ( -/obj/structure/railing{ - dir = 10 - }, +"NA" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 6 + dir = 8 }, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"NL" = ( -/obj/structure/cable{ - icon_state = "1-2" +"ND" = ( +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, -/turf/open/floor/plasteel/stairs/medium, /area/overmap_encounter/planetoid/jungle/explored) -"NM" = ( -/obj/item/stack/cable_coil/cut/red, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/concrete/reinforced{ +"NF" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"NN" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/grass{ - desc = "A patch of grass. It looks well manicured"; - light_range = 2 +"NK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"NO" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"NU" = ( -/obj/structure/flora/grass/jungle/b, -/obj/structure/flora/junglebush, -/turf/open/floor/plating/grass/jungle{ +"NW" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/obj/structure{ + desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; + dir = 4; + icon = 'icons/obj/turrets.dmi'; + icon_state = "syndie_off"; + name = "defunct laser cannon"; + pixel_x = -26 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"NZ" = ( -/obj/structure/railing{ - dir = 10 +"NX" = ( +/obj/structure/table, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +/area/overmap_encounter/planetoid/jungle/explored) +"Oa" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) "Ob" = ( @@ -5828,20 +5934,44 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) +"Oc" = ( +/obj/item/stack/sheet/metal, +/obj/item/stack/sheet/metal, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "Od" = ( /obj/structure/girder/displaced, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Oi" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 5 +"Oe" = ( +/obj/structure/cable{ + icon_state = "5-8" }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"Oj" = ( -/obj/structure/reagent_dispensers/watertank, /obj/structure/spider/stickyweb, -/turf/open/floor/vault, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Og" = ( +/obj/structure/flora/tree/jungle{ + icon_state = "tree2" + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Oh" = ( +/obj/structure/railing/corner, +/obj/structure/spacevine, +/obj/machinery/light/broken/directional/east, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "Ok" = ( /obj/structure/spacevine/dense, @@ -5850,71 +5980,67 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"On" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife, -/turf/open/floor/plasteel, +"Om" = ( +/obj/structure/rack, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/glass/twenty, +/turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) -"Op" = ( -/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, -/obj/structure/spider/cocoon, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 +"Or" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, -/turf/open/floor/plating, -/area/ruin/jungle/starport) -"Ou" = ( -/obj/structure/table, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Ox" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom/wideband/directional/east, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"Oz" = ( -/obj/effect/turf_decal/industrial/traffic/corner{ - dir = 2 - }, -/turf/open/floor/concrete{ +"Os" = ( +/obj/structure/door_assembly, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"OA" = ( +"Ow" = ( +/obj/structure/catwalk/over/plated_catwalk, /obj/structure/cable{ - icon_state = "5-10" + icon_state = "4-8" }, -/obj/structure/spider/stickyweb, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 }, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"OC" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/junglebush/c, -/turf/open/floor/plating/grass/jungle{ +"Ox" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/wideband/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"OB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/remains/human, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"OG" = ( -/obj/structure/rack, -/turf/open/floor/vault, -/area/overmap_encounter/planetoid/jungle/explored) "OI" = ( /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"OJ" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/railing, +"OK" = ( +/obj/structure/sign/syndicate{ + pixel_x = -32 + }, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"OL" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "OM" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 4 @@ -5922,24 +6048,23 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/engine/hull, /area/ruin/jungle/starport) -"ON" = ( -/obj/structure/cable{ - icon_state = "1-2" +"OQ" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/tree/jungle{ + icon_state = "tree10" }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/jungle{ +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"OT" = ( -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 - }, -/obj/effect/decal/cleanable/molten_object, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug" - }, +"OR" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"OU" = ( +/obj/item/stack/cable_coil/cut/red, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) "OW" = ( /obj/item/stack/ore/salvage/scrapmetal/five, @@ -5949,12 +6074,20 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"Pb" = ( +"Pa" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/dirt, +/area/overmap_encounter/planetoid/jungle/explored) +"Pc" = ( /obj/structure/spacevine/dense, /turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" + icon_state = "wasteland6" }, /area/overmap_encounter/planetoid/jungle/explored) +"Pe" = ( +/obj/item/stack/sheet/mineral/plastitanium, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) "Pf" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -5972,16 +6105,54 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Pi" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +"Pk" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" }, /area/overmap_encounter/planetoid/jungle/explored) -"Pq" = ( -/obj/effect/decal/cleanable/ash, +"Pl" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/nurse, /turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) +"Pm" = ( +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Pn" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Po" = ( +/turf/open/floor/plasteel/stairs/left{ + dir = 8 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Pr" = ( +/obj/structure/girder/displaced, +/turf/open/floor/mineral/plastitanium, +/area/overmap_encounter/planetoid/jungle/explored) +"Ps" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs, +/area/overmap_encounter/planetoid/jungle/explored) +"Pv" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) "Pw" = ( /obj/structure/table/reinforced, /obj/item/pen{ @@ -5995,6 +6166,9 @@ /obj/structure/spacevine/dense, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) +"Py" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/overmap_encounter/planetoid/jungle/explored) "Pz" = ( /obj/structure/railing{ dir = 8 @@ -6003,6 +6177,16 @@ /obj/structure/chair, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) +"PA" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"PB" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) "PC" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/structure/window/plasma/reinforced{ @@ -6015,75 +6199,45 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) +"PI" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/jungle/explored) "PJ" = ( /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"PL" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 9 +"PN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland0" }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"PO" = ( -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = 10; - pixel_y = 5 - }, -/obj/structure/table/rolling, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = -10; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/ammo_casing/caseless/rocket{ - desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher"; - pixel_x = -6; - pixel_y = 5 - }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"PP" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 }, -/area/overmap_encounter/planetoid/jungle/explored) -"PS" = ( +/obj/item/extinguisher/advanced, +/obj/item/geiger_counter, /obj/structure/railing{ - dir = 10 + dir = 6 }, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"PT" = ( +"PQ" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 9 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 10 + dir = 1 }, +/obj/effect/turf_decal/weather/dirt, /turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"PU" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/stairs{ - dir = 4 - }, +"PR" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/dirt, /area/overmap_encounter/planetoid/jungle/explored) "PV" = ( /obj/structure/closet, @@ -6097,49 +6251,86 @@ icon_state = "panelscorched" }, /area/ruin/jungle/starport) -"PW" = ( -/obj/structure/chair{ - dir = 8 +"PX" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, +/area/overmap_encounter/planetoid/jungle/explored) +"PY" = ( +/obj/structure/flora/rock, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"PZ" = ( -/obj/structure/railing/corner, -/turf/open/water/jungle, +"Qa" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"Qc" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam4" +"Qb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, /area/overmap_encounter/planetoid/jungle/explored) -"Qe" = ( +"Qg" = ( +/obj/structure/railing, +/obj/structure/spacevine, /obj/structure/railing{ - dir = 1 + dir = 4 }, -/obj/structure/spacevine/dense, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Qh" = ( +"Qj" = ( +/obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland0" +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"Qk" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Qi" = ( -/obj/structure/flora/tree/jungle{ - icon_state = "tree2" +"Ql" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/tech/techmaint, +/area/overmap_encounter/planetoid/jungle/explored) +"Qo" = ( +/obj/machinery/power/floodlight{ + anchored = 1; + state_open = 1 }, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) +"Qp" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 }, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) "Qq" = ( /obj/machinery/atmospherics/components/unary/tank/toxins{ @@ -6147,88 +6338,96 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Qr" = ( -/obj/structure/window/plasma/reinforced{ - dir = 4 +"Qy" = ( +/obj/structure/railing{ + dir = 8 }, -/obj/machinery/suit_storage_unit/open, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Qs" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/mineral/plastitanium, -/area/ruin/jungle/starport/plasma) -"Qv" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/plasteel/dark, -/area/overmap_encounter/planetoid/jungle/explored) -"Qw" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/stairs/medium, -/area/overmap_encounter/planetoid/jungle/explored) -"Qx" = ( -/obj/effect/turf_decal/atmos/plasma, -/obj/structure/railing/corner{ - dir = 1 +"QC" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/spacevine, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"QB" = ( -/obj/item/rack_parts, -/obj/structure/rack, -/turf/open/floor/plasteel/dark, +"QD" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/cocoon, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "QE" = ( /turf/closed/wall/mineral/plastitanium, /area/ruin/jungle/starport) -"QK" = ( -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"QM" = ( -/obj/structure/spacevine, -/obj/structure/flora/junglebush/b, -/obj/structure/flora/grass/jungle, +"QF" = ( +/obj/structure/flora/tree/jungle/small, +/obj/structure/flora/grass/jungle/b, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"QJ" = ( +/obj/structure/spider/stickyweb, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"QL" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/oil, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"QN" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "QO" = ( /obj/machinery/suit_storage_unit/industrial/atmos_firesuit, /obj/item/watertank/atmos, /obj/machinery/light/broken/directional/south, /turf/open/floor/vault, /area/ruin/jungle/starport) -"QP" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 5 - }, -/obj/effect/turf_decal/weather/dirt{ - dir = 6 +"QS" = ( +/obj/structure/girder/displaced, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"QQ" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +"QT" = ( +/obj/structure{ + desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; + dir = 4; + icon = 'icons/obj/turrets.dmi'; + icon_state = "syndie_off"; + name = "defunct laser cannon"; + pixel_x = -26 }, -/area/overmap_encounter/planetoid/jungle/explored) -"QR" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 6 +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, -/obj/effect/turf_decal/weather/dirt{ - dir = 5 +/area/overmap_encounter/planetoid/jungle/explored) +"QU" = ( +/obj/machinery/door/airlock{ + dir = 4 }, -/turf/open/water/jungle, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plasteel/tech/techmaint, /area/overmap_encounter/planetoid/jungle/explored) "QV" = ( /obj/machinery/power/apc/auto_name/directional/east{ @@ -6237,8 +6436,18 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"QX" = ( -/obj/effect/decal/cleanable/generic, +"QW" = ( +/obj/structure/spider/stickyweb, +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"QY" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, @@ -6248,17 +6457,6 @@ /obj/item/stack/ore/salvage/scrapmetal/five, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"Ra" = ( -/obj/structure/flora/junglebush/c, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Rb" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) "Rc" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt/dust, @@ -6267,27 +6465,49 @@ /obj/item/clothing/under/syndicate/combat, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Rj" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/item/stack/ore/salvage/scrapmetal/five, +"Rd" = ( +/obj/effect/radiation{ + rad_power = 180; + rad_range = 2 + }, +/obj/effect/decal/cleanable/molten_object/large, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland_dug"; + light_color = "#a0ad20"; + light_range = 3 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Rf" = ( +/obj/structure/railing, +/turf/open/floor/plating/dirt, +/area/overmap_encounter/planetoid/jungle/explored) +"Rg" = ( +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland8" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"Rh" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/railing{ + dir = 1 + }, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"Ri" = ( +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) "Rn" = ( /obj/structure/table/reinforced, /obj/item/folder, /obj/item/paper_bin, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"Rp" = ( -/obj/structure/table, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/overmap_encounter/planetoid/jungle/explored) "Rq" = ( /obj/machinery/power/smes, /obj/structure/cable{ @@ -6295,229 +6515,71 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"Rs" = ( -/obj/structure/fluff/fokoff_sign{ - icon_state = "fokrads"; - desc = "A crudely made sign with the universal radiation hazard symbol painted onto it." - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Rt" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"Rw" = ( +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" }, -/area/overmap_encounter/planetoid/jungle/explored) -"Ry" = ( -/obj/structure/flora/rock/jungle, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"RB" = ( -/obj/structure/cable{ - icon_state = "2-5" - }, -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"RF" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"RH" = ( -/obj/machinery/light/broken/directional/east, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"RL" = ( -/obj/effect/decal/cleanable/ash, -/obj/structure/spacevine, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"RM" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"RN" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"RT" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, +"Rx" = ( +/obj/structure/railing, /obj/structure/spacevine, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"RX" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/arrows{ - dir = 8 - }, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Sc" = ( -/obj/effect/turf_decal/industrial/stand_clear{ +"Rz" = ( +/obj/structure/railing{ dir = 8 }, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) -"Sd" = ( -/obj/structure/closet, -/obj/machinery/light/broken/directional/east, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/ruin/jungle/starport) -"Se" = ( -/turf/open/floor/plasteel, -/area/ruin/jungle/starport) -"Sf" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Power Shack" - }, -/turf/open/floor/plating, -/area/ruin/jungle/starport) -"Sg" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/concrete/slab_1{ +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Sh" = ( -/obj/structure/spacevine, -/turf/open/floor/concrete{ +"RC" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Si" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"Sl" = ( +"RG" = ( +/obj/item/rack_parts, /obj/structure/rack, -/turf/open/floor/vault, -/area/ruin/jungle/starport) -"Sq" = ( -/obj/effect/turf_decal/number/zero{ - pixel_x = -7; - pixel_y = 32 - }, -/obj/effect/turf_decal/number/three{ - pixel_x = 5; - pixel_y = 32 - }, -/obj/structure{ - desc = "A devastating strike weapon of times past. The mountings seem broken now."; - dir = 4; - icon = 'icons/mecha/mecha_equipment.dmi'; - icon_state = "mecha_missilerack_six"; - name = "ancient missile rack"; - pixel_x = -26; - pixel_y = 11 - }, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"St" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plasteel/stairs/right, -/area/overmap_encounter/planetoid/jungle/explored) -"Su" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, +/turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) -"Sv" = ( -/turf/open/floor/vault, -/area/ruin/jungle/starport) -"Sw" = ( -/obj/effect/decal/cleanable/plastic, +"RI" = ( +/obj/effect/decal/cleanable/shreds, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/ash, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Sx" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"RP" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spacevine, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Sy" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"SA" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"SC" = ( -/obj/structure/flora/tree/jungle/small{ - icon_state = "tree1" +"RQ" = ( +/obj/machinery/power/shuttle/engine/fueled/plasma{ + dir = 8; + anchored = 0 }, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, -/area/overmap_encounter/planetoid/jungle/explored) -"SD" = ( -/turf/open/floor/mineral/plastitanium{ - icon_state = "plastitanium_dam5" - }, -/area/ruin/jungle/starport) -"SF" = ( +/area/overmap_encounter/planetoid/jungle/explored) +"RR" = ( /obj/structure/cable{ - icon_state = "5-10" + icon_state = "6-9" + }, +/obj/structure/cable{ + icon_state = "4-9" }, /obj/structure/spider/stickyweb, /turf/open/floor/plating/dirt/dark{ @@ -6526,42 +6588,101 @@ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"SK" = ( -/obj/structure/catwalk/over/plated_catwalk, +"RU" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"RV" = ( +/obj/structure/spacevine/dense, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"RZ" = ( +/obj/structure/railing, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"Sd" = ( +/obj/structure/closet, +/obj/machinery/light/broken/directional/east, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ruin/jungle/starport) +"Se" = ( +/turf/open/floor/plasteel, +/area/ruin/jungle/starport) +"Sf" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/structure/spacevine, +/obj/machinery/door/airlock/engineering{ + name = "Power Shack" + }, +/turf/open/floor/plating, +/area/ruin/jungle/starport) +"Sl" = ( +/obj/structure/rack, +/turf/open/floor/vault, +/area/ruin/jungle/starport) +"Sm" = ( +/turf/closed/wall/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"Ss" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/jungle/starport/plasma) +"Sv" = ( +/turf/open/floor/vault, +/area/ruin/jungle/starport) +"Sz" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 8 + }, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"SL" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"SB" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"SN" = ( -/obj/structure/railing{ - dir = 2 +"SD" = ( +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam5" }, +/area/ruin/jungle/starport) +"SG" = ( /obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure/flora/grass/jungle, +/obj/structure/flora/junglebush/b, +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"SQ" = ( -/obj/structure/railing, -/turf/open/floor/plasteel/stairs{ - dir = 4 +"SH" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"SM" = ( +/obj/effect/decal/cleanable/shreds, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" }, /area/overmap_encounter/planetoid/jungle/explored) "SS" = ( @@ -6569,40 +6690,28 @@ /obj/structure/curtain, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"ST" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"SU" = ( -/obj/structure/railing, -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"SY" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +"SX" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/spacevine, -/obj/structure/railing, -/turf/open/floor/concrete/slab_1{ +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"SZ" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/structure/closet/emcloset/anchored, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"Ta" = ( +/obj/structure/table, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ruin/jungle/starport) +"Tb" = ( +/obj/structure/spacevine, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 }, -/area/overmap_encounter/planetoid/jungle/explored) -"Tc" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) "Td" = ( /obj/machinery/atmospherics/components/binary/valve{ @@ -6618,104 +6727,48 @@ icon_state = "plastitanium_dam4" }, /area/ruin/jungle/starport) -"Tf" = ( -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Tg" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/obj/item/stack/cable_coil/cut/red, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"Tj" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/obj/structure{ - desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; - dir = 4; - icon = 'icons/obj/turrets.dmi'; - icon_state = "syndie_off"; - name = "defunct laser cannon"; - pixel_x = -26 - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Tk" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Tm" = ( -/obj/structure/railing, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "Tn" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Tp" = ( -/obj/item/chair, -/obj/item/stack/cable_coil/cut/red, -/turf/open/floor/plating/rust, +"To" = ( +/obj/item/weldingtool, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "Tr" = ( /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"Ts" = ( -/obj/machinery/door/airlock/external, +"Tt" = ( +/obj/effect/turf_decal/arrows{ + dir = 8 + }, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Tv" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/dirt, -/area/overmap_encounter/planetoid/jungle/explored) -"Tw" = ( +"Tu" = ( /obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Tx" = ( -/obj/effect/decal/cleanable/molten_object/large, -/obj/effect/radiation{ - rad_power = 99; - rad_range = 3 - }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug"; - light_color = "#a0ad20"; - light_range = 3 + dir = 10 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Tz" = ( +"TA" = ( +/obj/structure/flora/grass/jungle, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/concrete/reinforced{ +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"TC" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"TD" = ( +/obj/structure/railing, +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "TF" = ( @@ -6725,35 +6778,39 @@ /obj/machinery/light/broken/directional/north, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"TL" = ( -/obj/structure/railing, -/obj/structure/closet/secure_closet/engineering_welding{ - anchored = 1 - }, -/turf/open/floor/concrete/reinforced{ +"TK" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"TM" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle{ +"TN" = ( +/obj/structure/railing/corner, +/obj/effect/decal/cleanable/oil, +/obj/structure/spider/stickyweb, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"TQ" = ( -/obj/effect/decal/cleanable/insectguts, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"TO" = ( +/obj/structure/chair{ + dir = 1 }, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"TV" = ( -/obj/effect/decal/cleanable/molten_object, -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 +"TT" = ( +/obj/structure/railing/corner, +/obj/machinery/light/broken/directional/east, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" +/area/overmap_encounter/planetoid/jungle/explored) +"TU" = ( +/obj/structure/flora/rock/jungle, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "TW" = ( @@ -6761,15 +6818,23 @@ /obj/item/stack/sheet/metal, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"Ub" = ( -/obj/item/stack/sheet/metal, -/obj/item/stack/sheet/metal, +"TY" = ( +/obj/effect/decal/cleanable/ash, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"TZ" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/dark, +/area/overmap_encounter/planetoid/jungle/explored) +"Ua" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) "Uc" = ( /obj/structure/spacevine, /obj/structure/salvageable/autolathe, @@ -6781,82 +6846,50 @@ icon_state = "plastitanium_dam4" }, /area/ruin/jungle/starport) -"Uf" = ( -/obj/structure/girder/displaced, -/turf/open/floor/mineral/plastitanium, -/area/overmap_encounter/planetoid/jungle/explored) "Ug" = ( /obj/structure/chair{ dir = 8 }, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"Uh" = ( -/obj/effect/decal/cleanable/ash, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland2" - }, -/area/overmap_encounter/planetoid/jungle/explored) "Uj" = ( /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"Uk" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +"Up" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/area/overmap_encounter/planetoid/jungle/explored) -"Ul" = ( -/obj/structure/table, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +/turf/open/floor/plasteel/stairs{ + dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) -"Um" = ( +"Ur" = ( +/obj/structure/railing{ + dir = 1 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"Uo" = ( -/obj/structure/railing, -/obj/effect/turf_decal/weather/dirt{ - dir = 6 +/turf/open/floor/plasteel/stairs{ + dir = 8 }, -/turf/open/water/jungle, -/area/overmap_encounter/planetoid/jungle/explored) -"Uq" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"Uu" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"Us" = ( +/obj/effect/turf_decal/borderfloor/corner{ + dir = 1 }, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"Uv" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" +"Ut" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland5" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 +/area/overmap_encounter/planetoid/jungle/explored) +"Uw" = ( +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "Ux" = ( /obj/structure/spider/stickyweb, @@ -6869,18 +6902,14 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/ruin/jungle/starport) -"UA" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, +"UB" = ( +/obj/structure/spacevine, /turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"UD" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, +"UC" = ( +/obj/item/chair, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) "UE" = ( /turf/template_noop, @@ -6890,111 +6919,111 @@ /obj/mecha/working/ripley/firefighter, /turf/open/floor/vault, /area/ruin/jungle/starport) -"UH" = ( -/obj/item/stack/sheet/mineral/plastitanium, -/obj/item/stack/sheet/mineral/plastitanium, -/obj/effect/turf_decal/weather/dirt{ - dir = 9 +"UI" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland6" }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"UJ" = ( -/obj/item/stack/sheet/mineral/plastitanium, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 +"UL" = ( +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"UM" = ( -/obj/effect/decal/cleanable/generic, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"UO" = ( -/obj/structure/flora/tree/jungle{ - icon_state = "tree6" +"UQ" = ( +/obj/structure/railing{ + dir = 9 }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"UR" = ( +/obj/structure/flora/junglebush/large, +/obj/structure/flora/grass/jungle/b, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"UP" = ( +"US" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/jungle/wasteland{ icon_state = "wasteland1" }, /area/overmap_encounter/planetoid/jungle/explored) -"UY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +"UT" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"UZ" = ( -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/dirt/jungle{ +"UX" = ( +/obj/structure/spacevine, +/obj/structure/spacevine, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Va" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, +"Vd" = ( +/obj/machinery/light/broken/directional/west, /turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"Vb" = ( +"Vf" = ( /obj/effect/decal/cleanable/glass, -/turf/open/floor/concrete{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Vg" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland1" - }, +/obj/structure/spider/stickyweb, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) "Vh" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plasteel, /area/ruin/jungle/starport) -"Vi" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "Vl" = ( /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 4 }, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/plasma) -"Vo" = ( -/obj/effect/radiation{ - rad_power = 66; - rad_range = 2 +"Vm" = ( +/turf/open/floor/plasteel/stairs/right{ + dir = 1 }, -/obj/effect/decal/cleanable/molten_object, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug" +/area/overmap_encounter/planetoid/jungle/explored) +"Vp" = ( +/obj/structure/sign/syndicate{ + pixel_y = -32 + }, +/turf/open/floor/concrete/slab_1{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Vq" = ( -/obj/structure/railing{ - dir = 8 +"Vs" = ( +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dirt/dark{ name = "beaten path"; desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Vu" = ( -/obj/structure/frame/machine, -/turf/open/floor/vault, +"Vt" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, /area/overmap_encounter/planetoid/jungle/explored) -"Vw" = ( -/turf/open/floor/plating/grass{ - desc = "A patch of grass. It looks well manicured"; +"Vv" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -7003,94 +7032,82 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/plating/rust, /area/ruin/jungle/starport) -"VA" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "VB" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, /area/ruin/jungle/starport) -"VC" = ( -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland8" - }, +"VF" = ( +/obj/structure/spider/stickyweb, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"VD" = ( -/obj/item/clothing/under/syndicate/aclfgrunt, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +"VJ" = ( +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"VI" = ( +"VN" = ( /obj/structure/spacevine, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/concrete/reinforced{ +/obj/structure/flora/junglebush/b, +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"VL" = ( -/obj/effect/turf_decal/atmos/plasma, +"VT" = ( +/obj/structure/table, +/obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) -"VM" = ( -/turf/open/floor/plasteel/stairs/left{ - dir = 4 +"VV" = ( +/obj/structure/chair{ + dir = 8 }, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"VO" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon{ - icon_state = "cocoon3" +"VW" = ( +/obj/structure/railing{ + dir = 8 }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"VQ" = ( -/obj/structure/cable{ - icon_state = "4-8" +"Wd" = ( +/obj/structure/chair{ + dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"We" = ( +/obj/structure/spacevine/dense, +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"VS" = ( +"Wg" = ( /obj/structure/flora/grass/jungle, -/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/junglebush, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Wb" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, +"Wi" = ( +/obj/structure/table_frame, +/turf/open/floor/plasteel, /area/overmap_encounter/planetoid/jungle/explored) -"Wf" = ( -/obj/structure/closet/firecloset/full{ - anchored = 1 - }, -/obj/item/extinguisher/advanced, -/obj/item/geiger_counter, -/obj/structure/railing{ - dir = 6 +"Wk" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, -/turf/open/floor/concrete/reinforced{ +/obj/structure/spacevine, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -7103,105 +7120,87 @@ }, /turf/open/floor/plasteel/patterned, /area/ruin/jungle/starport) -"Wn" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) "Wo" = ( /turf/closed/wall, /area/ruin/jungle/starport) -"Wq" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/concrete/reinforced{ +"Wp" = ( +/obj/effect/turf_decal/atmos/plasma, +/obj/structure/spacevine, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"Wt" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/ash, +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Wr" = ( -/obj/structure/cable{ - icon_state = "1-10" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"Wu" = ( +/obj/structure/spider/stickyweb, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ws" = ( -/obj/structure/spacevine, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 +"Wv" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland7" }, -/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"Wy" = ( -/turf/open/floor/plasteel/stairs/right{ +"Ww" = ( +/obj/effect/turf_decal/industrial/traffic{ dir = 8 }, -/area/overmap_encounter/planetoid/jungle/explored) -"Wz" = ( -/obj/structure/flora/rock/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"WE" = ( -/obj/structure/cable{ - icon_state = "1-6" - }, /obj/structure/cable{ - icon_state = "1-10" + icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"WF" = ( -/obj/item/chair, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"WG" = ( -/obj/structure/flora/rock/jungle, -/obj/structure/flora/grass/jungle, +"Wx" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"WI" = ( -/turf/open/floor/plasteel, +"WA" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"WK" = ( -/obj/effect/turf_decal/weather/dirt{ +"WD" = ( +/obj/structure/girder, +/obj/item/stack/sheet/mineral/plastitanium, +/obj/item/stack/sheet/mineral/plastitanium, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) +"WH" = ( +/obj/structure/railing{ dir = 10 }, -/obj/effect/turf_decal/weather/dirt{ - dir = 6 - }, -/turf/open/water/jungle, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"WM" = ( -/obj/item/geiger_counter, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/concrete/slab_1{ +"WJ" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"WN" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt, +"WO" = ( +/obj/structure/door_assembly, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "WQ" = ( /obj/machinery/door/airlock/hatch, @@ -7214,11 +7213,9 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"WS" = ( -/obj/structure/chair, -/obj/effect/decal/cleanable/shreds, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, +"WT" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "WU" = ( /obj/machinery/door/airlock/glass{ @@ -7241,22 +7238,18 @@ /obj/item/stack/sheet/metal, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) -"Xc" = ( +"Xb" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/generic, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"Xd" = ( -/obj/effect/turf_decal/industrial/traffic{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland3" }, -/turf/open/floor/concrete/reinforced{ +/area/overmap_encounter/planetoid/jungle/explored) +"Xe" = ( +/obj/structure/door_assembly, +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -7267,44 +7260,14 @@ icon_state = "wood-broken5" }, /area/ruin/jungle/starport) -"Xi" = ( -/obj/structure/spacevine, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Xj" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/sign/warning/gasmask{ - pixel_y = 32 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/plating, -/area/overmap_encounter/planetoid/jungle/explored) "Xk" = ( /obj/structure/spider/stickyweb, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/ruin/jungle/starport) -"Xl" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/vault, -/area/overmap_encounter/planetoid/jungle/explored) -"Xn" = ( -/obj/structure/spacevine, -/obj/structure/spacevine, -/turf/open/floor/concrete/reinforced{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Xo" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/open/floor/concrete{ +"Xm" = ( +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -7319,22 +7282,14 @@ /obj/machinery/light/directional/west, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Xs" = ( -/obj/effect/decal/cleanable/insectguts, -/obj/structure/flora/grass/jungle/b, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Xu" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/cable{ - icon_state = "4-8" +"Xw" = ( +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/obj/structure/window/plasma/reinforced{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) "Xz" = ( /obj/structure/table, @@ -7350,18 +7305,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"XB" = ( -/obj/effect/decal/cleanable/molten_object/large, -/obj/effect/radiation{ - rad_power = 180; - rad_range = 3 - }, -/turf/open/floor/plating/dirt/jungle/wasteland{ - icon_state = "wasteland_dug"; - light_color = "#a0ad20"; - light_range = 3 - }, -/area/overmap_encounter/planetoid/jungle/explored) "XC" = ( /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/vomit/old, @@ -7370,41 +7313,39 @@ /obj/item/clothing/shoes/combat, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport/tower) -"XF" = ( -/obj/structure/sign/syndicate{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/concrete/slab_1{ +"XN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/flora/junglebush, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"XM" = ( +"XP" = ( /obj/structure/railing, +/obj/structure/closet/secure_closet/engineering_welding{ + anchored = 1 + }, /turf/open/floor/concrete/reinforced{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"XT" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/concrete/slab_1{ - light_range = 2 +"XR" = ( +/turf/open/floor/plasteel/stairs/right{ + dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) -"XU" = ( -/obj/effect/turf_decal/industrial/traffic/corner{ - dir = 8 +"XV" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/structure/spacevine, -/turf/open/floor/concrete{ - light_range = 2 +/obj/structure/cable{ + icon_state = "1-2" }, -/area/overmap_encounter/planetoid/jungle/explored) -"XW" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 1 +/turf/open/floor/plating/dirt/dark{ + name = "beaten path"; + desc = "Upon closer examination, it's dirt, compacted down by much walking"; + light_range = 2 }, -/turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "XX" = ( /obj/structure/closet, @@ -7416,89 +7357,63 @@ icon_state = "platingdmg1" }, /area/ruin/jungle/starport) -"XY" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/glass, -/obj/structure/spider/stickyweb, -/turf/open/floor/concrete/slab_1{ - light_range = 2 - }, +"Ya" = ( +/obj/structure/spacevine/dense, +/turf/open/water/jungle, /area/overmap_encounter/planetoid/jungle/explored) -"Yb" = ( -/obj/item/chair, +"Yh" = ( +/obj/structure/spacevine, /obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"Yc" = ( -/obj/structure/flora/junglebush, -/obj/structure/flora/grass/jungle, -/turf/open/floor/plating/grass/jungle{ - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Yf" = ( -/obj/structure/girder/displaced, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Yj" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/plating, -/area/ruin/jungle/starport) -"Yl" = ( -/obj/structure/table, -/obj/item/radio/intercom/directional/north{ - pixel_y = 24 - }, -/obj/machinery/light/broken/directional/north, -/turf/open/floor/plasteel/grimy, -/area/ruin/jungle/starport) -"Yp" = ( -/obj/structure/cable{ - icon_state = "6-9" - }, -/obj/structure/cable{ - icon_state = "4-9" - }, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 - }, -/area/overmap_encounter/planetoid/jungle/explored) -"Yr" = ( -/obj/structure/table/reinforced, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/jungle/starport/tower) -"Ys" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"Yi" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Yu" = ( -/obj/structure/flora/tree/jungle{ - icon_state = "tree10" +"Yj" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/plating, +/area/ruin/jungle/starport) +"Ym" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 }, -/turf/open/floor/plating/grass/jungle{ +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Yv" = ( -/obj/structure/railing{ - dir = 5 +"Yn" = ( +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/effect/decal/cleanable/glass, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"Yo" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/mineral/plastitanium, +/area/overmap_encounter/planetoid/jungle/explored) +"Yr" = ( +/obj/structure/table/reinforced, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/jungle/starport/tower) +"Yw" = ( +/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +/turf/open/floor/plating/grass{ + desc = "A patch of grass. It looks well manicured"; + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) "Yx" = ( /obj/structure/cable{ icon_state = "4-8" @@ -7506,30 +7421,46 @@ /obj/structure/spacevine, /turf/open/floor/mineral/plastitanium, /area/ruin/jungle/starport) -"Yy" = ( -/obj/item/stack/sheet/mineral/plastitanium, -/turf/open/water/jungle, +"Yz" = ( +/obj/effect/decal/cleanable/glass, +/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, +/turf/open/floor/mineral/plastitanium, /area/overmap_encounter/planetoid/jungle/explored) "YA" = ( /obj/machinery/blackbox_recorder, /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/starport/tower) -"YB" = ( -/obj/structure/flora/rock/pile, +"YC" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/open/floor/concrete{ + light_range = 2 + }, +/area/overmap_encounter/planetoid/jungle/explored) +"YD" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/spacevine, /turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) "YE" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) -"YG" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 8; - anchored = 0 +/obj/effect/decal/cleanable/shreds, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/grass/jungle{ + light_range = 2 }, -/turf/open/floor/concrete/slab_1{ +/area/overmap_encounter/planetoid/jungle/explored) +"YH" = ( +/obj/effect/decal/cleanable/shreds, +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -7540,139 +7471,204 @@ icon_state = "panelscorched" }, /area/ruin/jungle/starport) -"YM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 - }, -/turf/open/floor/concrete/reinforced{ - light_range = 2 +"YL" = ( +/obj/structure/spacevine, +/turf/closed/wall/concrete/reinforced, +/area/overmap_encounter/planetoid/jungle/explored) +"YN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland5" }, /area/overmap_encounter/planetoid/jungle/explored) -"YO" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/concrete/slab_1{ +"YP" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"YQ" = ( +/obj/structure/table, +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/jungle/explored) "YR" = ( /obj/structure/closet, /obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/ruin/jungle/starport) -"YT" = ( -/obj/structure/flora/tree/jungle{ - icon_state = "tree4" +"YS" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/cocoon{ + icon_state = "cocoon3" }, +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"YV" = ( +/obj/structure/flora/junglebush/large, /turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"YU" = ( -/obj/structure/cable{ - icon_state = "5-8" - }, -/obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"YW" = ( +/obj/structure/flora/junglebush, +/turf/open/floor/plating/grass/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"YZ" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/rust, +"YX" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/spacevine, +/turf/open/floor/concrete/slab_1{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) -"Zc" = ( -/obj/structure/cable{ - icon_state = "6-9" +"Zd" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 }, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +/obj/structure/spacevine/dense, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Ze" = ( -/obj/structure/railing{ - dir = 8 +"Zg" = ( +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland4" }, -/obj/structure/railing{ +/area/overmap_encounter/planetoid/jungle/explored) +"Zi" = ( +/obj/effect/turf_decal/industrial/warning/corner{ dir = 4 }, -/turf/open/floor/plasteel/stairs, -/area/overmap_encounter/planetoid/jungle/explored) -"Zf" = ( -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/concrete{ + light_range = 2 }, -/turf/open/floor/concrete/reinforced{ +/area/overmap_encounter/planetoid/jungle/explored) +"Zl" = ( +/obj/structure/flora/rock, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Zh" = ( +"Zn" = ( +/obj/structure/table_frame, /obj/structure/spider/stickyweb, -/turf/open/floor/plating/dirt, +/turf/open/floor/plating/rust, /area/overmap_encounter/planetoid/jungle/explored) -"Zk" = ( -/obj/structure/spacevine/dense, -/obj/structure/cable{ - icon_state = "5-8" - }, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; +"Zp" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Zo" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/plasteel, -/area/overmap_encounter/planetoid/jungle/explored) "Zr" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating, /area/ruin/jungle/starport) -"Zs" = ( -/obj/structure/cable{ - icon_state = "2-9" +"Zw" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 }, -/turf/open/floor/plating/dirt/jungle{ +/obj/structure{ + desc = "A formerly deadly laser cannon, now stuck rusting on a fightercraft."; + dir = 8; + icon = 'icons/obj/turrets.dmi'; + icon_state = "syndie_off"; + name = "defunct laser cannon"; + pixel_x = 26 + }, +/turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"Zw" = ( -/obj/machinery/door/airlock/glass, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating/rust, -/area/overmap_encounter/planetoid/jungle/explored) -"Zz" = ( -/obj/effect/decal/cleanable/vomit/old, +"Zx" = ( +/obj/structure/railing, /turf/open/floor/concrete/slab_1{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ZC" = ( -/obj/effect/turf_decal/box/corners, -/obj/structure/spacevine/dense, -/turf/open/floor/concrete/slab_1{ +"ZA" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) -"ZJ" = ( -/obj/structure/spacevine, -/mob/living/simple_animal/hostile/poison/giant_spider/hunter, +"ZB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland9" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"ZE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"ZF" = ( +/obj/structure/spacevine/dense, /turf/open/floor/concrete{ light_range = 2 }, /area/overmap_encounter/planetoid/jungle/explored) +"ZH" = ( +/obj/item/ammo_casing/caseless/rocket{ + desc = "An 84mm high explosive rocket. Looks like they'd fit into a launcher" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"ZM" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel, +/area/overmap_encounter/planetoid/jungle/explored) +"ZN" = ( +/obj/structure/spider/cocoon, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, +/turf/open/floor/plating, +/area/ruin/jungle/starport) +"ZO" = ( +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/mineral/plastitanium{ + icon_state = "plastitanium_dam4" + }, +/area/overmap_encounter/planetoid/jungle/explored) +"ZP" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, +/area/overmap_encounter/planetoid/jungle/explored) +"ZR" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle/wasteland{ + icon_state = "wasteland1" + }, +/area/overmap_encounter/planetoid/jungle/explored) "ZS" = ( -/turf/closed/wall, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/plating/dirt/jungle{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) "ZT" = ( /obj/structure/window/plasma/reinforced/plastitanium, @@ -7682,16 +7678,25 @@ }, /turf/open/floor/plating, /area/ruin/jungle/starport/tower) -"ZU" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/dirt/dark{ - name = "beaten path"; - desc = "Upon closer examination, it's dirt, compacted down by much walking"; - light_range = 2 +"ZX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, /area/overmap_encounter/planetoid/jungle/explored) -"ZW" = ( -/turf/open/water/jungle, +"ZY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, +/turf/open/floor/concrete/reinforced{ + light_range = 2 + }, /area/overmap_encounter/planetoid/jungle/explored) (1,1,1) = {" @@ -7726,8 +7731,8 @@ UE UE UE UE -dY -dY +Ee +Ee UE UE UE @@ -7744,13 +7749,13 @@ UE UE UE UE -dY -yH -wg -wg -wg -wg -wg +Ee +Xm +ir +ir +ir +ir +ir UE UE UE @@ -7765,11 +7770,11 @@ UE UE UE UE -wg -wg -Yc -wg -wg +ir +ir +lu +ir +ir "} (2,1,1) = {" UE @@ -7802,11 +7807,11 @@ UE UE UE UE -TM -tW -dY -dl -yH +ce +Ap +Ee +vT +Xm UE UE UE @@ -7820,15 +7825,15 @@ UE UE UE UE -dY -jd -TM -wg -PT -wg -wg -wg -wg +Ee +jO +ce +ir +FB +ir +ir +ir +ir UE UE UE @@ -7840,13 +7845,13 @@ UE UE UE UE -wg -wg -wg -dY -Yc -Yc -wg +ir +ir +ir +Ee +lu +lu +ir "} (3,1,1) = {" UE @@ -7868,23 +7873,23 @@ UE UE UE UE -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ue -TM -TM -qh -TM -tW -DU +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +Ck +ce +ce +zt +ce +Ap +YV UE UE UE @@ -7895,17 +7900,17 @@ UE UE UE UE -dY -jd -tW -TM -wg -PL -ZW -GJ -GJ -ue -wg +Ee +jO +Ap +ce +ir +SH +zN +NA +NA +Ck +ir UE UE UE @@ -7916,14 +7921,14 @@ UE UE UE UE -wg -wg -yH -er -uh -yH -SC -wg +ir +ir +Xm +Cg +Es +Xm +Ah +ir "} (4,1,1) = {" UE @@ -7942,27 +7947,27 @@ UE UE UE UE -Jo -ZW -ZW -ZW -ZW -ZW -ZW -ZW -uB -uB -uB -uB -ZW -ZW -GJ -ue -TM -wg -TM -tW -yH +fl +zN +zN +zN +zN +zN +zN +zN +gC +gC +gC +gC +zN +zN +NA +Ck +ce +ir +ce +Ap +Xm UE UE UE @@ -7970,37 +7975,37 @@ UE UE UE UE -oT -dE -tW -TM -wg -wg -PL -ZW -ZW -ZW -ZW -sr -wg -wg -wg +jk +sD +Ap +ce +ir +ir +SH +zN +zN +zN +zN +PB +ir +ir +ir UE -wg -wg -wg -wg -wg -wg -wg -wm -dY -dY -dY -ad -yH -dE -wg +ir +ir +ir +ir +ir +ir +ir +qQ +Ee +Ee +Ee +OQ +Xm +sD +ir "} (5,1,1) = {" UE @@ -8016,68 +8021,68 @@ UE UE UE UE -ZW -ZW -Jo -Ws -uB -uB -uB -uB -uB -uB -BH -wg -wg -wg -wg -Oi -uB -ZW -ZW -GJ -ue -wg -TM -tW +zN +zN +fl +hk +gC +gC +gC +gC +gC +gC +cv +ir +ir +ir +ir +Ua +gC +zN +zN +NA +Ck +ir +ce +Ap UE UE UE UE UE -yH -oT -oT -TM -TM -wg -wg -PL -ZW -ZW -ZW -ZW -ZW -ZW -GJ -ue -wg -wg -wg -PL -GJ -GJ -GJ -GJ -ue -wg -wg -wg -yH -dE -es -yH -wg +Xm +jk +jk +ce +ce +ir +ir +SH +zN +zN +zN +zN +zN +zN +NA +Ck +ir +ir +ir +SH +NA +NA +NA +NA +Ck +ir +ir +ir +Xm +sD +rf +Xm +ir "} (6,1,1) = {" UE @@ -8092,69 +8097,69 @@ UE UE UE UE -ZW -ZW -uB -Fg -qh -qh +zN +zN +gC +ty +zt +zt dP QE QE QE dP -wg +ir dP QE QE QE dP -wg -Oi -uB -ZW -sr -wg -Rs -tW -yH -OC -yH -yH -yH -DU -CO -wg -wg -PL -GJ -GJ -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -GJ -GJ -GJ -ZW -ZW -ZW -ZW -ZW -ZW -ue -wg -wg -yH -Js -dE -wg -wg +ir +Ua +gC +zN +PB +ir +gP +Ap +Xm +Hk +Xm +Xm +Xm +YV +YW +ir +ir +SH +NA +NA +zN +zN +zN +zN +zN +zN +zN +zN +zN +NA +NA +NA +zN +zN +zN +zN +zN +zN +Ck +ir +ir +Xm +QF +sD +ir +ir "} (7,1,1) = {" UE @@ -8167,13 +8172,13 @@ UE UE UE UE -ZW -ZW -ZW -sr -qh -qh -qh +zN +zN +zN +PB +zt +zt +zt dP QE qP @@ -8187,50 +8192,50 @@ yQ qP QE dP -wg -wg -vm -ZW -ue -wg -wg -yH -dY -dY -OC -tW -TM -wg -wg -PL -ZW -ZW -ZW -ZW -ZW -ZW -ZW -uB -uB -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ue -wg -wg -yH -wg -wg +ir +ir +ju +zN +Ck +ir +ir +Xm +Ee +Ee +Hk +Ap +ce +ir +ir +SH +zN +zN +zN +zN +zN +zN +zN +gC +gC +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +Ck +ir +ir +Xm +ir +ir UE "} (8,1,1) = {" @@ -8244,13 +8249,13 @@ UE UE UE UE -ZW -ZW -ZW -sr -TM -oF -yH +zN +zN +zN +PB +ce +Lu +Xm QE aZ bF @@ -8264,49 +8269,49 @@ bF SD Sv QE -wg -wg -vm -ZW -sr -wg -wg -TM -TM -TM -TM -TM -wg -wg -PL -ZW -uB -uB -uB -uB -uB -uB -BH -wg -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ue -wg -wg -wg +ir +ir +ju +zN +PB +ir +ir +ce +ce +ce +ce +ce +ir +ir +SH +zN +gC +gC +gC +gC +gC +gC +cv +ir +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +Ck +ir +ir +ir UE UE "} @@ -8319,15 +8324,15 @@ UE UE UE UE -ZW -ZW -ZW -ZW -ZW -BH -TM -tW -TM +zN +zN +zN +zN +zN +cv +ce +Ap +ce QE Fb bF @@ -8341,48 +8346,48 @@ Te bF QO QE -wg -TM -Oi -ZW -ZW -GJ -GJ -GJ -wQ -wQ -wQ -GJ -GJ -GJ -ZW -BH -qh -qh -wg -wg -wg -wg -wg -Rs -PL -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -WK -wg +ir +ce +Ua +zN +zN +NA +NA +NA +nb +nb +nb +NA +NA +NA +zN +cv +zt +zt +ir +ir +ir +ir +ir +gP +SH +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +ZP +ir UE UE UE @@ -8396,15 +8401,15 @@ UE UE UE UE -ZW -ZW -ZW -ZW -BH -wg -wg -wg -wg +zN +zN +zN +zN +cv +ir +ir +ir +ir QE Sl bF @@ -8418,48 +8423,48 @@ aj bF wP QE -wg -tW -TM -Oi -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -uB -BH -wg -TM -TM -qh -UD -yH -yH -YT -dE -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -sr -wg -wg +ir +Ap +ce +Ua +zN +zN +zN +zN +zN +zN +zN +zN +gC +cv +ir +ce +ce +zt +KR +Xm +Xm +Jh +sD +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +PB +ir +ir UE UE UE @@ -8472,16 +8477,16 @@ UE UE UE UE -ZW -ZW -ZW -uB -BH -wg -wg -wg -OT -xr +zN +zN +zN +gC +cv +ir +ir +ir +sz +da dP QE LC @@ -8495,49 +8500,49 @@ rd UG QE dP -wg -DA -tW -TM -Oi -uB -uB -uB -uB -uB -uB -BH -wg -wg -wg -wg -TM -TM -yH -yH -yH -yH -dE -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ue -wg -wm +ir +uy +Ap +ce +Ua +gC +gC +gC +gC +gC +gC +cv +ir +ir +ir +ir +ce +ce +Xm +Xm +Xm +Xm +sD +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +Ck +ir +qQ UE UE "} @@ -8548,18 +8553,18 @@ UE UE UE UE -ZW -ZW -uB -BH -wg -wg -wg -wg -yH -NC -wg -wg +zN +zN +gC +cv +ir +ir +ir +ir +Xm +Fz +ir +ir dP QE QE @@ -8571,50 +8576,50 @@ QE QE QE dP -qh -qh -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -yH -yH -TM -br -br -qz -am -dE -TM -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -sr -wg -wg +zt +zt +ir +ir +ir +ir +ir +ir +ir +ir +ir +ir +ir +ir +ir +ir +Xm +Xm +ce +Nr +Nr +CQ +UR +sD +ce +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +PB +ir +ir UE UE "} @@ -8624,74 +8629,74 @@ UE UE UE UE -ZW -PZ -hG -Rt -Rt -Rt -Rt -Rt -Rt -Rt -bw -Rt -Rt -Wq -NZ -wg -uA -RM -AB -Bk -zI -Il -hu -vR -Eb -Gj -Gj -Rt -Rt -Rt -Rt -Eb -Eb -Eb -NZ -wg -wg -yH -tW -yH -yH -yH -yH -Qi -jd -jd -yH -TM -wg -vm -ZW -ZW -ZW -uB -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ue -wg +zN +xL +Fw +Rz +Rz +Rz +Rz +Rz +Rz +Rz +EZ +Rz +Rz +sn +nH +ir +Hy +IB +tF +Nb +PX +kz +ub +JS +iC +Kw +Kw +Rz +Rz +Rz +Rz +iC +iC +iC +nH +ir +ir +Xm +Ap +Xm +Xm +Xm +Xm +Og +jO +jO +Xm +ce +ir +ju +zN +zN +zN +gC +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +Ck +ir UE UE "} @@ -8700,75 +8705,75 @@ UE UE UE UE -ZW -ZW -ej -Tf -MJ -kO -bR -bR -bR -bR -bR -bR -bR -Ju -Ef -XM -wg -uA -Tf -Bi -Tf -Nl -qs -Bk -Ks -JO -bR -bR -bR -bR -bR -bR -bR -Ng -lt -vR -NZ -wg -wg -yH -tW -tW -yH -yH -yH -UD -dl -jd -TM -PL -ZW -uB -ZW -sr -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -sr -wg +zN +zN +RZ +qW +pz +WJ +KY +KY +KY +KY +KY +KY +KY +GR +fT +MU +ir +Hy +qW +Nk +qW +eO +vX +Nb +CK +ts +KY +KY +KY +KY +KY +KY +KY +gX +dj +JS +nH +ir +ir +Xm +Ap +Ap +Xm +Xm +Xm +KR +vT +jO +ce +SH +zN +gC +zN +PB +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +PB +ir UE UE "} @@ -8776,244 +8781,244 @@ UE UE UE UE -wg -vm -ZW -ej -Tf -XM -cC -FM -cC -cC -cg -cC -Su -gK -PS -XW -XM -wg -uA -pB -AB -Tf -Nl -qs -Xn -Mc -lh -Mf -cC -cC -cg -cC -EG -oW -PS -XW -Tf -XM -TM -tW -yH -yH -wg -QM -cJ -Gy -uN -yH -TM -wg -vm -sr -wg -vm -BH -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -sr -wg +ir +ju +zN +RZ +qW +MU +ND +DV +ND +ND +cz +ND +dg +Mt +bA +yf +MU +ir +Hy +Jf +tF +qW +eO +vX +UX +QL +je +Bc +ND +ND +cz +ND +Or +KX +bA +yf +qW +MU +ce +Ap +Xm +Xm +ir +VN +SG +cq +Cj +Xm +ce +ir +ju +PB +ir +ju +cv +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +PB +ir UE UE "} (16,1,1) = {" UE -wg -TM -wg -vm -ZW -ej -Tf -XM -cC -GZ -cC -cC +ir +ce +ir +ju +zN +RZ +qW +MU +ND +ft +ND +ND QE -cC -Su -HT -iJ -rb -XM -wg -qs -RM -Um -Tf -cV -hu -Tf -TL -xt -jn -EG -cC +ND +dg +uR +Zx +GE +MU +ir +vX +IB +UL +qW +oH +ub +qW +XP +CU +oL +Or +ND QE -cC -cC -iW -iJ -rb -Bk -Tm -wg -wg -wg -wg -wg -yH -yH -dT -qb -jd -TM -PL -ZW -BH -wg -QR -wg -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -sr -wg +ND +ND +lw +Zx +GE +Nb +tK +ir +ir +ir +ir +ir +Xm +Xm +JM +qc +jO +ce +SH +zN +cv +ir +lb +ir +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +PB +ir UE UE "} (17,1,1) = {" -TM -wg -DY -wg -vm -ZW -ej -Tf -XM -cC -cC -cC +ce +ir +sA +ir +ju +zN +RZ +qW +MU +ND +ND +ND ih QE OM -EG -Su -SU -BF -Wq -NZ -qs -Tf -Um -RM -th -Tf -Tf -Wf -cC -cC -cC +Or +dg +TD +nT +sn +nH +vX +qW +UL +IB +Rh +qW +qW +PP +ND +ND +ND ih QE ih -cC -cC -iJ -XW -Tf -rI -wg -wg -UP -tx -wg -yH -yH -UO -yH -dY -wg -vm -sr -wg -TM -wg -wg -PL -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -uB -uB -BH -wg +ND +ND +Zx +yf +qW +CA +ir +ir +hp +ZR +ir +Xm +Xm +Gn +Xm +Ee +ir +ju +PB +ir +ce +ir +ir +SH +zN +zN +zN +zN +zN +zN +zN +zN +zN +zN +gC +gC +cv +ir UE UE "} (18,1,1) = {" -wg -DY -DY -wg -vm -ZW -ej -Tf -gM -cC +ir +sA +sA +ir +ju +zN +RZ +qW +dz +ND QE dP pG @@ -9021,19 +9026,19 @@ QE pG dP QE -XY -GH -fO -Wq -Rt -Tf -ar -HI -Tf -fO -Tf -Ld -cC +QN +dt +CE +sn +Rz +qW +Qo +sp +qW +CE +qW +fL +ND QE dP pG @@ -9041,193 +9046,193 @@ QE pG dP QE -iJ -XW -Tf -LT -wg -NC -oz -DY -wg -wg -yH -wg -wg -wg -PL -ZW -BH -TM -TM -wg -wg -vm -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -ZW -sr -wg -wg -wg -wg +Zx +yf +qW +wo +ir +Fz +zv +sA +ir +ir +Xm +ir +ir +ir +SH +zN +cv +ce +ce +ir +ir +ju +zN +zN +zN +zN +zN +zN +zN +zN +zN +PB +ir +ir +ir +ir UE UE "} (19,1,1) = {" -Eq -oz -kF -wg -vm -ZW -ej -Tf -XM -cC -zi +pu +zv +IT +ir +ju +zN +RZ +qW +MU +ND +QT QE -Op +ZN Dm IL rm -Tj -go -MC -pa -HX -HX -Sy -Hh -HX -HX -HX -HX -qH -XT -tc +NW +Wu +hZ +LN +qk +qk +hR +FX +qk +qk +qk +qk +dI +fz +xP VB Ph Xr LP QE -zi -iJ -XW -Tf -Tm -wg -bk -NC -wg -wg -yH -wg -wg -PL -GJ -ZW -BH -wg -TM -dY -wg -wg -Gb -ZW -ZW -ZW -ZW -ZW -ZW -uB -ZW -ZW -sr -wg -wg +QT +Zx +yf +qW +tK +ir +HO +Fz +ir +ir +Xm +ir +ir +SH +NA +zN +cv +ir +ce +Ee +ir +ir +oN +zN +zN +zN +zN +zN +zN +gC +zN +zN +PB +ir +ir UE UE UE UE "} (20,1,1) = {" -Eq -KW -wg -wg -vm -ZW -ej -Tf -XM -cC -cC +pu +tn +ir +ir +ju +zN +RZ +qW +MU +ND +ND QE dP Qq dP QE -FK -jc -St -Tf -MJ -kO -xA -SK -VL -Tf -Tf -Tf -jo -cC -YO +mq +TN +An +qW +pz +WJ +Wp +GV +yW +qW +qW +qW +Vm +ND +hO QE dP Qq dP QE -EG -iJ -rb -Tf -or -TM -wg -wg -wg -yH -wg -wg -PL -ZW -ZW -BH -wg -wg -tW -dY -ha -wg -gJ -Ws -uB -uB -uB -uB -BH -wg -vm -ZW -sr -wg +Or +Zx +GE +qW +Fe +ce +ir +ir +ir +Xm +ir +ir +SH +zN +zN +cv +ir +ir +Ap +Ee +Cc +ir +aD +hk +gC +gC +gC +gC +cv +ir +ju +zN +PB +ir UE UE UE @@ -9235,77 +9240,77 @@ UE UE "} (21,1,1) = {" -wg -TM -wg -wg -vm -ZW -ej -Tf -XM -cC -cC -la +ir +ce +ir +ir +ju +zN +RZ +qW +MU +ND +ND +rO QE EM QE -Sq -cC -iJ -Ko -MJ -pE -qs -Uu -Xu -Tf -iq -Tf -Tf -LW -cC -Lz -JH +kL +ND +Zx +kx +pz +CB +vX +Cn +Mg +qW +ln +qW +qW +sN +ND +To +IM QE EM QE -nD -cC -iJ -XW -Tf -XM -TM -dE -qz -wg -wg -wg -PL -ZW -ZW -BH -wg -wg -yH -qz -VS -dE -wg -wg -TM -TM -wg -wg -wg -wg -TM -gJ -Jo -sr -wg -wg +qL +ND +Zx +yf +qW +MU +ce +sD +CQ +ir +ir +ir +SH +zN +zN +cv +ir +ir +Xm +CQ +tD +sD +ir +ir +ce +ce +ir +ir +ir +ir +ce +aD +fl +PB +ir +ir UE UE UE @@ -9315,75 +9320,75 @@ UE UE UE UE -wg -vm -ZW -ej -Tf -XM -cC -cC -cC +ir +ju +zN +RZ +qW +MU +ND +ND +ND QE MQ Zr -np -gb -iJ -bS -XM -wg -qs -Bk -RT -Uu -DG -Bg -Tf -XM -cC -PO -cC +AM +WH +Zx +nf +MU +ir +vX +Nb +vc +Cn +YD +uE +qW +MU +ND +Ey +ND QE MQ Zr -np -uJ -iJ -XW -Tf -XM -wg -wg -TM -wg -xi -Em -ZW -ZW -BH -wg -wg -yH -sP -dE -It -wg -wg -wg -yH -TM -TM -wg -LA -Rs -TM -TM -gJ -ZW -ue -wg -wg +AM +Tu +Zx +yf +qW +MU +ir +ir +ce +ir +wt +Qp +zN +zN +cv +ir +ir +Xm +BL +sD +Ma +ir +ir +ir +Xm +ce +ce +ir +eA +gP +ce +ce +aD +zN +Ck +ir +ir UE UE UE @@ -9391,1516 +9396,1516 @@ UE (23,1,1) = {" UE UE -TM -wg -vm -ZW -ej -Tf -XM -cC -EG -nz +ce +ir +ju +zN +RZ +qW +MU +ND +Or +Vp QE Io QE -Je -on -iJ -rb -XM -wg -mK -Tf -hP -Tf -zI -qs -Tf -XM -cC -cC -XF +Dl +bD +Zx +GE +MU +ir +xf +qW +Ow +qW +PX +vX +qW +MU +ND +ND +KD QE Io QE -Je -on -iJ -XW -Tf -XM -wg -wg -qz -TM -wg -II -Oi -BH -wg -wg -yH -yH -dY -DU -dl -wg -xj -wg -yH -vf -yH -wg -wg -CO -wg -wg -wg -Oi -ZW -ue -wg +Dl +bD +Zx +yf +qW +MU +ir +ir +CQ +ce +ir +Bo +Ua +cv +ir +ir +Xm +Xm +Ee +YV +vT +ir +Ut +ir +Xm +sg +Xm +ir +ir +YW +ir +ir +ir +Ua +zN +Ck +ir UE UE UE "} (24,1,1) = {" UE -TM -TM -wg -vm -ZW -Uo -Tf -XM -cC -cC -cC +ce +ce +ir +ju +zN +nw +qW +MU +ND +ND +ND VB Gc VB -cC -cC -iJ -XW -Aj -wg -mK -Tf -vM -RM -Nl -qs -Tf -XM -cC -cC -cC +ND +ND +Zx +yf +mI +ir +xf +qW +ki +IB +eO +vX +qW +MU +ND +ND +ND VB Gc VB -cC -cC -Dz -XW -Tf -XM -wg -II -wg -TM -dE -wg -wg -wg -TM -tW -jd -jd -dY -UD -dl -wg -kQ -wg -wg -yH -UD -UD -wg -LA -wg -dY -wg -wg -vm -sr -wg -wg +ND +ND +eQ +yf +qW +MU +ir +Bo +ir +ce +sD +ir +ir +ir +ce +Ap +jO +jO +Ee +KR +vT +ir +Dy +ir +ir +Xm +KR +KR +ir +eA +ir +Ee +ir +ir +ju +PB +ir +ir UE UE "} (25,1,1) = {" -wg -TM -wg -PL -ZW -BH -hu -Tf -XM -cC -px -cC +ir +ce +ir +SH +zN +cv +ub +qW +MU +ND +Lh +ND VB VB VB -EG -cs -iJ -XW -XM -wg -qs -Tf -vM -RM -zI -mK -Tf -XM -cC -nQ -cC +Or +lU +Zx +yf +MU +ir +vX +qW +ki +IB +PX +xf +qW +MU +ND +UT +ND VB VB VB -cC -ZC -Dz -rb -Tf -XM -wg -wg -wg -TM -qz -dE -zw -TM -gs -dY -uh -TM -wg -qh -dY -wg -UP -vq -wg -yH -yH -UD -UD -yH -dY -Yu -yH -TM -Oi -ZW -ue -wg +ND +Nn +eQ +GE +qW +MU +ir +ir +ir +ce +CQ +sD +by +ce +Wg +Ee +Es +ce +ir +zt +Ee +ir +hp +eC +ir +Xm +Xm +KR +KR +Xm +Ee +Ek +Xm +ce +Ua +zN +Ck +ir UE UE "} (26,1,1) = {" -wg -PL -GJ -ZW -BH -wg -cB -hV -lQ -cC -MG -eJ -MG -MG -MG -eJ -MG -iJ -rb -XM -wg -mK -Kq -Xu -hV -Qe -mK -Tf -XM -cC -MG -eJ -MG -MG -MG -EU -QK -iJ -rb -Sc -bB -Ze -wg -II -wg -II -yH -wg -dY -dY -wg -wg -wg -wg -wg -wg -wg -wg -wg -Tf -Tf -Tf -wg -wg -DU -NU -dE -qz -qz -wg -vm -sr -wg +ir +SH +NA +zN +cv +ir +ns +JY +HY +ND +Nw +un +Nw +Nw +Nw +un +Nw +Zx +GE +MU +ir +xf +SB +Mg +JY +mA +xf +qW +MU +ND +Nw +un +Nw +Nw +Nw +Zd +nr +Zx +GE +gR +sf +Ps +ir +Bo +ir +Bo +Xm +ir +Ee +Ee +ir +ir +ir +ir +ir +ir +ir +ir +ir +qW +qW +qW +ir +ir +YV +rS +sD +CQ +CQ +ir +ju +PB +ir UE UE "} (27,1,1) = {" -wg -vm -PZ -bR -bR -Tw -Ie -Ak -gI -jV -jV -jV -jV -jV -jV -jV -jV -si -Eu -pE -Tw -ry -Jj -wT -Wy -Yv -At -kO -pE -jV -jV -jV -jV -jV -jV -Nc -zG -MI -sQ -GL -gI -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -in -Tw -Tw -Tw -Tw -Tw -Tw -qh -UD -wg -vm -sr -wg +ir +ju +xL +KY +KY +fC +fc +bd +az +mF +mF +mF +mF +mF +mF +mF +mF +ip +Nj +CB +fC +Yi +Po +mE +XR +ZS +Qg +WJ +CB +mF +mF +mF +mF +mF +mF +tV +mj +JV +jB +ve +az +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +Lq +fC +fC +fC +fC +fC +fC +zt +KR +ir +ju +PB +ir UE UE "} (28,1,1) = {" -GJ -PZ -gj -Tf -Tf -Mq -Hz -Gl -Gl -na -Sh -Sh -Sh -Mq -Mq -Sh -Mq -Mq -Mq -Mq -Mq -XU -Gl -bG -Gl -na -Sh -Sh -Mq -Mq -Mq -Mq -Mq -Mq -Hi -uY -TM -jx -JU -eo -eo -na -Mq -Mq -Mq -Mq -Mq -Mq -wg -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -vp -Gl -rH -Mq -Mq -Mq -Mq -Mq -wg -UD -wg -vm -sr -wg -wg +NA +xL +oX +qW +qW +pU +gi +oa +oa +vs +Al +Al +Al +pU +pU +Al +pU +pU +pU +pU +pU +ru +oa +Ww +oa +vs +Al +Al +pU +pU +pU +pU +pU +pU +Oa +UB +ce +pZ +Kc +uO +uO +vs +pU +pU +pU +pU +pU +pU +ir +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +YC +oa +gT +pU +pU +pU +pU +pU +ir +KR +ir +ju +PB +ir +ir UE "} (29,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Mq -Sh -uY -Mq -Mq -Mq -Sh -Mq -Mq -Mq -Mq -Sh -Sh -Mq -YM -Mq -Sh -Sh -Sh -Sh -Mq -Mq -Mq -Mq -Sh -Nc -TM -wg -wg -wg -JC -je -En -Mq -Mq -Sh -Mq -Mq -wg -kQ -NB -Mq -Mq -Mq -Mq -Mq -Mq -Mq -NB -Mq -Mq -Mq -Mq -Mq -Mq -Mq -NB -Mq -wg -dY -qh -Oi -ZW -ue -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +pU +Al +UB +pU +pU +pU +Al +pU +pU +pU +pU +Al +Al +pU +Is +pU +Al +Al +Al +Al +pU +pU +pU +pU +Al +tV +ce +ir +ir +ir +Ac +Pv +ow +pU +pU +Al +pU +pU +ir +Dy +Jz +pU +pU +pU +pU +pU +pU +pU +Jz +pU +pU +pU +pU +pU +pU +pU +Jz +pU +ir +Ee +zt +Ua +zN +Ck +ir UE "} (30,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Sh -Sh -qh -qh -uY -Sh -Sh -Mq -Sh -Sh -Sh -Sh -Sh -Mq -YM -Mq -Mq -Sh -Sh -Sh -Sh -Mq -Mq -Sh -Nc -wg -wg -Av -xj -sU -wg -ek -TC -Vb -LU -Mq -Sh -Mq -wg -wg -NB -Mq -Gz -Gz -Gz -Mq -Mq -Mq -NB -Mq -Mq -Mq -Mq -Mq -Mq -Mq -NB -Mq -TM -dY -qh -wg -vm -sr -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +Al +Al +zt +zt +UB +Al +Al +pU +Al +Al +Al +Al +Al +pU +Is +pU +pU +Al +Al +Al +Al +pU +pU +Al +tV +ir +ir +kw +Ut +od +ir +vE +Bd +yU +fx +pU +Al +pU +ir +ir +Jz +pU +ZF +ZF +ZF +pU +pU +pU +Jz +pU +pU +pU +pU +pU +pU +pU +Jz +pU +ce +Ee +zt +ir +ju +PB +ir UE "} (31,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Mq -Sh -uY -Vo -TM -Sh -Sh -Mq -Mq -Sh -Sh -Sh -Sh -Mq -YM -Mq -Mq -Mq -Mq -Sh -Sh -Mq -Mq -Mq -SA -wg -wg -Eq -KW -UP -yd -UZ -zG -Vb -Mq -Mq -Sh -Sh -Mq -Mq -Mq -Gz -Gz -ZJ -Gz -Sh -Mq -Mq -Mq -Mq -Sh -Sh -Sh -Mq -Mq -Sh -Sh -Sh -TM -jd -TM -wg -vm -sr -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +pU +Al +UB +ll +ce +Al +Al +pU +pU +Al +Al +Al +Al +pU +Is +pU +pU +pU +pU +Al +Al +pU +pU +pU +if +ir +ir +pu +tn +hp +cy +Pn +mj +yU +pU +pU +Al +Al +pU +pU +pU +ZF +ZF +lM +ZF +Al +pU +pU +pU +pU +Al +Al +Al +pU +pU +Al +Al +Al +ce +jO +ce +ir +ju +PB +ir UE "} (32,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Mq -Sh -Sh -Bz -uY -Sh -Mq -Mq -Mq -Sh -Sh -Sh -Sh -Mq -sC -Mq -Mq -Mq -Mq -Sh -Sh -Mq -Mq -Mq -jx -wg -KU -Eq -Tx -UP -mB -wg -TC -Vb -Mq -Sh -Sh -Sh -Gz -Mq -NB -Gz -Sh -Sh -Gz -Sh -Mq -Mq -NB -Mq -Mq -Sh -Sh -Gz -Sh -Sh -pl -Mq -wg -yH -TM -PL -ZW -BH -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +pU +Al +Al +Zl +UB +Al +pU +pU +pU +Al +Al +Al +Al +pU +ZY +pU +pU +pU +pU +Al +Al +pU +pU +pU +pZ +ir +UI +pu +IP +hp +Lb +ir +Bd +yU +pU +Al +Al +Al +ZF +pU +Jz +ZF +Al +Al +ZF +Al +pU +pU +Jz +pU +pU +Al +Al +ZF +Al +Al +dW +pU +ir +Xm +ce +SH +zN +cv +ir UE "} (33,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Mq -Mq -Sh -uY -Sh -Mq -Mq -Mq -Mq -Sh -Sh -Mq -Mq -Mq -YM -Mq -Mq -Mq -Mq -Mq -Sh -Mq -Mq -Sh -Xi -TM -wg -Eq -DY -bk -gg -wg -je -Gz -Mq -Sh -Sh -Sh -Gz -Gz -Mq -Gz -Sh -Sh -Sh -Sh -Mq -Mq -Mq -Mq -Mq -Sh -Sh -Gz -Sh -Sh -Mq -Mq -wg -TM -PL -ZW -sr -wg -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +pU +pU +Al +UB +Al +pU +pU +pU +pU +Al +Al +pU +pU +pU +Is +pU +pU +pU +pU +pU +Al +pU +pU +Al +Kk +ce +ir +pu +sA +HO +Zp +ir +Pv +ZF +pU +Al +Al +Al +ZF +ZF +pU +ZF +Al +Al +Al +Al +pU +pU +pU +pU +pU +Al +Al +ZF +Al +Al +pU +pU +ir +ce +SH +zN +PB +ir +ir UE "} (34,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -YM -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Sh -Mq -SA -TM -wg -pL -wg -wg -qh -zG -Gz -Sh -Sh -Sh -Sh -Sh -Gz -Mq -Mq -Sh -Sh -Sh -Mq -Mq -wg -wg -wg -Mq -Mq -Sh -Gz -Sh -Mq -Mq -Mq -wg -TM -vm -ZW -sr -wg -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Is +pU +pU +pU +pU +pU +pU +pU +pU +Al +pU +if +ce +ir +pQ +ir +ir +zt +mj +ZF +Al +Al +Al +Al +Al +ZF +pU +pU +Al +Al +Al +pU +pU +ir +ir +ir +pU +pU +Al +ZF +Al +pU +pU +pU +ir +ce +ju +zN +PB +ir +ir UE "} (35,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -YM -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -JC -uY -wg -TM -TM -jx -YZ -Iy -Gz -Sh -Gz -Sh -Sh -Sh -Sh -Iy -Mq -Sh -vo -Sh -Mq -Mq -wg -NC -wg -wg -Mq -Mq -Gz -Mq -Mq -NB -Mq -wg -PL -ZW -uB -BH -wg +zN +KY +qW +qW +qW +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Is +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Ac +UB +ir +ce +ce +pZ +yV +jj +ZF +Al +ZF +Al +Al +Al +Al +jj +pU +Al +gn +Al +pU +pU +ir +Fz +ir +ir +pU +pU +ZF +pU +pU +Jz +pU +ir +SH +zN +gC +cv +ir UE UE "} (36,1,1) = {" -ZW -bR -Tf -Tf -Tf -Mq -zG -zG -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -YM -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -TM -uY -uY -uY -Xi -Sh -Gz -Sh -Sh -Gz -Sh -Sh -Sh -Sh -Gz -Mq -Sh -Sh -Sh -Mq -wg -wg -yY -wg -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -wg -vm -sr -wg -wg -xb +zN +KY +qW +qW +qW +pU +mj +mj +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Is +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +ce +UB +UB +UB +Kk +Al +ZF +Al +Al +ZF +Al +Al +Al +Al +ZF +pU +Al +Al +Al +pU +ir +ir +Ed +ir +pU +pU +pU +pU +pU +pU +pU +pU +ir +ju +PB +ir +ir +dF UE UE "} (37,1,1) = {" -ZW -bR -Tf -Tf -Tf -zG -wg -wg -zG -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -YM -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -zG -zG -Mq -Sh -Sh -pl -Sh -Mq -Gz -Sh -Sh -Sh -Mq -Iy -Mq -Mq -Mq -Mq -Mq -Mq -wg -wg -wg -Mq -Mq -Mq -sc -Mq -Mq -NB -Mq -wg -vm -BH -TM -TM -TM -wg +zN +KY +qW +qW +qW +mj +ir +ir +mj +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Is +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +mj +mj +pU +Al +Al +dW +Al +pU +ZF +Al +Al +Al +pU +jj +pU +pU +pU +pU +pU +pU +ir +ir +ir +pU +pU +pU +BA +pU +pU +Jz +pU +ir +ju +cv +ce +ce +ce +ir UE "} (38,1,1) = {" -ZW -bR -Tf -Tf -Tf -wg -OT -DY -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Sh -Sh -Mq -Mq -Mq -Mq -Mq -Mq -YM -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Cz -Sh -Sh -pl -Mq -Mq -Gz -Gz -Sh -Sh -Sh -Iy -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -NB -Mq -wg -yt -wg -EJ -wg -qh -wg +zN +KY +qW +qW +qW +ir +sz +sA +pU +pU +pU +pU +pU +pU +pU +Al +Al +pU +pU +pU +pU +pU +pU +Is +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +dr +Al +Al +dW +pU +pU +ZF +ZF +Al +Al +Al +jj +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Jz +pU +ir +me +ir +Zg +ir +zt +ir UE "} (39,1,1) = {" -Oi -LG -NE -Tf -Tf -wg -wg -Kb -Kb -Ij -Mq -Mq -Mq -Mq -Sh -Sh -Gz -Sh -Mq -Mq -Mq -Oz -Kb -Xd -Kb -Ij -Mq -Mq -Mq -Mq -Mq -Mq -Sh -Mq -SA -cU -Gm -hT -MR -zG -Kb -Ij -Mq -Mq -Gz -Sh -vo -Sh -Sh -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -Mq -JB -Kb -Xo -Mq -Mq -Mq -Mq -Mq -wg -yt -wg -bk -EJ -Pb -qh +Ua +xF +tT +qW +qW +ir +ir +HU +HU +Ej +pU +pU +pU +pU +Al +Al +ZF +Al +pU +pU +pU +pH +HU +pi +HU +Ej +pU +pU +pU +pU +pU +pU +Al +pU +if +CC +DN +nk +LF +mj +HU +Ej +pU +pU +ZF +Al +gn +Al +Al +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +KF +HU +Zi +pU +pU +pU +pU +pU +ir +me +ir +HO +Zg +Pk +zt UE "} (40,1,1) = {" -wg -QR -qO -bR -bR -wg -hu -AO -SQ -qf -qf -qf -qf -wN -wN -hs -hs -SY -Ho -Rt -eq -Bg -BQ -wG -VM -Gr -sy -Rt -NZ -qf -qf -wN -wN -Nc -JC -rZ -Sw -wb -ST -IG -zG -eq -aS -aS -vi -aS -aS -aS -eq -eq -eq -eq -eq -eq -eq -eq -eq -eq -eq -eq -jZ -eq -eq -eq -eq -eq -eq -wg -yt -wg -Tx -NC -kF -qh +ir +lb +Lf +KY +KY +ir +ub +MH +MW +gp +gp +gp +gp +Wk +Wk +MF +MF +wR +Qy +Rz +VW +uE +oV +du +iM +UQ +Vv +Rz +nH +gp +gp +Wk +Wk +tV +Ac +aQ +qX +RI +DZ +zF +mj +VW +mc +mc +cu +mc +mc +mc +VW +VW +VW +VW +VW +VW +VW +VW +VW +VW +VW +VW +en +VW +VW +VW +VW +VW +VW +ir +me +ir +IP +Fz +IT +zt UE "} (41,1,1) = {" -wg -wg -wg -wg -wg -wg -cB -Tf -XM -cC -kc -kV -kc -dm -vQ -KS -vQ -Bp -IQ -XM -qh -uA -Cv -SK -pC -Nl -qs -Tf -XM -cC -RX -eJ -mr -RL -TM -TM -IF -BR -Uq -BR -TM -uY -tW -yH -yH -Tk -tW -tW -yH -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -Tf -Tf -Tf -wg -wg -wg -wg -yH -GJ -sr -EJ -NC -gQ -wg -qh -qh +ir +ir +ir +ir +ir +ir +ns +qW +MU +ND +Tt +Ym +Tt +Fn +Ff +Ba +Ff +Rx +qd +MU +zt +Hy +pb +GV +FS +eO +vX +qW +MU +ND +xd +un +bL +xU +ce +ce +Wt +Wx +dO +Wx +ce +UB +Ap +Xm +Xm +js +Ap +Ap +Xm +ir +ir +ir +ir +ir +ir +ir +ir +ir +ir +qW +qW +qW +ir +ir +ir +ir +Xm +NA +PB +Zg +Fz +gY +ir +zt +zt "} (42,1,1) = {" -wg -wg -wg -xb -TM -wg -Bg -Tf -XM -cC -jn -cC -kC -kC -kC -GX -vG -Bp -zT -Tm -TM -uA -Bk -SK -Bk -Nl -qs -Tf -XM -cC -jn -Dj -gx -TM -wg -De -bk -wg -IG -ah -gg -wg -IQ -Wz -BR -BR -yH -UD -wg +ir +ir +ir +dF +ce +ir +uE +qW +MU +ND +oL +ND +WT +WT +WT +Fy +cX +Rx +hh +tK +ce +Hy +Nb +GV +Nb +eO +vX +qW +MU +ND +oL +Jc +GM +ce +ir +nB +HO +ir +zF +SM +Zp +ir +qd +dd +Wx +Wx +Xm +KR +ir bN ZT ZT @@ -10912,72 +10917,72 @@ ZT ZT ZT bN -Tf -wg -wg -PL -ue -wg -yH -Jo -BH -wg -kF -wg -wg -yH -qh +qW +ir +ir +SH +Ck +ir +Xm +fl +cv +ir +IT +ir +ir +Xm +zt "} (43,1,1) = {" UE -wg -wg -TM -tW -TM -DD -Tf -XM -cC -EG -cC -kC -Dg -kC -ud -gt -Bp -zT -Tm -TM -uA -Bk -SK -Bk -zI -qs -Tf -XM -cC -cj -Zz -LH -mP -Rj -bk -Eq -Eq -DY -JI -BR -oY -af -BR -wg -wg -qh -qh -BR +ir +ir +ce +Ap +ce +Rf +qW +MU +ND +Or +ND +WT +jm +WT +sk +YX +Rx +hh +tK +ce +Hy +Nb +GV +Nb +PX +vX +qW +MU +ND +FL +bZ +Iz +CN +sH +HO +pu +pu +sA +sh +Wx +TK +xw +Wx +ir +ir +zt +zt +Wx ya sd WR @@ -10989,72 +10994,72 @@ Nh cW XA ya -wg -wg -PL -ZW -sr -wg -wg -zn -TM -TM -wg -wg -tW -yH -qh +ir +ir +SH +zN +PB +ir +ir +PQ +ce +ce +ir +ir +Ap +Xm +zt "} (44,1,1) = {" UE UE UE -wg -tW -tW -DD -Tf -XM -cC -cC -cC -kC -JA -kC -Su -cC -iJ -IQ -Aj -qh -qs -Bk -SK -Bk -zI -qs -Tf -XM -cC -Sg -WM -wg -Gs -wg -wg -xj -XB -EJ -wg -BR -Cu -Pi -wg -yH -UD -Yu -yH -BR +ir +Ap +Ap +Rf +qW +MU +ND +ND +ND +WT +vr +WT +dg +ND +Zx +qd +mI +zt +vX +Nb +GV +Nb +PX +vX +qW +MU +ND +wI +lp +ir +sB +ir +ir +Ut +yO +Zg +ir +Wx +Vt +jT +ir +Xm +KR +Ek +Xm +Wx bN TF jK @@ -11066,72 +11071,72 @@ nF GS aL bN -wg -wg -uk -Jo -Jo -Lj -TM -zn -wg -TM -TM -cd -yH -JN -qh +ir +ir +Gk +fl +fl +Fa +ce +PQ +ir +ce +ce +hH +Xm +yx +zt "} (45,1,1) = {" UE UE UE -wg -tW -tW -DD -Bk -XM -cC -cC -cC -io -IR -Ts -Su -cC -iJ -IQ -Aj -wg -qs -Tf -Xu -Tf -cV -hu -Tf -XM -cC -As -bQ -VD -SA -JC -wg -EJ -xj -DY -gg -SA -Pi -zG -BR -hw -yH -yH -hw -wg +ir +Ap +Ap +Rf +Nb +MU +ND +ND +ND +eG +zQ +NF +dg +ND +Zx +qd +mI +ir +vX +qW +Mg +qW +oH +ub +qW +MU +ND +AS +yu +Kx +if +Ac +ir +Zg +Ut +sA +Zp +if +jT +mj +Wx +aO +Xm +Xm +aO +ir bN nF nF @@ -11143,72 +11148,72 @@ nF Ha Pw bN -wg -wg -qh -Oi -ZW -ZW -wQ -CZ -wg -wg -tW -tW -tW -tW -wg +ir +ir +zt +Ua +zN +zN +nb +dA +ir +ir +Ap +Ap +Ap +Ap +ir "} (46,1,1) = {" UE UE UE -wg -yH -tW -DD -Bk -XM -cC -cC -zG -Kw -iE -io -vB -Su -OJ -Tf -Wq -NZ -qs -Tf -Xu -fO -th -Tf -Tf -SZ -EG -Sg -cC -Hx -Pi -bE -UP -Av -tx -UP -wg -BR -wg -Cu -qh -BR -hw -Wz -hw -wg +ir +Xm +Ap +Rf +Nb +MU +ND +ND +mj +BV +PA +eG +wO +dg +Mv +qW +sn +nH +vX +qW +Mg +CE +Rh +qW +qW +CD +Or +wI +ND +as +jT +Ly +hp +kw +ZR +hp +ir +Wx +ir +Vt +zt +Wx +aO +dd +aO +ir bN lI JX @@ -11220,72 +11225,72 @@ YA HG Ox bN -wg -UD -qh -wg -Oi -ZW -ZW -CZ -TM -Rs -tW -Wz -tW -TM -TM +ir +KR +zt +ir +Ua +zN +zN +dA +ce +gP +Ap +dd +Ap +ce +ce "} (47,1,1) = {" UE UE UE -wg -yH -yH -DD -Bk -Tm -cC -zG -bE -zG -Qr -uR -io -Su -Hr -hB -Tf -Wq -Rt -Qx -Xu -VL -Tf -Tf -Tf -Ld -cC -cC -io -cC -af -jx -wg -wg -EI -oY -BR -Pi -wg -Cu -UD -qh -hw -hw -wg -wg +ir +Xm +Xm +Rf +Nb +tK +ND +mj +Ly +mj +td +Py +eG +dg +oU +vW +qW +sn +Rz +hI +Mg +yW +qW +qW +qW +fL +ND +ND +eG +ND +xw +pZ +ir +ir +BX +TK +Wx +jT +ir +Vt +KR +zt +aO +aO +ir +ir bN bN bN @@ -11297,72 +11302,72 @@ BD bN bN BD -wg -qh -yH -wg -qh -qh -GY -ZW -Lj -wg -yH -yH -tW -wg -TM +ir +zt +Xm +ir +zt +zt +Ya +zN +Fa +ir +Xm +Xm +Ap +ir +ce "} (48,1,1) = {" UE UE UE -wg -yH -yH -DD -Bk -XM -zG -wg -EJ -wg -IQ -IQ -Hv -ng -XT -Qw -HX -HX -HX -HX -qC -HX -HX -HX -HX -qH -ef -hi -kC -LI -MK -BR -qh -tO -Pi -BR -BR -Cu -IU -yH -nK -qh -wg -yH -wm -wg +ir +Xm +Xm +Rf +Nb +MU +mj +ir +Zg +ir +qd +qd +fp +Zw +fz +vd +qk +qk +qk +qk +NO +qk +qk +qk +qk +dI +tj +qM +WT +Fl +vg +Wx +zt +cp +jT +Wx +Wx +Vt +Qb +Xm +VJ +zt +ir +Xm +qQ +ir bN OI ox @@ -11371,75 +11376,75 @@ ox ox qx bN -wg -wg -yH -yH -yH -Wz -qh -UD -wg -Oi -uB -ZW -ue -wg -yH -TM -fG -TM +ir +ir +Xm +Xm +Xm +dd +zt +KR +ir +Ua +gC +zN +Ck +ir +Xm +ce +ZE +ce "} (49,1,1) = {" UE UE UE -wg -wg -yH -DD -Bk -XM -bE -DY -OT -bE -cC -cK -uR -io -Ll -St -Tf -rj -zJ -tz -GT -Tf -Tf -tz -iO -jo -cC -io -io -mX -wg -zk -Mz -uY -af -bv -Cu -zG -yH -hw -Wz -UD -TM -TM -TM -ZU +ir +ir +Xm +Rf +Nb +MU +Ly +sA +sz +Ly +ND +gf +Py +eG +Ga +An +qW +Hm +Ix +zH +HD +qW +qW +zH +hM +Vm +ND +eG +eG +Xw +ir +Fu +pS +UB +xw +Kh +Vt +mj +Xm +aO +dd +KR +ce +ce +ce +vZ bN CR Pz @@ -11448,75 +11453,75 @@ Ob Lv Ea bN -wg -Wz -yH -yH -DA -qh -qh -Vi -Ry -wg -wg -vm -sr -wg -TM -tB -sr -TM +ir +dd +Xm +Xm +uy +zt +zt +os +TU +ir +ir +ju +PB +ir +ce +Tb +PB +ce "} (50,1,1) = {" UE UE UE UE -MT -MT -DD -Tf -XM -EG -px -wg -zG -io -zG -cC -cs -iJ -Tf -MJ -pE -MT -ma -Xu -XM -Bg -Tf -tz -md -cC -cC -cC -lX -io -iH -gt -xt -su -XW -jx -XM -qn -yH -hw -UD -Jn -wg -aW -ik +vC +vC +Rf +qW +MU +Or +Lh +ir +mj +eG +mj +ND +lU +Zx +qW +pz +CB +vC +kv +Mg +MU +uE +qW +zH +Bw +ND +ND +ND +Eh +eG +il +YX +CU +Rx +yf +pZ +MU +OL +Xm +aO +KR +kG +ir +nS +lZ WU bM wc @@ -11525,24 +11530,24 @@ mw vV lI bN -wg -yH -yH -lW -UD -Ry -yH -yH -Vi -MT -CG -uB -ZW -GJ -GJ -ZW -sr -wg +ir +Xm +Xm +MS +KR +TU +Xm +Xm +os +vC +um +gC +zN +NA +NA +zN +PB +ir "} (51,1,1) = {" UE @@ -11550,50 +11555,50 @@ UE UE UE UE -MT -DD -Tf -XM -cC -RH -cC -cC -cC -EG -cC -oC -ct -JC -zG -wg -wg -ma -Xu -XM -qO -ze -Tf -TL -Sg -px -cC -cC -io -YG -cC -KM -hq -XW -Tf -Tf -DI -aW -aW -pf -ZU -aW -ph -ok +vC +Rf +qW +MU +ND +IH +ND +ND +ND +Or +ND +TT +Pm +Ac +mj +ir +ir +kv +Mg +MU +Lf +Qa +qW +XP +wI +Lh +ND +ND +eG +RQ +ND +Gd +tp +yf +qW +qW +dx +nS +nS +ac +vZ +nS +mu +AK bN bN bN @@ -11602,24 +11607,24 @@ bN bN bN bN -wg -wg -wg -yH -wg -wg -yH -uR -io -uR -MT -MT -vm -ZW -ZW -ZW -Fg -TM +ir +ir +ir +Xm +ir +ir +Xm +Py +eG +Py +vC +vC +ju +zN +zN +zN +ty +ce "} (52,1,1) = {" UE @@ -11627,76 +11632,76 @@ UE UE UE UE -qh -DD -Tf -Wq -Rt -wl -wl -bR -bR -bR -bR -bR -zG -SA -Bk -TM -wg -ma -Hj -XM -TM -SN -Tf -XM -cC -RH -EG -cC -sW -cC -xt -tC -ct -XW -Tf -Tf -DI -aW -Ys -aW -aW -aW -SL -Ys -wg -wg -yH -wg -yH -Wz -yH -yH -wg -wg -wg -yH -BR -yH -uR -uR -Aq -Kw -uR -wg -vm -yD -ZW -Fg -TM -wg +zt +Rf +qW +sn +Rz +YL +YL +KY +KY +KY +KY +KY +mj +if +Nb +ce +ir +kv +lD +MU +ce +xf +qW +MU +ND +IH +Or +ND +OK +ND +CU +Oh +Pm +yf +qW +qW +dx +nS +nj +nS +nS +nS +vJ +nj +ir +ir +Xm +ir +Xm +dd +Xm +Xm +ir +ir +ir +Xm +Wx +Xm +Py +Py +sS +BV +Py +ir +ju +Gp +zN +ty +ce +ir "} (53,1,1) = {" UE @@ -11705,74 +11710,74 @@ UE UE UE UE -lj -is -kO -kO -JO -kO -kO -kO -kO -kO -SA -lf -TM -kr -wg -EJ -Am -Xu -XM -TM -SN -RM -eP -Eb -bR -bR -bR -bR -bR -wl -bR -KJ -JG -MJ -pE -eq -wg -BR -wg -BR -BR -Sx -aW -wg +vl +Jw +WJ +WJ +ts +WJ +WJ +WJ +WJ +WJ +if +IC +ce +oD +ir +Zg +Uw +Mg +MU +ce +xf +IB +Ht +iC +KY +KY +KY +KY +KY +YL +KY +Sz +Us +pz +CB +VW +ir +Wx +ir +Wx +Wx +kH +nS +ir Wo Wo Wo Bx Wo -wg +ir Wo Bx Wo Bx Wo -BN -Wz -Kw -bo -yp -yp -io -xi -ZW -Yy -CZ -TM -wg +mJ +dd +BV +mz +vA +vA +eG +wt +zN +Pe +dA +ce +ir UE "} (54,1,1) = {" @@ -11782,73 +11787,73 @@ UE UE UE UE -MT -qh -wg -wg -wg -wg -wg -MT -TM -wg -qh -qh -kr -DY -kF -MT -dQ -Xu -XM -TM -qh -qT -JO -rV -hl -kO -kO -kO -kO -kO -kO -kO -kO -pE -MT -MT -AF -UD -oj -BR -wg -Sx -Ys -Wz +vC +zt +ir +ir +ir +ir +ir +vC +ce +ir +zt +zt +oD +sA +IT +vC +Hc +Mg +MU +ce +zt +Cq +ts +FG +bm +WJ +WJ +WJ +WJ +WJ +WJ +WJ +WJ +CB +vC +vC +gv +KR +PY +Wx +ir +kH +nj +dd Wo to us se Bx -wg +ir Wo to dZ se Wo -hw -sM -Kw -yp -rA -JQ -Kw -wg -Oi -Jo -CZ -wg +aO +Pa +BV +vA +jr +HH +BV +ir +Ua +fl +dA +ir UE UE "} @@ -11866,66 +11871,66 @@ Lo Lo Lo BM -Cp -aX -tW -yH -wg -xj -oz -xj -wg -wA -Xu -XM -TM -UD -tW -wg -TM -qh -qh -wg -wg -wg -wg -wg -wg -MT -MT -wg -hw -AF -tW -UD -Wz -wg -HF -Ys -yH +CL +xO +Ap +Xm +ir +Ut +zv +Ut +ir +Kl +Mg +MU +ce +KR +Ap +ir +ce +zt +zt +ir +ir +ir +ir +ir +ir +vC +vC +ir +aO +gv +Ap +KR +dd +ir +KC +nj +Xm Wo oA GA wy Wo -wg +ir Wo oA qu xu Wo -Dk -hC -RB -DY -Av -vj -Kw -wg -wg -vm -sr -wg +Nq +KN +qq +sA +kw +wY +BV +ir +ir +ju +PB +ir UE UE "} @@ -11943,66 +11948,66 @@ Az hb kh Lo -Yv -Cp -aX -TM -TM -xj -xj -yY -wg -dQ -Xu -XM -TM -tW -tW -yH -yH -TM -qh -wm -wg -yH -yH -yH -yH -Vi -wg -wg -UD -IZ -tW -qh -yH -BR -Sx -Ys -wg +ZS +CL +xO +ce +ce +Ut +Ut +Ed +ir +Hc +Mg +MU +ce +Ap +Ap +Xm +Xm +ce +zt +qQ +ir +Xm +Xm +Xm +Xm +os +ir +ir +KR +zl +Ap +zt +Xm +Wx +kH +nj +ir Bx BK wy av Bx -wg +ir Wo BK oA Gh Bx -aW -GI -dy -Kw -rK -Kw -Kw -MT -UH -ZW -sr -wg +nS +Ev +WD +BV +Fv +BV +BV +vC +BT +zN +PB +ir UE UE "} @@ -12021,65 +12026,65 @@ bs wd Lo fW -Im -fs -Tw -Tw -Tw -Tw -Tw -Tw -ma -Xu -XM -qm -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -Tw -qm -qm -fw -rq -wg -wg -ri -aW -wg +za +aY +fC +fC +fC +fC +fC +fC +kv +Mg +MU +wr +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +fC +wr +wr +Lk +ua +ir +ir +LJ +nS +ir Wo Wo Bx jh Wo -wg +ir Wo Bx Bx fi Wo -UJ -hw -aW -Kw -Kw -Kw -MT -yj -ZW -ZW -uD -Ry +do +aO +nS +BV +BV +BV +vC +Bu +zN +zN +RV +TU UE UE "} @@ -12091,72 +12096,72 @@ UE UE UE Lo -PJ -PJ +Ss +Ss hE -PJ -PJ +Ss +Ss Ft -wi -Tf -Tf -Tz -Tz -Tz -af -af -Tf -Tf -Xu -Bk -Bk -Tf -Tf -Tf -Tf -Tf -Tf -qh -qh -Tf -Tf -Tf -Bk -Bk -Tf -Tf -Bk -Bk -Tf -Yv -Tw -Tw -Fc -Ak -Yv -Vw -gh -NN -LX -qh -qh -Vw -Vw -Vw -ri -wg -Jd -Ys -ws -wg -yH -MT -MT -PL -ZW -ZW -Ce -wg +pO +qW +qW +oQ +oQ +oQ +xw +xw +qW +qW +Mg +Nb +Nb +qW +qW +qW +qW +qW +qW +zt +zt +qW +qW +qW +Nb +Nb +qW +qW +Nb +Nb +qW +ZS +fC +fC +Ur +bd +ZS +Gv +Yw +Hw +bP +zt +zt +Gv +Gv +Gv +LJ +ir +xC +nj +Be +ir +Xm +vC +vC +SH +zN +zN +Hd +ir UE UE "} @@ -12168,72 +12173,72 @@ UE UE UE Lo -Qs +Mx Vl Td GD GD vD -tQ -DO -Dq -Wb -Wb -Wb -Wb -DO -DO -DO -Uv -VI -VA -VA -VA -NM -NM -wg -wg -DY -AR -yh -tg -tg -VA -VI -VI -VA -Lr -Lr -Lr -VA -mb -mb -JP -Tz -jH -aW -MT -MT -aC -ko -aW -aW -aW -aC -Zk -Jd -aW -BR -Iq -wg -Ry -MT -UH -ZW -ZW -Ce -qh -wg +fB +ww +mD +Qk +Qk +Qk +Qk +ww +ww +ww +aP +ly +Aa +Aa +Aa +qG +qG +ir +ir +sA +Wv +uf +Fh +Fh +Aa +ly +ly +Aa +eU +eU +eU +Aa +yr +yr +JD +oQ +gW +nS +vC +vC +AT +We +nS +nS +nS +AT +jJ +xC +nS +Wx +DK +ir +TU +vC +BT +zN +zN +Hd +zt +ir UE UE "} @@ -12251,65 +12256,65 @@ Lp PJ PJ Ft -wi -Tf -Zf -Tz -Tf -Tf -Tz -Tf -Tf -Tf -Zf -Tf -Tf -Tf -Tf -Tf -Tz -BR -NC -OT -BR -wg -RM -Tf -Tf -Tf -Bk -Bk -Bk -Tf -HB -Tf -Tf -Tf -Tf -gE -NL -kI -kI -bI -Jd -Eq -Jd -Jd -kI -WE -Wr -qh -cN -DY -AD -Bs -MT -MT -vm -ZW -Ce -qh -wg +pO +qW +Ne +oQ +qW +qW +oQ +qW +qW +qW +Ne +qW +qW +qW +qW +qW +oQ +Wx +Fz +sz +Wx +ir +IB +qW +qW +qW +Nb +Nb +Nb +qW +df +qW +qW +qW +qW +Gi +xS +vn +vn +oK +xC +pu +xC +xC +vn +hj +HS +zt +EB +sA +eV +YN +vC +vC +ju +zN +Hd +zt +ir UE UE UE @@ -12328,64 +12333,64 @@ uz Dr Eg Lo -Xj -iq -Zf -LD -Gr -uR -io -io -io -tI -Ax -aq -io -io -io -uR -Bg -Tz -BR -wZ -BR -wg -vi -vi -eq -eq -eq -Bg -Tf -Tf -Tz -Tz -Tz -Tz -Tf -Tf -dR -aW -wg -Eq -Eq -KW -wg -Vw -Vw -Vw -cY -qh -qh -wg -wg -fj -MT -PL -ZW -uD -qh -wg +ic +ln +Ne +JE +UQ +Py +eG +eG +eG +aJ +Lx +Yo +eG +eG +eG +Py +uE +oQ +Wx +bu +Wx +ir +cu +cu +VW +VW +VW +uE +qW +qW +oQ +oQ +oQ +oQ +qW +qW +EX +nS +ir +pu +pu +tn +ir +Gv +Gv +Gv +Gq +zt +zt +ir +ir +dv +vC +SH +zN +RV +zt +ir UE UE UE @@ -12405,63 +12410,63 @@ HZ PJ oI Lo -Gr -By -Zf -Tz -uR -io -yx -AG -Xl -Mu -FA -Ai -iL -Vu -lR -io -uR -Tf -BR -BR -wg -wg -yH -wg -wg -wg -wg -qs -fS -mi -VM -Gr -eq -eq -DM -DM -Vq -aW -wg -wg -Eq -TV -TM +UQ +xX +Ne +oQ +Py +eG +Nf +ls +ep +hy +ZO +Mk +pe +zL +rT +eG +Py +qW +Wx +Wx +ir +ir +Xm +ir +ir +ir +ir +vX +jz +te +iM +UQ +VW +VW +QC +QC +rE +nS +ir +ir +pu +jM +ce Wo Wo Wo zu Wo -wg -yH -tW -TM -TM -vm -ZW -sr -wg +ir +Xm +Ap +ce +ce +ju +zN +PB +ir UE UE UE @@ -12482,63 +12487,63 @@ Lo Lo Lo BM -RN -qs -Zf -Tf -io -OG -mn -lr -Qc -dp -Nc -yv -vw -Ai -IR -tk -io -Tf -Tz -Nl -wg -yH -yH -yH -yH -wg -wg -wg -aW -wg -aW -wg -wg -wg -Bm -aW -aW -wg -wg -wg -wg -Eq -TM +ec +vX +Ne +qW +eG +EP +Rw +Et +jA +Cm +tV +ob +AL +Mk +zQ +sj +eG +qW +oQ +eO +ir +Xm +Xm +Xm +Xm +ir +ir +ir +nS +ir +nS +ir +ir +ir +ne +nS +nS +ir +ir +ir +ir +pu +ce Bx BK Xg Gh Wo -yH -Wz -tW -Rs -TM -Gb -ZW -sr -wg +Xm +dd +Ap +gP +ce +oN +zN +PB +ir UE UE UE @@ -12552,70 +12557,70 @@ UE UE UE UE -yp -yp -Zh -wg -wg -qh -wg -wg -qs -Zf -Tf -io -ek -Af -zo -vu -st -rz -Uf -CS -nV -Ai -mo -io -Bk -Bk -Nl -yH -yH -ZS -ZS -ZS -ZS -ZS -ZS -lg -ZS -lg -ZS -ZS -ZS -ZS -nt -ZS -ZS -ZS -Kw -Kw -TM -wg +vA +vA +rk +ir +ir +zt +ir +ir +vX +Ne +qW +eG +vE +lB +LL +KL +WA +DF +Pr +kt +Hu +Mk +LK +eG +Nb +Nb +eO +Xm +Xm +ed +ed +ed +ed +ed +ed +QU +ed +QU +ed +ed +ed +ed +WO +ed +ed +ed +BV +BV +ce +ir Wo La pK CV Bx -wg -tW -TM -Bm -wg -Gb -Jo -sr -wg +ir +Ap +ce +ne +ir +oN +fl +PB +ir UE UE UE @@ -12629,70 +12634,70 @@ UE UE UE UE -yp -Vi -Vi -TM -AF -qh -EJ -kQ -qs -Zf -Tf -io -gA -Uk -MD -UP -bk -TM -rz -EK -IN -Ai -Oj -io -Tf -Bk -zI -yH -tW -ZS -gk -rc -yw -rc -lG -El -Tg -YE -WI -Pq -xm -lE -lG -lG -wE -bb +vA +os +os +ce +gv +zt +Zg +Dy +vX +Ne +qW +eG +ZH +uP +jN +hp +HO +ce +DF +Yz +ym +Mk +ny +eG +qW +Nb +PX +Xm +Ap +ed +GC +bH +UC +bH zG -ZS -TM -wg +Vf +dV +ZM +cF +ys +Vd +zM +zG +zG +ei +hf +mj +ed +ce +ir Wo to nI LM Wo -wg -wg -mh -Jn -wg -vm -Jo -sr -wg +ir +ir +Li +kG +ir +ju +fl +PB +ir UE UE UE @@ -12705,73 +12710,73 @@ UE UE UE UE -yp -yp -aX -EQ -wg -AF -BR -wg -wg -qs -Zf -Tf -uR -io -SA -wg -wX -Nx -EJ -sv -ET -nY -wW -io -uR -Tf -Tf -zI -TM -tW -ZS -rc -WI -gZ +vA +vA +xO +ew +ir +gv +Wx +ir +ir +vX +Ne +qW +Py +eG +if +ir lG -uW -je -je -je -Da -Da -RF -jt -py -dk -HM -xJ -xJ -ZS -wg -wg +iB +Zg +gU +HR +Fm +gO +eG +Py +qW +qW +PX +ce +Ap +ed +bH +cF +EY +zG +YS +Pv +Pv +Pv +uK +uK +zj +fn +zm +sE +om +Iw +Iw +ed +ir +ir Wo Wo Wo Bx Wo -wg -yH -hw -tW -wg -Oi -ZW -sr -wg -wg -wg +ir +Xm +aO +Ap +ir +Ua +zN +PB +ir +ir +ir UE UE UE @@ -12781,74 +12786,74 @@ UE UE UE UE -yp -yp -yp -Hp -yH -wg -AF -hw -hw -wg -qs -Zf -Tf -Nl -uR -io -io -DY -nW -VC -rB -io -io -io -uR -qs -Tf -Tf -Nl -wg -yH -ZS -ED -lE -pI -Ul -nh -UY -wJ -zG -LV -Ou -Ou -af -Pq -yq -cP -xl -eu -ZS -wg -dY -dY -CO -wg -wg -wg -qh -AF -hw -vf -TM -TM -Oi -ZW -wQ -ue -wg +vA +vA +vA +KQ +Xm +ir +gv +aO +aO +ir +vX +Ne +qW +eO +Py +eG +eG +sA +BB +Fr +PI +eG +eG +eG +Py +vX +qW +qW +eO +ir +Xm +ed +KB +zM +mS +NX +pr +fZ +kM +mj +YQ +VT +VT +xw +ys +pY +Mp +xM +Ig +ed +ir +Ee +Ee +YW +ir +ir +ir +zt +gv +aO +sg +ce +ce +Ua +zN +nb +Ck +ir UE UE UE @@ -12857,76 +12862,76 @@ UE UE UE UE -yp -yp -DY -yp -yp -yp -wg -hw -yH -iU -yH -qs -PU -AO -Wn -Jn -tW -Km -wg -qK -ek -MT -Vi -UD -UD -tW -qs -AO -AO -Nl -wg -wg -ZS -rc -xn -aG -zZ -BR -BR -JC -UY -PW -UA -we -Gm -jt -lE -iu -gn -Va -ZS -TM -TM -tW -yH -LA -wg -wg -yH -hw -FQ -yH -Wz -TM -wg -Oi -Jo -sr -wg -wg +vA +vA +sA +vA +vA +vA +ir +aO +Xm +bX +Xm +vX +Up +MH +BG +kG +Ap +QJ +ir +oc +vE +vC +os +KR +KR +Ap +vX +MH +MH +eO +ir +ir +ed +bH +FR +uS +ZX +Wx +Wx +Ac +fZ +Wd +ab +qS +DN +fn +zM +Cx +vx +Qj +ed +ce +ce +Ap +Xm +eA +ir +ir +Xm +aO +mg +Xm +dd +ce +ir +Ua +fl +PB +ir +ir UE UE "} @@ -12934,76 +12939,76 @@ UE UE UE UE -yp -Eq -KW -EJ -kr -yp -aW -Jn -aC -Vi -yH -yH -VQ -Ys -hw -yH -Vi -ho -MT -MT -MT -MT -Yf -UD -tW -TM -wg -aW -aW -aW -aW -aW -sL -rG -fu -uq -BR -KT -wg -BR -ay -wg -Cy -af -py -Pq -WS -iu -Df -Va -ZS -wg -wg -vf -TM -TM -wg -wg -Wz -yH -UD -UD -yH -ck -wg -TM -Gb -ZW -ue -wg +vA +pu +tn +Zg +oD +vA +nS +kG +AT +os +Xm +Xm +Vs +nj +aO +Xm +os +QS +vC +vC +vC +vC +bT +KR +Ap +ce +ir +nS +nS +nS +nS +nS +kK +OU +AA +JW +Wx +vU +ir +Wx +dS +ir +vv +xw +zm +ys +sb +Cx +TO +Qj +ed +ir +ir +sg +ce +ce +ir +ir +dd +Xm +KR +KR +Xm +TA +ir +ce +oN +zN +Ck +ir UE UE "} @@ -13011,76 +13016,76 @@ UE UE UE UE -yp -xr -dU -NC -WN -ZU -Ys -pf -hv -hv -LX -aW -ri -aW -tW -yH -yH -yH -nP -Vi -Yf -yH -UD -UD -TM -wg -wg -aW -aW -wg -wm -wg -ZS -WI -fP -TQ -QX -Vg -UP -QQ -wg -BR -BR -xQ -Gm -WI -gl -Va -jt -Xc -ZS -wg -dY -wg -wg -Bt -wg -wg -yH -Vi -wg -UD -dY -ck -hw -TM -vm -ZW -sr -wg +vA +da +xG +Fz +PR +vZ +nj +ac +wM +wM +bP +nS +LJ +nS +Ap +Xm +Xm +Xm +xD +os +bT +Xm +KR +KR +ce +ir +ir +nS +nS +ir +qQ +ir +ed +cF +qD +CM +oS +jy +hp +HV +ir +Wx +Wx +cE +DN +cF +yI +Qj +fn +NK +ed +ir +Ee +ir +ir +ME +ir +ir +Xm +os +ir +KR +Ee +TA +aO +ce +ju +zN +PB +ir UE UE "} @@ -13088,76 +13093,76 @@ UE UE UE UE -yp -LO -Eq -EJ -yp -pf -Bm -TM -MT -Fs -qh -kD -ri -aW -tW -TM -TM -yH -ot -Yf -wg -yH -UD -tW -tW -aW -aW -aW -aW -aW -aW -aW -Zw -Tp -sT -wg -QX -gg -NC -Dn -bp -gg -BR -zG -yc -WI -ij -jl -Xc -jt -ZS -dY -dY -wg -FY -bk -xr -wg -wg -MT -MT -Vi -dY -CO -DX -TM -vm -ZW -sr -wg +vA +Pc +pu +Zg +vA +ac +ne +ce +vC +BE +zt +AY +LJ +nS +Ap +ce +ce +Xm +hF +bT +ir +Xm +KR +Ap +Ap +nS +nS +nS +nS +nS +nS +nS +ag +fD +ji +ir +oS +Zp +Fz +io +HE +Zp +Wx +mj +QD +cF +Pl +nc +NK +fn +ed +Ee +Ee +ir +yP +HO +da +ir +ir +vC +vC +os +Ee +YW +nG +ce +ju +zN +PB +ir UE UE "} @@ -13165,177 +13170,177 @@ UE UE UE UE -Tv -Tv -xr -yp -yp -yp -tW -tW -Vi -Vi -jE -MT -ri -aW -yH -wg -TM -Bm -ZU -aW -aW -aW -ZU -ZU -aW -wg -yH -aC -aC -wg -qh -wg -ZS -WI -je -tE -wg -QX -DY -tR -ui -bp -wg -wk -On -rc -zc -lG -iN -pT -ZS -LA -wg -wg -DY -Nx -bk -wg -yH -wg -cd -lS -rY -yH -Jn -BR -vm -ZW -BH -wg +Jx +Jx +da +vA +vA +vA +Ap +Ap +os +os +LY +vC +LJ +nS +Xm +ir +ce +ne +vZ +nS +nS +nS +vZ +vZ +nS +ir +Xm +AT +AT +ir +zt +ir +ed +cF +Pv +Gu +ir +oS +sA +Rd +ZB +HE +ir +fd +gN +bH +TZ +zG +Ja +xT +ed +eA +ir +ir +sA +iB +HO +ir +Xm +ir +hH +cn +Ka +Xm +kG +Wx +ju +zN +cv +ir UE UE "} (73,1,1) = {" UE UE -jx -Cu -SA +pZ +Vt +if AQ xo Xq Xq Wo -tW -aU -yH -wg -wg -GK -aC -aC -BR -Ys -hw -TM -TM -wg -wg -TM -wg -wg -yH -yH -yH -aW -qh -qh -tW -ZS -GP -lG -LV -Rp -wg -jQ -xr -jS -wg -BR -Ul -lG -lG -zc -WI -jt -Si -Gt -aW -KP -xj -uL -KW -wg -wg -wg -LA -dY -br -lO -Wz -wg -BR -vm -sr -wg -wg +Ap +RP +Xm +ir +ir +SX +AT +AT +Wx +nj +aO +ce +ce +ir +ir +ce +ir +ir +Xm +Xm +Xm +nS +zt +zt +Ap +ed +RU +zG +YQ +pn +ir +Xb +da +nA +ir +Wx +NX +zG +zG +TZ +cF +fn +zB +FU +nS +Xe +Ut +zd +tn +ir +ir +ir +eA +Ee +Nr +oe +dd +ir +Wx +ju +PB +ir +ir UE UE "} (74,1,1) = {" UE UE -zG -uY +mj +UB uC wB AQ vK xE Bx -yH -Vi -TM -wg -wg -ri -aW -iX -iX -yH +Xm +os +ce +ir +ir +LJ +nS +AE +AE +Xm Wo Wo Bx @@ -13345,49 +13350,49 @@ Bx Wo Wo Wo -wg -aW -aW -qh -UD -tW -ZS -WI -xJ -Lt -iD -wg -UP -ui -EN -wg -SA -yJ -WI -WI -hr -jt -jt -lF -ZS -wg -aW -TM -uL -wg -TM -TM -Wz -yH -LA -hY -lO -tW -wg -MN -ZW -sr -wg +ir +nS +nS +zt +KR +Ap +ed +cF +Iw +bn +hS +ir +hp +ZB +QY +ir +if +VV +cF +cF +fg +fn +fn +KG +ed +ir +nS +ce +zd +ir +ce +ce +dd +Xm +eA +bK +oe +Ap +ir +AP +zN +PB +ir UE UE UE @@ -13403,16 +13408,16 @@ wH KE Uj Wo -yH -hw -Jn -Bm -wg -ri -aW -yH -UD -yH +Xm +aO +kG +ne +ir +LJ +nS +Xm +KR +Xm Wo zr Wo @@ -13422,49 +13427,49 @@ uT Wo cQ Bx -TM -ZU -TM -TM -tW -dY -ZS -WF -py -fu -tr -UZ -kW -wg -BR -Rb -af -jt -lG -jP -Nm -Si -UM -Qv -ZS -wg -ZU -TM -YZ -Jt -Nc -Ik -ZS -Ik -ZS -Vi -dE -zw -TM -Gb -Jo -CZ -wg +ce +vZ +ce +ce +Ap +Ee +ed +Iv +zm +AA +Cl +Pn +OB +ir +Wx +Bq +xw +fn +zG +Zn +nZ +zB +Ri +dc +ed +ir +vZ +ce +yV +oi +tV +Sm +ed +Sm +ed +os +sD +by +ce +oN +fl +dA +ir UE UE UE @@ -13480,16 +13485,16 @@ wB Vh SS Wo -yH -yH -yH -Bm -BR -ri -aW -yH -yH -UD +Xm +Xm +Xm +ne +Wx +LJ +nS +Xm +Xm +KR Wo ex Bx @@ -13499,49 +13504,49 @@ ro Bx ex Wo -wg -ZU -aW -wg -wg -yH -ZS -Dw -rn -WI -VO -qi -xJ -af -mp -WI -rn -Yb -gn -Va -Nm -WI -WI -bj -ZS -wg -aW -wg -DQ -SA -LH -Ae -Fq -Fq -Ik -wg -wg -wg -TM -Oi -ZW -CZ -wg +ir +vZ +nS +ir +ir +Xm +ed +MZ +Wi +cF +kj +bt +Iw +xw +qa +cF +Wi +eZ +vx +Qj +nZ +cF +cF +Go +ed +ir +nS +ir +GU +if +Iz +oo +Om +Om +Sm +ir +ir +ir +ce +Ua +zN +dA +ir UE UE UE @@ -13557,16 +13562,16 @@ TW Mr Se Bx -yH -wg -wg -yH -iX -tt -aW -aW -yH -yH +Xm +ir +ir +Xm +AE +Bb +nS +nS +Xm +Xm Bx wB AZ @@ -13576,49 +13581,49 @@ kn YR OW Wo -wg -aW -ZU -wg -wg -yH -ZS -Tc -WI -fX -WI -yv -lG -jw -WI -jt -Va -Zo -tL -rc -zc -rX -zc -wK -ZS -wg -ZU -ZU -Cu -sY -lL -rr -WI -WI -ZS -wg -yH -yH -tW -wg -vm -CZ -wg +ir +nS +vZ +ir +ir +Xm +ed +OR +cF +Bf +cF +ob +zG +aH +cF +fn +Qj +kP +VF +bH +TZ +xH +TZ +cH +ed +ir +vZ +vZ +Vt +bh +mk +og +cF +cF +ed +ir +Xm +Xm +Ap +ir +ju +dA +ir UE UE UE @@ -13634,16 +13639,16 @@ nM rl Se Wo -yH -yH -yH -qh -AF -wg -Yp -aW -ZU -aW +Xm +Xm +Xm +zt +gv +ir +RR +nS +vZ +nS yA QZ AQ @@ -13653,49 +13658,49 @@ Pg rh Yj PG -aW -aW -TM -TM -wg -wg -ZS -ZS -ZS -ZS -ZS -qR -xJ -ZS -kE -ZS -ZS -ZS -ZS -ZS -ZS -ZS -ZS -ZS -ZS -wg -jX -wg -ZS -BC -kS -WI -AH -DL -ZS -yH -yH -ms -tW -wg -vm -CZ -TM +nS +nS +ce +ce +ir +ir +ed +ed +ed +ed +ed +GB +Iw +ed +mG +ed +ed +ed +ed +ed +ed +ed +ed +ed +ed +ir +pv +ir +ed +wf +FI +cF +wv +tP +ed +Xm +Xm +kX +Ap +ir +ju +dA +ce UE UE UE @@ -13704,23 +13709,23 @@ UE UE UE Wo -JR +xs WZ Xz EV rJ -CW +Jm Wo -yH -UD -qh -wg -hw -Fx -YU -dJ -ZU -wg +Xm +KR +zt +ir +aO +ZA +Oe +DJ +vZ +ir Wo wB Xk @@ -13730,49 +13735,49 @@ YI Tr kf Bx -wg -aW -wg -TM -tW -wg -yH -yH -tW -wg -tA -MT -LX -yi -aW -wg -yH -dE -Xs -dE -yH -yH -dE -LA -Ra -TM -ZU -aC -lY -WI -zG -WI -zG -WI -Ik -yH -CO -Dh -wg -wg -vm -sr -wg +ir +nS +ir +ce +Ap +ir +Xm +Xm +Ap +ir +fE +vC +bP +QW +nS +ir +Xm +sD +No +sD +Xm +Xm +sD +eA +jx +ce +vZ +AT +Ql +cF +mj +cF +mj +cF +Sm +Xm +YW +YP +ir +ir +ju +PB +ir UE UE UE @@ -13781,23 +13786,23 @@ UE UE UE Wo -wB +xz Ic Xz Xz rJ -mv +sl Bx -yH -qh -wg -ek -MT -OA -ZU -ZU -Zs -IW +Xm +zt +ir +vE +vC +mU +vZ +vZ +km +XV hL cO uQ @@ -13807,49 +13812,49 @@ wB kn hN fA -aW -aW -wg -wg -yH -wg -TM -aX -aX -wg -Jd -LX -Na -Wz -wg -tA -yH -TM -TM -TM -tW -dE -mQ -Ii -LA -TM -qh -aC -Ik -fV -QB -bj -fV -JT -ZS -yH -EE -dY -wg -tB -ZW -sr -wg +nS +nS +ir +ir +Xm +ir +ce +xO +xO +ir +xC +bP +Ki +dd +ir +fE +Xm +ce +ce +ce +Ap +sD +He +eh +eA +ce +zt +AT +Sm +fJ +RG +Go +fJ +mW +ed +Xm +nq +Ee +ir +Tb +zN +PB +ir UE UE UE @@ -13865,16 +13870,16 @@ Ug Uj Se Wo -yH -yH -ek -ek -SF -aW -aW -wg -wg -ri +Xm +Xm +vE +vE +sm +nS +nS +ir +ir +LJ Wo WQ Wo @@ -13884,49 +13889,49 @@ Uz pM hN Wo -yH -aW -aW -wg -Ra -aX -MT -MT -wg -aW -aW -yH -yH -yH -yH -yH -yH -tW -yH -wg -wg -TM -wg -yH -Ra -nP -MT -LX -ZS -ZS -ZS -Ik -ZS -Ik -ZS -WG -EE -wg -TM -Jo -Jo -Fg -wg +Xm +nS +nS +ir +jx +xO +vC +vC +ir +nS +nS +Xm +Xm +Xm +Xm +Xm +Xm +Ap +Xm +ir +ir +ce +ir +Xm +jx +xD +vC +bP +ed +ed +ed +Sm +ed +Sm +ed +Ge +nq +ir +ce +fl +fl +ty +ir UE UE UE @@ -13939,19 +13944,19 @@ Hs lo cO ra -AQ +vH cO qt -kI -kI -ON -nN -aW -aW -yH -dY -dY -ri +vn +vn +Yn +EA +nS +nS +Xm +Ee +Ee +LJ Bx Wl Wo @@ -13961,49 +13966,49 @@ zV hN hN Bx -yH -aW -LX -MT -cd -Vi -yH -yH -wg -yH -yH -li -wg -wg -wg -yH -yH -wg -yH -yH -wg -TM -TM -MT -Vi -Vi -wg -Gx -TM -wg -wg -yH -yH -tW -tW -aX -Vi -TM -tB -ZW -CZ -wg -wg +Xm +nS +bP +vC +hH +os +Xm +Xm +ir +Xm +Xm +Os +ir +ir +ir +Xm +Xm +ir +Xm +Xm +ir +ce +ce +vC +os +os +ir +uU +ce +ir +ir +Xm +Xm +Ap +Ap +xO +os +ce +Tb +zN +dA +ir +ir UE UE UE @@ -14019,16 +14024,16 @@ dB Xk hJ Bx -wg -aW -sX -LX -aW -yH -dY -dY -hw -ri +ir +nS +aT +bP +nS +Xm +Ee +Ee +aO +LJ Wo DR Wo @@ -14038,48 +14043,48 @@ Tn pM WV Wo -Cu -wg -BR -MT -ap -Wz -yH -wg -wg -yH -yH -wg -wg -lk -wg -wg -yH -yH -wg -Wz -yH -wg -TM -wg -yH -JN -tW -UD -TM -wg -yH -JN -tW -DU -Vi -aX -TM -TM -ZW -Jo -BH -wg +Vt +ir +Wx +vC +DS +dd +Xm +ir +ir +Xm +Xm +ir +ir +Rg +ir +ir +Xm +Xm +ir +dd +Xm +ir +ce +ir +Xm +yx +Ap +KR +ce +ir +Xm +yx +Ap +YV +os +xO +ce +ce +zN +fl +cv +ir UE UE UE @@ -14096,16 +14101,16 @@ CP Se Se Cd -aW -aW -aW -aW -iX -iX -qh -UD -hw -tt +nS +nS +nS +nS +AE +AE +zt +KR +aO +Bb Bx Wo Bx @@ -14115,48 +14120,48 @@ Bx Bx aF aF -ci -EN -vk -yH -yH -wg -LA -wg -wg -wg -qz -TM -kF -NC -vz -wg -wg -Wz -wg -yH -tW -yH -yH -yH -TM -TM -UD -qh -TM -wg -wg -wg -wg -nP -vL -vL -wg -PL -Jo -Fg -wg -wg +YH +QY +TY +Xm +Xm +ir +eA +ir +ir +ir +CQ +ce +IT +Fz +jv +ir +ir +dd +ir +Xm +Ap +Xm +Xm +Xm +ce +ce +KR +zt +ce +ir +ir +ir +ir +xD +Yh +Yh +ir +SH +fl +ty +ir +ir UE UE UE @@ -14173,66 +14178,66 @@ HW eB Ab Wo -yH -wg -yH -AF -iX -BR -BR -BR -AF -aW -em -wg -MT -MT -yH -tW -tW -fY -Fk -vk -IG -BR -Kv -IG -MD -yH -yH -jq -tW -dE -TM -rt -Hq -xj -Av -wg -tW -TM -TM -TM -wg -wg -UD -UD -qh -qh -TM -Wz -wg -wg -UP -MT -wg -sU -wg -PL -ZW -BH -wg -wg +Xm +ir +Xm +gv +AE +Wx +Wx +Wx +gv +nS +tH +ir +vC +vC +Xm +Ap +Ap +zg +Oc +TY +zF +Wx +zD +zF +jN +Xm +Xm +AV +Ap +sD +ce +wx +AU +Ut +kw +ir +Ap +ce +ce +ce +ir +ir +KR +KR +zt +zt +ce +dd +ir +ir +hp +vC +ir +od +ir +SH +zN +cv +ir +ir UE UE UE @@ -14243,72 +14248,72 @@ UE UE UE Wo -SS +rR Mr kl rv Se -SS +GO Wo -yH -wg -hw -Vi -yH -wg -wg -hw -bz -UD -aW -Zc -MT -TM -TM -TM -tW -Ub -qE -Kv -MY -Uh -BR -vt -fb -wg -dE -zw -dE -wg -wg -ge -EJ -EJ -wg -wg -yH -UE -UE -UE -wg -wg -UE -UE -UE -UE -wg -wg -wg -xj -xj -NC -bk -wg -PL -uB -BH -wg -wg +Xm +ir +aO +os +Xm +ir +ir +aO +XN +KR +nS +pk +vC +ce +ce +ce +Ap +HK +YE +zD +PN +tw +Wx +qN +tm +ir +sD +by +sD +ir +ir +kg +Zg +Zg +ir +ir +Xm +UE +UE +UE +ir +ir +UE +UE +UE +UE +ir +ir +ir +Ut +Ut +Fz +HO +ir +SH +gC +cv +ir +ir UE UE UE @@ -14320,50 +14325,50 @@ UE UE UE Wo -Yl +BJ Se Xz eR cT -Mh +Ta Wo -yH -TM -Vi -Vi -yH -TM -wg -wg -hX -tN -yH -LX -yb -tW -TM -TM -Jn -JK -ax -IG -tv -tx -KW -gw -BR -wg -yH -dE -xZ -wg -wg -TM -wg -wg -wg -yH -yH +Xm +ce +os +os +Xm +ce +ir +ir +Ik +Kn +Xm +bP +xh +Ap +ce +ce +kG +BU +Dt +zF +bU +ZR +tn +gV +Wx +ir +Xm +sD +RC +ir +ir +ce +ir +ir +ir +Xm +Xm UE UE UE @@ -14375,16 +14380,16 @@ UE UE UE UE -wg -EJ -xj -rA -DY -wg -QP -wg -wg -wg +ir +Zg +Ut +jr +sA +ir +Jb +ir +ir +ir UE UE UE @@ -14404,42 +14409,42 @@ Xz Se SS Wo -wg -wg -aX -tW -tW -MT -MT -wg -yH -CO -CO -MT -tf -tW -tW -iX -iX -fY -ou -rM -wg -DY -Tx -UP -cI -TM -yH -Ra -dE -yH -pJ -TM -wg -yH -yH -yH +ir +ir +xO +Ap +Ap +vC +vC +ir +Xm +YW +YW +vC +qY +Ap +Ap +AE +AE +zg +Cb +Kd +ir +sA +IP +hp +US +ce +Xm +jx +sD +Xm +wC +ce +ir +Xm +Xm +Xm UE UE UE @@ -14452,14 +14457,14 @@ UE UE UE UE -wg -wg -EJ -EJ -wg -wg -wg -wg +ir +ir +Zg +Zg +ir +ir +ir +ir UE UE UE @@ -14481,40 +14486,40 @@ Ug kf ur Wo -wg -yH -yH -tW -xI -MT +ir +Xm +Xm +Ap +ii +vC dP QE QE QE QE dP -jU -ZU -yH -hw -yH -hw -ax -qh -EJ -tv -UP -yM -yM -TM -yH -wg -Wz -DU -yH -yH -yH -yH +GQ +vZ +Xm +aO +Xm +aO +Dt +zt +Zg +bU +hp +et +et +ce +Xm +ir +dd +YV +Xm +Xm +Xm +Xm UE UE UE @@ -14530,10 +14535,10 @@ UE UE UE UE -wg -wg -wg -wg +ir +ir +ir +ir UE UE UE @@ -14558,35 +14563,35 @@ an AQ ID Bx -wg -yH -yH -aX -MT -wg +ir +Xm +Xm +xO +vC +ir QE Nt zK Pf xg QE -ri -aW -BR -yH -dY -hw -BR -wg -yY -gg -Qh -po -vt -wg -Ra -yH -yH +LJ +nS +Wx +Xm +Ee +aO +Wx +ir +Ed +Zp +Ml +gG +qN +ir +jx +Xm +Xm UE UE UE @@ -14635,35 +14640,35 @@ dC XX Co Bx -Yf -yH -Vi -TM -wg -yH +bT +Xm +os +ce +ir +Xm QE Nt qv bF of Sf -ai -BR -BR -yH -dY -dY -hw -wg -wg -wg -po -wg -EN -wg -Wz -LA -yH +Aw +Wx +Wx +Xm +Ee +Ee +aO +ir +ir +ir +gG +ir +QY +ir +dd +eA +Xm UE UE UE @@ -14711,35 +14716,35 @@ Xq kf Xq Bx -zG -wg -qh -qh -TM -TM -yH +mj +ir +zt +zt +ce +ce +Xm QE Nt eK nm Rq QE -wg -BR -yH -yH +ir +Wx +Xm +Xm UE -yH -ms -hw -wg -wg -wg -wg -wg -yH -yH -yH +Xm +kX +aO +ir +ir +ir +ir +ir +Xm +Xm +Xm UE UE UE @@ -14783,39 +14788,39 @@ UE UE UE UE -MT -MT -MT -wg -wg -wg -wg -qh -UD -UD -TM -TM +vC +vC +vC +ir +ir +ir +ir +zt +KR +KR +ce +ce dP QE QE QE QE dP -BR -yH -CO +Wx +Xm +YW UE UE -yH -dY -yH -FP -yH -Wz -dY -dY -yH -yH +Xm +Ee +Xm +IO +Xm +dd +Ee +Ee +Xm +Xm UE UE UE @@ -14860,37 +14865,37 @@ UE UE UE UE -MT -wg -UP -UP -YB -wg +vC +ir +hp +hp +oy +ir UE -wg -qh -UD -qh -TM -TM -wg -Ra -wg -wg -wg -wg -yH -Wz +ir +zt +KR +zt +ce +ce +ir +jx +ir +ir +ir +ir +Xm +dd UE UE UE UE UE -dY -qb -dY -qb -yH +Ee +qc +Ee +qc +Xm UE UE UE @@ -14938,25 +14943,25 @@ UE UE UE UE -wg -wg -kQ -EJ -wg +ir +ir +Dy +Zg +ir UE UE -wm -qh -qh -qh -TM -tW -tW -wg -wg -yH -CO -yH +qQ +zt +zt +zt +ce +Ap +Ap +ir +ir +Xm +YW +Xm UE UE UE @@ -15015,23 +15020,23 @@ UE UE UE UE -wg -wg -wg -wg -wg +ir +ir +ir +ir +ir UE UE UE -wg -qh -UD -dE -dE -jd -TM -tW -tW +ir +zt +KR +sD +sD +jO +ce +Ap +Ap UE UE UE @@ -15101,13 +15106,13 @@ UE UE UE UE -wg -yH -dE -dY -dY -wg -yH +ir +Xm +sD +Ee +Ee +ir +Xm UE UE UE @@ -15178,12 +15183,12 @@ UE UE UE UE -wg -LA -dY -dE -yH -wg +ir +eA +Ee +sD +Xm +ir UE UE UE @@ -15255,12 +15260,12 @@ UE UE UE UE -wg -wg -LA -yH -wg -wg +ir +ir +eA +Xm +ir +ir UE UE UE @@ -15334,9 +15339,9 @@ UE UE UE UE -YB -wg -wg +oy +ir +ir UE UE UE diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_codelab.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_codelab.dmm index 04ada2692122..1bbc1b76a834 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_codelab.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_codelab.dmm @@ -238,9 +238,10 @@ /obj/structure/fluff/paper/stack{ dir = 6 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, /turf/open/floor/plasteel/white, /area/ruin/unpowered/codelab/subjectrooms) "cO" = ( @@ -424,7 +425,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plasteel/white, /area/ruin/unpowered/codelab/subjectrooms) "eY" = ( @@ -617,6 +618,13 @@ /obj/effect/turf_decal/industrial/stand_clear, /turf/open/floor/plating, /area/ruin/unpowered/codelab/maintenance) +"hB" = ( +/obj/effect/turf_decal/corner/opaque/white/mono, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/codelab/subjectrooms) "hE" = ( /turf/closed/wall/mineral/titanium, /area/ruin/unpowered/codelab/reception) @@ -5162,7 +5170,7 @@ ir XS He rY -GN +hB Ru GN hE diff --git a/_maps/RandomRuins/RockRuins/rockplanet_crash_cult.dmm b/_maps/RandomRuins/RockRuins/rockplanet_crash_cult.dmm index d36bbab74454..b663f0ad2bd1 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_crash_cult.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_crash_cult.dmm @@ -480,23 +480,6 @@ }, /turf/open/floor/plating, /area/ruin/unpowered) -"sA" = ( -/obj/docking_port/mobile{ - callTime = 250; - can_move_docking_ports = 1; - dir = 2; - dwidth = 11; - height = 17; - launch_status = 0; - name = "Salvage Ship"; - port_direction = 8; - preferred_direction = 4; - width = 33 - }, -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plasteel, -/area/ruin/unpowered) "sN" = ( /obj/machinery/processor, /obj/effect/decal/cleanable/dirt/dust, @@ -1370,6 +1353,11 @@ }, /turf/open/floor/plating, /area/ruin/unpowered) +"WS" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plasteel, +/area/ruin/unpowered) "Xh" = ( /obj/structure/table, /obj/item/storage/bag/plants/portaseeder, @@ -1386,9 +1374,6 @@ }, /turf/open/floor/plasteel/cult, /area/ruin/unpowered) -"XI" = ( -/turf/closed/mineral/random/rockplanet, -/area/overmap_encounter/planetoid/rockplanet/explored) "XN" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood, @@ -1409,6 +1394,9 @@ }, /turf/open/floor/plasteel/cult, /area/ruin/unpowered) +"Zf" = ( +/turf/closed/mineral/random/rockplanet, +/area/overmap_encounter/planetoid/rockplanet/explored) "Zg" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 9 @@ -1729,7 +1717,7 @@ RY nv "} (16,1,1) = {" -sA +WS Bz hw ul @@ -1826,10 +1814,10 @@ li Es Es Es -XI +Zf "} (21,1,1) = {" -XI +Zf Es Us Es @@ -1844,12 +1832,12 @@ xD Us eK ou -XI -XI -XI +Zf +Zf +Zf "} (22,1,1) = {" -XI +Zf Es Es jU @@ -1863,14 +1851,14 @@ fg xD xD eK -XI -XI -XI -XI +Zf +Zf +Zf +Zf "} (23,1,1) = {" -XI -XI +Zf +Zf Es SP Es @@ -1889,8 +1877,8 @@ SP Es "} (24,1,1) = {" -XI -XI +Zf +Zf Es ou Es @@ -1904,14 +1892,14 @@ ct xD Es jU -XI -XI +Zf +Zf Es "} (25,1,1) = {" -XI -XI -XI +Zf +Zf +Zf Es Es Nt @@ -1923,16 +1911,16 @@ GW xD xD Es -XI -XI -XI -XI +Zf +Zf +Zf +Zf "} (26,1,1) = {" -XI -XI -XI -XI +Zf +Zf +Zf +Zf Es Es Nt @@ -1945,6 +1933,6 @@ Es Es Es Es -XI -XI +Zf +Zf "} diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm index 2e167f56d1ef..e9d9c42c3028 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm @@ -17,6 +17,14 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/powered) +"aV" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/ruin/powered) "bu" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -69,6 +77,19 @@ /obj/effect/turf_decal/box, /turf/open/floor/engine, /area/ruin/powered) +"cN" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/ruin/powered) "cZ" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -107,6 +128,14 @@ icon_state = "platingdmg1" }, /area/ruin/powered) +"dQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/ruin/powered) "dR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 8 @@ -174,6 +203,15 @@ }, /turf/open/floor/plasteel/white, /area/ruin/powered) +"fh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ruin/powered) "fl" = ( /obj/structure/table_frame, /obj/item/shard{ @@ -208,23 +246,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/powered) -"fG" = ( -/obj/item/shard{ - icon_state = "tiny" - }, -/obj/item/shard{ - icon_state = "small" - }, -/obj/item/shard, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, +"fO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plating, /area/ruin/powered) -"fJ" = ( +"fY" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 }, @@ -232,14 +258,18 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 8 - }, /turf/open/floor/plasteel, /area/ruin/powered) -"fO" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plating, +"ge" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ruin/powered) "gn" = ( /obj/effect/decal/cleanable/dirt, @@ -292,13 +322,6 @@ }, /turf/open/floor/plasteel/white, /area/ruin/powered) -"hq" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/ruin/powered) "hC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -507,18 +530,6 @@ }, /turf/open/floor/plasteel/white, /area/ruin/powered) -"nF" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered) "nQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 8 @@ -557,6 +568,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/powered) +"oL" = ( +/obj/item/shard{ + icon_state = "tiny" + }, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/powered) "oW" = ( /obj/structure/rack, /obj/item/storage/box, @@ -710,20 +733,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/powered) -"sT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 8 +"sS" = ( +/obj/structure/rack, +/obj/item/storage/firstaid/brute, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = -3 }, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 }, +/turf/open/floor/plasteel/dark, /area/ruin/powered) "tu" = ( /obj/structure/table, @@ -743,11 +763,6 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/powered) -"uc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, -/area/ruin/powered) "uu" = ( /obj/machinery/vending/cola/random, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -913,6 +928,14 @@ icon_state = "platingdmg1" }, /area/ruin/powered) +"zN" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/powered) "zQ" = ( /obj/structure/table/glass, /obj/effect/turf_decal/industrial/warning{ @@ -982,12 +1005,30 @@ }, /turf/open/floor/plating, /area/ruin/powered) +"BD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/ruin/powered) "BH" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ icon_state = "platingdmg2" }, /area/ruin/powered) +"BI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/ruin/powered) "BS" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -1058,13 +1099,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/plasteel/white, /area/ruin/powered) -"FM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered) "FO" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -1146,6 +1180,14 @@ "Jb" = ( /turf/closed/wall, /area/ruin/powered) +"Jm" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/ruin/powered) "Jq" = ( /obj/effect/turf_decal/industrial/loading, /turf/open/floor/engine, @@ -1281,17 +1323,12 @@ "Nb" = ( /turf/open/floor/plating/asteroid/whitesands, /area/ruin/powered) -"Nd" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 +"NN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white, /area/ruin/powered) "OB" = ( /obj/effect/decal/cleanable/dirt, @@ -1364,21 +1401,6 @@ icon_state = "platingdmg3" }, /area/ruin/powered) -"Qa" = ( -/obj/item/shard{ - icon_state = "tiny" - }, -/obj/item/shard{ - icon_state = "medium" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/powered) "Qc" = ( /obj/machinery/plumbing/tank, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -1402,16 +1424,6 @@ }, /turf/open/floor/plating, /area/ruin/powered) -"Qr" = ( -/obj/machinery/light/directional/south, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered) "QP" = ( /obj/machinery/door/airlock/vault/derelict, /obj/structure/cable, @@ -1478,31 +1490,27 @@ }, /turf/open/floor/plasteel, /area/ruin/powered) -"SL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/ruin/powered) "Tb" = ( /obj/machinery/plumbing, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/powered) -"Tc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/ruin/powered) "Te" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel/white, /area/ruin/powered) +"TY" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/powered) "Ub" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -1516,18 +1524,12 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/powered) -"Ud" = ( -/obj/structure/rack, -/obj/item/storage/firstaid/brute, -/obj/item/storage/firstaid/fire{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 +"Uo" = ( +/obj/item/paper{ + default_raw_text = "First, pack the medpens in a box, this is nessarary or else the launchpad won't take the pens. Second, leave them on the pad, and click send. From there, they will be managed and transported to mining vendors all over the galaxy."; + name = "Factory loading instructions" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, +/turf/open/floor/engine, /area/ruin/powered) "UH" = ( /turf/open/floor/plating, @@ -1589,6 +1591,20 @@ /obj/structure/table_frame, /turf/open/floor/plasteel/white, /area/ruin/powered) +"VY" = ( +/obj/item/shard{ + icon_state = "tiny" + }, +/obj/item/shard{ + icon_state = "small" + }, +/obj/item/shard, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/ruin/powered) "Wa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -1722,13 +1738,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/powered) -"ZJ" = ( -/obj/item/paper{ - default_raw_text = "First, pack the medpens in a box, this is nessarary or else the launchpad won't take the pens. Second, leave them on the pad, and click send. From there, they will be managed and transported to mining vendors all over the galaxy."; - name = "Factory loading instructions" - }, -/turf/open/floor/engine, -/area/ruin/powered) "ZM" = ( /obj/structure/table, /obj/item/paper_bin, @@ -1750,6 +1759,10 @@ }, /turf/open/floor/plasteel, /area/ruin/powered) +"ZQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/powered) (1,1,1) = {" Mb @@ -2066,17 +2079,17 @@ ku Jb kF sE -sE -nF -hq -FM -Qr +gS +cN +aV +dQ +Jm Jb hY kk Qq -fG -xd +VY +Qq mh Hp AO @@ -2097,17 +2110,17 @@ pB dZ bu sE -gS -Nd -uc -Ud -SL +sE +KU +ZQ +sS +ge Ei qs Wa Qk -fJ -eI +fY +fh zk rN iP @@ -2118,7 +2131,7 @@ wq QP Fd Fd -ZJ +Uo Jq lM az @@ -2137,8 +2150,8 @@ FO sz Rs Lj -sT -SE +BI +TY kS SE SE @@ -2168,8 +2181,8 @@ Jb hY en Bn -Qa -rf +oL +zN yc rf rf @@ -2199,8 +2212,8 @@ Jb hn ir ad -Tc -ad +NN +BD zk ad oH diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_youreinsane.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_youreinsane.dmm index 4ea2350301d7..e8932e8b51ed 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_youreinsane.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_youreinsane.dmm @@ -79,8 +79,7 @@ /area/ruin/unpowered) "x" = ( /obj/effect/mob_spawn/human/engineer{ - gender = "female"; - mob_species = null + gender = "female" }, /obj/item/clothing/suit/radiation, /obj/item/clothing/head/radiation{ @@ -90,6 +89,12 @@ /obj/item/geiger_counter, /turf/open/floor/engine, /area/ruin/unpowered) +"y" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/ruin/unpowered) "z" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ @@ -139,9 +144,6 @@ dir = 1 }, /obj/structure/frame/machine, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, @@ -268,7 +270,7 @@ Q u Y j -w +y w w "} diff --git a/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm b/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm index 7371069c7a17..3c98825f7924 100644 --- a/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm +++ b/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm @@ -1645,11 +1645,6 @@ /obj/item/reagent_containers/food/snacks/burger/brain, /turf/open/floor/carpet, /area/ruin/space/has_grav/powered/macspace) -"Fk" = ( -/obj/machinery/atmospherics/components/unary/tank/oxygen, -/obj/machinery/atmospherics/components/unary/tank/oxygen, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav/powered/macspace) "Im" = ( /obj/machinery/door/airlock/silver, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -2226,7 +2221,7 @@ aM ae dk dk -Fk +dk ae VM VM diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 63442dfeb7bf..78a1027fb247 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -37,6 +37,14 @@ /obj/structure/flora/rock/pile, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) +"bA" = ( +/obj/machinery/vending/cigarette, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/corporatemine/hall) "bG" = ( /obj/structure/cable{ icon_state = "1-4" @@ -124,21 +132,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ruin/space/has_grav/corporatemine/crewquarters) -"ei" = ( -/obj/effect/decal/cleanable/oil/slippery, -/obj/machinery/atmospherics/pipe/simple/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/components/binary/valve/digital/on/layer4, -/obj/machinery/atmospherics/components/binary/valve/digital/on/layer2, -/turf/open/floor/plating, -/area/ruin/space/has_grav/corporatemine/hall) "eu" = ( /obj/structure/cable{ icon_state = "4-8" @@ -213,6 +206,27 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/space/has_grav/corporatemine/hall) +"fF" = ( +/obj/machinery/door/airlock{ + name = "Room 1" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/corporatemine/crewquarters) "fK" = ( /obj/structure/cable{ icon_state = "5-8" @@ -533,20 +547,6 @@ /obj/structure/grille/broken, /turf/open/floor/plating, /area/ruin/space) -"mp" = ( -/obj/structure/table/wood/poker, -/obj/effect/holodeck_effect/cards, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel/grimy, -/area/ruin/space/has_grav/corporatemine/crewquarters) "my" = ( /obj/machinery/door/airlock/wood{ locked = 1; @@ -639,6 +639,17 @@ /obj/item/shovel, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) +"ov" = ( +/obj/structure/table/wood/poker, +/obj/effect/holodeck_effect/cards, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/corporatemine/crewquarters) "oD" = ( /obj/structure/railing, /obj/structure/catwalk/over/plated_catwalk, @@ -842,33 +853,6 @@ /obj/effect/turf_decal/industrial/outline, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/corporatemine/hall) -"uJ" = ( -/obj/machinery/door/airlock{ - name = "Room 1" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/opaque/bar/filled/warning, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/corporatemine/crewquarters) "va" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -970,6 +954,11 @@ }, /turf/open/floor/plating, /area/ruin/space) +"xK" = ( +/obj/structure/table/wood, +/obj/machinery/fax, +/turf/open/floor/wood, +/area/ruin/space/has_grav/corporatemine/crewquarters) "xT" = ( /obj/structure/cable{ icon_state = "1-10" @@ -1007,11 +996,6 @@ "yl" = ( /turf/open/floor/plating, /area/ruin/space) -"yv" = ( -/obj/structure/table/wood, -/obj/machinery/fax, -/turf/open/floor/wood, -/area/ruin/space/has_grav/corporatemine/crewquarters) "yD" = ( /obj/effect/decal/cleanable/oil/slippery, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -1648,6 +1632,18 @@ }, /turf/open/floor/plating, /area/ruin/space) +"JS" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/machinery/atmospherics/pipe/simple/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/binary/valve/digital/on/layer4, +/obj/machinery/atmospherics/components/binary/valve/digital/on/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/corporatemine/hall) "Ke" = ( /turf/open/floor/plating/airless, /area/ruin/space) @@ -1817,17 +1813,6 @@ /obj/structure/lattice, /turf/open/floor/plating, /area/ruin/space) -"NV" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/spline/fancy/opaque/lightgrey, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/corporatemine/hall) "Og" = ( /obj/structure/bed, /obj/item/bedsheet/syndie, @@ -3559,7 +3544,7 @@ bc rn iW BA -yv +xK DF gf BA @@ -3713,7 +3698,7 @@ Al iW Eu AD -ei +JS CH Br WW @@ -4133,7 +4118,7 @@ yD Dn Zz qK -NV +bA pP nf zB @@ -4283,7 +4268,7 @@ BA gj cI nW -uJ +fF pK pK TT @@ -4333,7 +4318,7 @@ Al Al QR Lm -mp +ov qZ tF Qc diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm index 7ac9ff16fff2..0104b112aeda 100644 --- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm +++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -25,10 +25,10 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 4 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1{ dir = 4 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1{ +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer4{ dir = 4 }, /turf/open/floor/plastic, @@ -40,7 +40,7 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1{ dir = 1 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer4{ dir = 1 }, /turf/open/floor/plastic, @@ -55,7 +55,7 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1{ dir = 8 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer4{ dir = 8 }, /turf/closed/indestructible/reinforced, @@ -70,7 +70,7 @@ "ak" = ( /obj/machinery/atmospherics/components/unary/tank/oxygen{ dir = 8; - gas_type = /datum/gas/water_vapor; + gas_type = "water_vapor"; initialize_directions = 8 }, /turf/open/floor/plasteel/grimy, @@ -122,15 +122,12 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{ dir = 6 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ dir = 6 }, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "av" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 }, @@ -138,6 +135,9 @@ dir = 4 }, /obj/structure/holobox, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 4 + }, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "ax" = ( @@ -147,7 +147,7 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1{ dir = 4 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer4{ dir = 4 }, /turf/open/floor/plastic, @@ -166,7 +166,7 @@ "aC" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "aD" = ( @@ -206,7 +206,7 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{ dir = 5 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ dir = 5 }, /turf/open/floor/plastic, @@ -218,7 +218,7 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{ dir = 4 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ dir = 4 }, /turf/open/floor/plastic, @@ -230,7 +230,7 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{ dir = 9 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ dir = 9 }, /turf/open/floor/plastic, @@ -1030,8 +1030,8 @@ "Nv" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "Nx" = ( diff --git a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm index f8b9e24b2d20..67fb3c35f127 100644 --- a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm +++ b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm @@ -1,4 +1,12 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "ac" = ( /obj/structure/cable{ icon_state = "5-9" @@ -60,21 +68,23 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"ap" = ( -/obj/machinery/conveyor{ - id = "singlabcarg" +"ao" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/railing{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 }, -/area/ruin/space/has_grav/singularitylab) +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/decal/cleanable/blood{ + dir = 4; + icon_state = "gib3" + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/cargo) "aq" = ( /obj/structure/chair/office{ dir = 1 @@ -109,55 +119,18 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) -"ax" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/effect/turf_decal/atmos/oxygen, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 1 +"az" = ( +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_y = 32 }, -/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/spacevine/dense, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab) -"ay" = ( -/obj/machinery/door/airlock{ - dir = 4; - name = "Private Quarters" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, /area/ruin/space/has_grav/singularitylab/civvie) -"aA" = ( -/turf/open/space/basic, -/area/space/nearstation) -"aC" = ( -/obj/structure/flippedtable{ - dir = 1; - icon_state = "" - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/turf/open/floor/plating/asteroid, -/area/ruin/space/has_grav/singularitylab) "aD" = ( /obj/structure/cable{ icon_state = "5-9" @@ -169,11 +142,15 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"aI" = ( +"aJ" = ( /obj/structure/spacevine/dense, -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 8 +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/structure/spacevine/dense{ + pixel_y = -32 }, +/mob/living/simple_animal/hostile/venus_human_trap, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; @@ -224,15 +201,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"aP" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/stalkybush, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "aQ" = ( /obj/structure/transit_tube/diagonal{ dir = 4 @@ -249,23 +217,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab) -"aR" = ( -/obj/structure/table, -/obj/machinery/button/shieldwallgen{ - dir = 8; - id = "singlabhang"; - pixel_x = -5 - }, -/obj/machinery/button/door{ - dir = 8; - id = "singlabhangar"; - pixel_x = 8 - }, -/obj/structure/sign/warning/incident{ - pixel_x = 32 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "aT" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 1 @@ -276,28 +227,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"aU" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) -"aY" = ( -/turf/closed/wall{ - desc = "A huge chunk of metal holding the roof of the asteroid at bay"; - name = "structural support" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "aZ" = ( /obj/structure/cable{ icon_state = "6-8" @@ -314,6 +243,22 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"ba" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "bb" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating/dirt{ @@ -438,6 +383,13 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav) +"bx" = ( +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "by" = ( /obj/structure/chair/office{ dir = 4 @@ -453,18 +405,25 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) -"bD" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 1; - piping_layer = 4 +"bC" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Private Quarters" }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/area/ruin/space/has_grav/singularitylab) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/civvie) "bH" = ( /obj/structure/railing/corner{ dir = 4 @@ -500,12 +459,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) -"bO" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "bV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -523,14 +476,18 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"bZ" = ( -/obj/structure/spacevine/dense, +"ca" = ( +/obj/structure/spacevine, +/obj/item/gun/energy/floragun, +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/gibspawner, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/engineering) +/area/ruin/space/has_grav/singularitylab/civvie) "cb" = ( /obj/effect/turf_decal/siding/thinplating, /obj/effect/turf_decal/siding/thinplating/corner{ @@ -570,18 +527,6 @@ /obj/structure/closet/cardboard/metal, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/space/has_grav/singularitylab/cargo) -"ci" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "cj" = ( /obj/structure/closet/firecloset{ anchored = 1 @@ -592,16 +537,6 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab/civvie) -"cl" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/space/basic, -/area/space/nearstation) "cm" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -615,17 +550,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"cr" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_x = 32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "cu" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate/medical, @@ -634,6 +558,18 @@ /obj/item/storage/backpack/duffelbag/med/surgery, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/space/has_grav/singularitylab/cargo) +"cv" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "cw" = ( /obj/structure/cable{ icon_state = "2-8" @@ -654,31 +590,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"cz" = ( -/obj/machinery/door/airlock/engineering{ - dir = 8; - name = "Engine Control" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/engineering) "cB" = ( /obj/structure/cable{ icon_state = "1-2" @@ -694,6 +605,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) +"cC" = ( +/obj/machinery/door/airlock{ + name = "Private Quarters" + }, +/turf/closed/mineral/random, +/area/ruin/space/has_grav) "cD" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -729,10 +646,19 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav) -"cK" = ( -/obj/machinery/power/apc/auto_name/directional/west{ - start_charge = 0 - }, +"cI" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"cK" = ( +/obj/machinery/power/apc/auto_name/directional/west{ + start_charge = 0 + }, /obj/structure/cable{ icon_state = "0-2" }, @@ -757,18 +683,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"cP" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Assistant" - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "cQ" = ( /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) @@ -790,6 +704,17 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"cT" = ( +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "cU" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 5 @@ -803,6 +728,16 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"cV" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/space/nearstation) "cW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 6 @@ -816,6 +751,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"cZ" = ( +/obj/structure/chair/stool/bar{ + dir = 1; + name = "picnic stool"; + pixel_y = 16 + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/structure/spacevine, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "da" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, @@ -829,31 +774,6 @@ /obj/structure/ore_box, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/cargo) -"dc" = ( -/obj/machinery/door/airlock/engineering{ - dir = 4; - name = "Engine Control" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/engineering) "dd" = ( /obj/structure/bed, /obj/item/bedsheet/nanotrasen, @@ -868,6 +788,21 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/cargo) +"dh" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "dk" = ( /obj/machinery/door/airlock/vault{ name = "Vault" @@ -896,6 +831,48 @@ dir = 1 }, /area/ruin/space/has_grav/singularitylab) +"dr" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Assistant" + }, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"dt" = ( +/obj/structure/transit_tube/station/dispenser{ + dir = 4 + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 23 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/spacevine, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) "du" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -915,6 +892,17 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"dx" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Assistant" + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "dz" = ( /obj/structure/railing{ dir = 4 @@ -924,30 +912,30 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/reactor) -"dG" = ( +"dH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/reactor) +"dI" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -31; - pixel_y = 32 - }, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/effect/decal/cleanable/insectguts, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/reactor) +"dK" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "dL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -960,21 +948,6 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) -"dM" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/visible/layer4{ - dir = 6 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "dP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 @@ -1043,26 +1016,6 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"ed" = ( -/obj/machinery/door/airlock{ - dir = 4; - name = "Barracks" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/civvie) "eh" = ( /obj/structure/spacevine, /obj/machinery/atmospherics/components/unary/outlet_injector/on, @@ -1081,35 +1034,19 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"em" = ( -/obj/machinery/mineral/processing_unit_console{ - machinedir = 9; - pixel_x = -32; - pixel_y = -4 +"en" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Barracks" }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/cargo) -"eo" = ( -/obj/structure/cable{ - icon_state = "1-6" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/corner/opaque/purple{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 5 - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/civvie) "eq" = ( /obj/structure/chair{ dir = 4 @@ -1120,23 +1057,6 @@ /obj/effect/turf_decal/corner/opaque/white/full, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"er" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/table/wood/fancy/green, -/obj/structure/fluff/beach_umbrella{ - pixel_x = -5; - pixel_y = 16 - }, -/obj/structure/spacevine, -/obj/machinery/light/floor, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) "es" = ( /obj/structure/transit_tube/curved/flipped{ dir = 4 @@ -1156,28 +1076,13 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"et" = ( -/obj/item/gun/energy/e_gun/smg{ - dry_fire_sound = 'sound/items/ding.ogg'; - dry_fire_text = "ding"; - name = "\improper Modified E-TAR SMG"; - pixel_x = 5; - pixel_y = 6 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/item/stack/telecrystal{ - pixel_x = -9; - pixel_y = -4 - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 10 - }, -/obj/structure/sign/poster/official/mini_energy_gun{ - pixel_y = -32 +"eu" = ( +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/turf/open/floor/plating, +/area/space/nearstation) "ev" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 10 @@ -1187,6 +1092,17 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"ew" = ( +/obj/structure/toilet{ + dir = 8; + pixel_x = 6; + pixel_y = 5 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/civvie) "ez" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/west, @@ -1309,17 +1225,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab) -"eY" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/effect/decal/cleanable/insectguts, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "fa" = ( /obj/structure/spacevine/dense, /turf/open/floor/plating/dirt{ @@ -1348,15 +1253,29 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab/engineering) -"fg" = ( -/obj/effect/turf_decal/solarpanel, -/obj/machinery/power/solar, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"fh" = ( +/obj/machinery/power/floodlight{ + anchored = 1 }, -/turf/open/floor/plating, -/area/space/nearstation) +/obj/structure/cable{ + icon_state = "0-6" + }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"fk" = ( +/obj/structure/spacevine, +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "fn" = ( /obj/structure/spacevine, /obj/structure/spacevine{ @@ -1381,18 +1300,6 @@ }, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav/singularitylab) -"fq" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "fr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ dir = 1 @@ -1409,16 +1316,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) -"ft" = ( -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt{ - baseturfs = /turf/open/floor/plating/asteroid - }, -/area/ruin/space/has_grav/singularitylab) "fu" = ( /obj/structure/cable{ icon_state = "5-10" @@ -1440,14 +1337,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"fv" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "fw" = ( /obj/effect/turf_decal/industrial/warning/corner, /obj/effect/turf_decal/siding/thinplating{ @@ -1462,6 +1351,15 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) +"fD" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "fF" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ @@ -1495,6 +1393,17 @@ "fK" = ( /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab/civvie) +"fP" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -14; + pixel_y = 4 + }, +/obj/structure/mirror{ + pixel_x = -29 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/civvie) "fQ" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/west, @@ -1526,20 +1435,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/singularitylab/lab) -"fT" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"fU" = ( -/obj/structure/table, -/turf/closed/mineral/random, -/area/ruin/space/has_grav) "fW" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 6 @@ -1679,24 +1574,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"gB" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32; - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "gC" = ( /obj/effect/turf_decal/industrial/warning, /obj/structure/railing/corner{ @@ -1766,31 +1643,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"gM" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/structure/table, -/obj/item/lighter{ - pixel_x = -6; - pixel_y = 3 - }, -/obj/item/clothing/mask/cigarette, -/obj/item/clothing/mask/cigarette{ - pixel_x = 3; - pixel_y = 11 - }, -/obj/item/clothing/mask/cigarette{ - pixel_x = 6; - pixel_y = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "gN" = ( /obj/structure/cable{ icon_state = "4-10" @@ -1812,29 +1664,11 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/carpet/nanoweave/beige, /area/ruin/space/has_grav/singularitylab/cargo) -"gQ" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"gS" = ( -/obj/structure/cable{ - icon_state = "6-9" - }, +"gR" = ( /obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/spacevine{ + pixel_y = 32 }, -/area/ruin/space/has_grav/singularitylab) -"gU" = ( -/obj/structure/spacevine/dense, /obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; @@ -1842,18 +1676,6 @@ name = "grass" }, /area/ruin/space/has_grav/singularitylab/civvie) -"gZ" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/under/rank/rnd/scientist, -/obj/item/clothing/shoes/sneakers/white, -/obj/effect/gibspawner, -/obj/item/gun/energy/lasercannon/unrestricted{ - desc = "An advanced laser cannon, a laser etched inscription in the handle states 'NT-LS-1013'. The casing is made of a lightweight alloy."; - icon_state = "pulse"; - name = "NT-LS-1013" - }, -/turf/open/floor/plating/asteroid, -/area/ruin/space/has_grav/singularitylab) "ha" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 8 @@ -1873,13 +1695,31 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"hh" = ( +"hf" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = -32 +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"hg" = ( +/obj/item/flamethrower/full, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; @@ -1913,13 +1753,6 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/cargo) -"hn" = ( -/obj/machinery/door/poddoor{ - dir = 4; - id = "singlabhanger" - }, -/turf/open/floor/plating/asteroid, -/area/ruin/space/has_grav/singularitylab) "ho" = ( /obj/machinery/door/airlock/highsecurity{ name = "Testing Lab" @@ -1948,53 +1781,37 @@ }, /turf/open/floor/plasteel/tech, /area/ruin/space/has_grav/singularitylab/lab) -"hy" = ( -/obj/structure/cable{ - icon_state = "4-10" - }, -/obj/structure/spacevine, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/space/has_grav/singularitylab/civvie) -"hz" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 +"ht" = ( +/obj/structure/spacevine/dense, +/obj/machinery/power/apc/auto_name/directional/north{ + start_charge = 0 }, -/obj/effect/turf_decal/siding/white{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/vault, -/area/ruin/space/has_grav/singularitylab/cargo) -"hB" = ( -/obj/machinery/door/airlock/security{ - name = "Hangar Control" +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/area/ruin/space/has_grav/singularitylab) +"hu" = ( +/obj/effect/turf_decal/solarpanel, +/obj/machinery/power/solar, +/obj/structure/cable/yellow, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) -"hE" = ( +/turf/open/floor/plating, +/area/space/nearstation) +"hv" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = 32 - }, -/obj/structure/spacevine{ +/obj/structure/spacevine/dense{ pixel_y = 32 }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"hF" = ( -/obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ - pixel_y = 32 + pixel_x = 32 }, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; @@ -2002,6 +1819,52 @@ name = "grass" }, /area/ruin/space/has_grav/singularitylab/civvie) +"hy" = ( +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/structure/spacevine, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/space/has_grav/singularitylab/civvie) +"hz" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/vault, +/area/ruin/space/has_grav/singularitylab/cargo) +"hA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/table/wood/fancy/green, +/obj/structure/fluff/beach_umbrella{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/structure/spacevine, +/obj/machinery/light/floor, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) +"hB" = ( +/obj/machinery/door/airlock/security{ + name = "Hangar Control" + }, +/obj/structure/barricade/wooden/crude, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "hJ" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/turf_decal/corner/transparent/orange{ @@ -2017,6 +1880,17 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"hN" = ( +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ + dir = 8 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "hP" = ( /obj/structure/filingcabinet, /obj/structure/cable{ @@ -2071,18 +1945,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"hX" = ( -/obj/structure/table, -/obj/item/paper{ - default_raw_text = "Whatever happens. Happens." - }, -/obj/item/pen, -/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ - pixel_x = 10; - pixel_y = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "hY" = ( /obj/machinery/door/poddoor{ id = "singlabcargo2" @@ -2114,6 +1976,9 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"id" = ( +/turf/closed/mineral/random, +/area/ruin/space/has_grav) "ie" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2135,6 +2000,11 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"ig" = ( +/obj/machinery/power/emitter/welded, +/obj/structure/cable/yellow, +/turf/open/floor/plating, +/area/space/nearstation) "ih" = ( /obj/structure/table/reinforced, /obj/item/paper{ @@ -2179,38 +2049,36 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"io" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_y = -32 +"ir" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/area/ruin/space/has_grav/singularitylab/civvie) -"ip" = ( -/obj/machinery/power/floodlight{ - anchored = 1 +/turf/open/floor/engine/hull, +/area/space/nearstation) +"iv" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable/yellow{ + icon_state = "4-10" }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) +"iw" = ( /obj/structure/cable{ - icon_state = "0-6" + icon_state = "2-5" }, /obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab/civvie) -"iv" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/structure/cable/yellow{ - icon_state = "4-10" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) "iy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, @@ -2244,21 +2112,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"iC" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/mob/living/simple_animal/hostile/venus_human_trap, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "iD" = ( /obj/effect/turf_decal/siding/white, /obj/effect/turf_decal/siding/white{ @@ -2292,31 +2145,24 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"iJ" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "iK" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"iL" = ( -/obj/machinery/door/airlock/external{ - dir = 4; - name = "Engine Access" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/reactor) "iN" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -2337,13 +2183,29 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"iX" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow{ - icon_state = "0-8" +"iV" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/floor/plating, -/area/space/nearstation) +/area/ruin/space/has_grav/singularitylab) +"iW" = ( +/obj/structure/spacevine{ + pixel_y = 32 + }, +/obj/structure/spacevine, +/obj/machinery/light/directional/north, +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "iZ" = ( /obj/structure/cable, /obj/structure/poddoor_assembly, @@ -2365,32 +2227,20 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"jd" = ( -/obj/effect/turf_decal/siding/yellow, -/obj/machinery/button/door{ - dir = 8; - id = "singlabcargo2"; - name = "Blast Door Control"; - pixel_x = 24 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/cargo) -"jg" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = 32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "jj" = ( /obj/structure/spacevine, /obj/machinery/air_sensor/atmos/nitrogen_tank, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) +"jk" = ( +/obj/machinery/turretid, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = -14 + }, +/turf/open/floor/carpet/nanoweave/beige, +/area/ruin/space/has_grav/singularitylab/cargo) "jl" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -2428,15 +2278,6 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"jr" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "jt" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -2469,6 +2310,19 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"jx" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/structure/chair/stool/bar{ + dir = 8; + name = "picnic stool"; + pixel_x = -10; + pixel_y = 4 + }, +/obj/structure/spacevine, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "jy" = ( /obj/structure/cable{ icon_state = "5-9" @@ -2495,42 +2349,15 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"jB" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_y = 32 +"jE" = ( +/obj/structure/cable/yellow{ + icon_state = "2-9" }, -/obj/structure/spacevine{ - pixel_x = -32 +/obj/effect/turf_decal/techfloor{ + dir = 4 }, -/obj/structure/spacevine/dense{ - pixel_x = -31; - pixel_y = 32 - }, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) -"jC" = ( -/obj/structure/flippedtable{ - dir = 4; - icon_state = "" - }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"jE" = ( -/obj/structure/cable/yellow{ - icon_state = "2-9" - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/effect/turf_decal/techfloor{ - dir = 8 +/obj/effect/turf_decal/techfloor{ + dir = 8 }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) @@ -2551,41 +2378,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"jI" = ( -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 23 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/obj/structure/transit_tube/station/dispenser/flipped{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab/cargo) "jK" = ( /obj/structure/spacevine{ pixel_y = 32 @@ -2636,28 +2428,13 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"jR" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"jT" = ( -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"jS" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Bathroom" }, -/area/ruin/space/has_grav/singularitylab) +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "jV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -2670,29 +2447,47 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"kb" = ( -/obj/effect/turf_decal/atmos/carbon_dioxide, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) -"ke" = ( -/obj/machinery/door/airlock/freezer{ +"jY" = ( +/obj/machinery/door/airlock{ dir = 4; - name = "Freezer" + name = "Private Quarters" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, /turf/open/floor/plasteel/tech, /area/ruin/space/has_grav/singularitylab/civvie) -"ki" = ( -/obj/machinery/power/shieldwallgen/atmos/strong/roundstart{ - id = "singlabhang" +"kb" = ( +/obj/effect/turf_decal/atmos/carbon_dioxide, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) +"kd" = ( +/obj/item/clothing/suit/space/hardsuit/engine, +/obj/item/tank/internals/oxygen, +/obj/effect/decal/remains/human, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = -32 }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "singlabhanger" +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) "kk" = ( /obj/effect/turf_decal/industrial/warning{ @@ -2708,22 +2503,6 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"km" = ( -/obj/machinery/door/airlock/hatch{ - dir = 4; - name = "Server Room" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/singularitylab/lab) "kn" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2734,16 +2513,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"ko" = ( -/obj/structure/flippedtable{ - dir = 1; - icon_state = "" - }, -/obj/structure/spacevine, -/turf/open/floor/plating/dirt{ - baseturfs = /turf/open/floor/plating/asteroid - }, -/area/ruin/space/has_grav/singularitylab) "kp" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/red{ @@ -2755,35 +2524,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"kq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) -"kr" = ( -/obj/structure/cable{ - icon_state = "5-8" - }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "kt" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -2794,17 +2534,47 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"kx" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "singlabfurn" +"ku" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32; + pixel_y = 32 }, -/obj/structure/railing, -/obj/structure/railing{ +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/structure/spacevine/dense{ pixel_y = 32 }, -/turf/open/floor/plating, +/obj/machinery/portable_atmospherics/scrubber/huge, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"kv" = ( +/obj/structure/railing, +/obj/machinery/conveyor_switch{ + id = "singlabfurn"; + pixel_x = -11; + pixel_y = 13 + }, +/obj/machinery/mineral/processing_unit_console{ + machinedir = 9; + pixel_x = -32; + pixel_y = -4 + }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/cargo) +"kw" = ( +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/space/nearstation) "ky" = ( /obj/machinery/shower{ dir = 8 @@ -2850,19 +2620,6 @@ /obj/effect/decal/cleanable/insectguts, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"kI" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor/corner, -/obj/machinery/button/door{ - dir = 1; - id = "singlabcargo1"; - name = "Blast Door Control"; - pixel_y = -25 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "kK" = ( /obj/structure/cable{ icon_state = "4-10" @@ -2880,6 +2637,12 @@ /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/space/has_grav/singularitylab/cargo) +"kM" = ( +/turf/closed/wall{ + desc = "A huge chunk of metal holding the roof of the asteroid at bay"; + name = "structural support" + }, +/area/ruin/space/has_grav/singularitylab/cargo) "kP" = ( /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav) @@ -2951,25 +2714,6 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"lb" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32; - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "lc" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -3015,14 +2759,6 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/cargo) -"lj" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "singlabfurn" - }, -/obj/structure/railing, -/turf/open/floor/plating, -/area/ruin/space/has_grav/singularitylab/cargo) "lk" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -3075,35 +2811,24 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"lu" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/ruin/space/has_grav/singularitylab/civvie) -"lv" = ( -/obj/structure/cable{ - icon_state = "6-10" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock/science{ - dir = 4; - name = "High Energy Applications Research Facility" +"lt" = ( +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" }, +/obj/structure/spacevine, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/lab) +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) +"lu" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/ruin/space/has_grav/singularitylab/civvie) "lw" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ @@ -3121,6 +2846,15 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"lx" = ( +/obj/structure/spacevine, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "ly" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable{ @@ -3153,6 +2887,43 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/reactor) +"lF" = ( +/obj/structure/cable{ + icon_state = "5-9" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/science{ + dir = 4; + name = "High Energy Applications Research Facility" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/lab) +"lH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/table/wood/fancy/purple, +/obj/structure/fluff/beach_umbrella{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/machinery/jukebox/boombox, +/obj/structure/spacevine, +/obj/machinery/light/floor, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "lJ" = ( /obj/structure/transit_tube/crossing/horizontal, /obj/structure/cable{ @@ -3174,6 +2945,18 @@ "lK" = ( /turf/closed/wall/r_wall, /area/ruin/space/has_grav/singularitylab/lab) +"lL" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Assistant" + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "lM" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3204,18 +2987,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) -"lQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/table, -/obj/item/paper, -/obj/item/pen{ - pixel_x = 2; - pixel_y = -3 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ruin/space/has_grav/singularitylab/cargo) "lS" = ( /obj/machinery/conveyor{ id = "singlabcarg" @@ -3226,6 +2997,25 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) +"lU" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 5 + }, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/sol_dry{ + pixel_x = -6; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/sodawater{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "lV" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 10 @@ -3236,18 +3026,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/ruin/space/has_grav/singularitylab/civvie) -"lZ" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "mc" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3274,6 +3052,18 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"mj" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Assistant" + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "mk" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -3330,6 +3120,22 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) +"mu" = ( +/obj/machinery/door/airlock/engineering{ + dir = 8; + name = "Power Control" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/engineering) "mv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3401,6 +3207,23 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) +"mD" = ( +/obj/structure/table, +/obj/machinery/button/shieldwallgen{ + dir = 8; + id = "singlabhang"; + pixel_x = -5 + }, +/obj/machinery/button/door{ + dir = 8; + id = "singlabhangar"; + pixel_x = 8 + }, +/obj/structure/sign/warning/incident{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "mE" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/white/full, @@ -3423,36 +3246,16 @@ /obj/machinery/vending/tool, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) -"mJ" = ( -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/structure/flippedtable, -/obj/effect/turf_decal/siding/thinplating{ - dir = 6 - }, -/obj/structure/spacevine, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 +"mL" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"mK" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "mP" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3473,26 +3276,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"mU" = ( -/obj/structure/table, -/obj/machinery/button/door{ - dir = 8; - id = "singlablast2"; - name = "Testing Chamber Control"; - pixel_x = -4; - pixel_y = 7 - }, -/obj/effect/turf_decal/corner/opaque/white/full, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) -"mW" = ( -/obj/machinery/conveyor_switch{ - id = "singlabcarg"; - pixel_x = 9; - pixel_y = -5 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/singularitylab) "mY" = ( /obj/structure/railing{ dir = 4; @@ -3504,19 +3287,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"na" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -14; - pixel_y = 4 - }, -/obj/effect/turf_decal/corner/opaque/white/full, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Scientist" - }, -/obj/effect/turf_decal/siding/thinplating/light/corner, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "nc" = ( /obj/structure/particle_accelerator/particle_emitter/left{ dir = 4 @@ -3612,40 +3382,28 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"no" = ( -/obj/structure/railing, -/obj/machinery/conveyor_switch{ - id = "singlabfurn"; - pixel_x = -11; - pixel_y = 13 - }, -/obj/machinery/mineral/processing_unit_console{ - machinedir = 9; - pixel_x = -32; - pixel_y = -4 +"nn" = ( +/obj/machinery/conveyor{ + id = "singlabcarg" }, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/cargo) -"np" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_x = 32 +/obj/structure/railing{ + dir = 4 }, -/turf/open/floor/plating/asteroid, -/area/ruin/space/has_grav/singularitylab) -"nq" = ( -/obj/item/clothing/suit/space/hardsuit/engine, -/obj/item/flamethrower/full, -/obj/effect/decal/remains/human, -/obj/structure/spacevine/dense, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/spacevine/dense, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/engineering) +/area/ruin/space/has_grav/singularitylab) +"np" = ( +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/turf/open/floor/plating/asteroid, +/area/ruin/space/has_grav/singularitylab) "nr" = ( /obj/structure/spacevine, /turf/open/floor/plating/asteroid, @@ -3673,25 +3431,6 @@ /obj/structure/closet/crate/bin, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"nw" = ( -/obj/machinery/door/airlock{ - dir = 4; - name = "Private Quarters" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/civvie) "nx" = ( /obj/effect/turf_decal/corner/opaque/beige{ dir = 4 @@ -3699,25 +3438,9 @@ /obj/machinery/light/directional/east, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"nA" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Assistant" - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"nB" = ( +"nz" = ( /obj/structure/cable{ - icon_state = "6-9" - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" + icon_state = "4-9" }, /obj/structure/spacevine/dense, /obj/structure/flora/ausbushes/fullgrass, @@ -3749,90 +3472,25 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab) -"nJ" = ( -/obj/machinery/rnd/server, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/tech/grid, -/area/ruin/space/has_grav/singularitylab/lab) -"nK" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/space/nearstation) -"nM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/mining{ - dir = 4; - name = "Cargo Bay" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/cargo) -"nN" = ( +"nG" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, +/obj/effect/decal/cleanable/blood/old, /obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"nO" = ( -/obj/structure/sign/warning/biohazard{ - pixel_x = 32; - pixel_y = 5 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/machinery/power/shieldwallgen/anchored{ - req_access = null - }, -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "0-10" - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) -"nR" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab/civvie) +"nI" = ( +/turf/open/space/basic, +/area/space/nearstation) +"nJ" = ( +/obj/machinery/rnd/server, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/space/has_grav/singularitylab/lab) "nS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 9 @@ -3840,19 +3498,17 @@ /obj/machinery/computer/cargo/express, /turf/open/floor/carpet/nanoweave/beige, /area/ruin/space/has_grav/singularitylab/cargo) -"nV" = ( +"nT" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/machinery/atmospherics/components/unary/outlet_injector/on, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/area/ruin/space/has_grav/singularitylab) "nW" = ( /obj/structure/spacevine, /obj/structure/closet/crate/bin, @@ -3883,6 +3539,31 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"ob" = ( +/obj/machinery/door/airlock/engineering{ + dir = 8; + name = "Engine Control" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/engineering) "oc" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 5 @@ -3954,13 +3635,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) -"op" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/space/basic, -/area/space/nearstation) "oq" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -3983,21 +3657,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"ou" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/shoes/sneakers/white, -/obj/item/clothing/under/rank/rnd/scientist, -/obj/item/gun/energy/e_gun/iot, -/obj/item/flashlight/seclite, -/obj/effect/gibspawner, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "ov" = ( /obj/effect/turf_decal/siding/white{ dir = 10 @@ -4033,6 +3692,20 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/lab) +"oz" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/open/floor/carpet/nanoweave/beige, +/area/ruin/space/has_grav/singularitylab/cargo) "oA" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/industrial/warning{ @@ -4051,6 +3724,42 @@ /obj/machinery/ore_silo, /turf/open/floor/pod, /area/ruin/space/has_grav/singularitylab/cargo) +"oF" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"oG" = ( +/obj/structure/flippedtable, +/obj/structure/spacevine/dense{ + pixel_x = -31; + pixel_y = 32 + }, +/obj/structure/spacevine, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/space/has_grav/singularitylab) +"oH" = ( +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_x = -32 + }, +/obj/structure/spacevine{ + pixel_y = -32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "oJ" = ( /obj/structure/bed, /obj/item/bedsheet/cosmos, @@ -4074,31 +3783,13 @@ }, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav/singularitylab/civvie) -"oN" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/closet/emcloset, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"oP" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"oR" = ( +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-9" }, -/area/ruin/space/has_grav/singularitylab) +/turf/open/floor/plating, +/area/space/nearstation) "oS" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/industrial/warning/corner{ @@ -4121,23 +3812,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"oV" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/table/wood/fancy/blue, -/obj/structure/fluff/beach_umbrella{ - pixel_x = -5; - pixel_y = 16 - }, -/obj/structure/spacevine, -/obj/machinery/light/floor, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) "oW" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable{ @@ -4145,20 +3819,40 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"oY" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/machinery/recharger{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "oZ" = ( /obj/machinery/camera/xray{ network = list("sl12") }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"pc" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"pd" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32 }, -/obj/item/book/manual/wiki/engineering_singulo_tesla, -/turf/open/space/basic, -/area/space/nearstation) +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "pe" = ( /obj/machinery/light/directional/north, /turf/open/floor/engine, @@ -4225,41 +3919,11 @@ /obj/item/pen, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/reactor) -"pv" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"pw" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "px" = ( /obj/item/tank/internals/oxygen, /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"pB" = ( -/obj/effect/turf_decal/solarpanel, -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/space/nearstation) "pC" = ( /obj/structure/rack, /obj/effect/turf_decal/box, @@ -4269,6 +3933,25 @@ "pE" = ( /turf/closed/wall/r_wall, /area/ruin/space/has_grav/singularitylab/reactor) +"pF" = ( +/obj/machinery/door/airlock/external{ + dir = 4; + name = "Engine Access" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/reactor) "pG" = ( /obj/structure/cable{ icon_state = "5-10" @@ -4299,12 +3982,38 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"pK" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/effect/turf_decal/atmos/oxygen, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 1 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "pL" = ( /obj/machinery/computer/rdconsole/experiment{ dir = 8 }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) +"pM" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/space/basic, +/area/space/nearstation) "pN" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/spacevine, @@ -4340,6 +4049,23 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"pT" = ( +/obj/item/banner/engineering{ + anchored = 1 + }, +/turf/open/floor/engine/hull, +/area/space/nearstation) +"pU" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "singlabfurn" + }, +/obj/structure/railing, +/obj/structure/railing{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/singularitylab/cargo) "pY" = ( /obj/structure/cable{ icon_state = "5-10" @@ -4402,33 +4128,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/lab) -"qg" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/table/wood/fancy/cyan, -/obj/structure/fluff/beach_umbrella{ - pixel_x = -5; - pixel_y = 16 - }, -/obj/structure/spacevine, -/obj/machinery/light/floor, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) -"qj" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/space/basic, -/area/space/nearstation) "qk" = ( /obj/effect/turf_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ @@ -4446,18 +4145,18 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"qm" = ( +"qn" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ - pixel_x = -32 + pixel_y = 32 }, -/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/area/ruin/space/has_grav/singularitylab) "qo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 @@ -4495,6 +4194,18 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/engineering) +"qu" = ( +/obj/structure/spacevine{ + pixel_y = 32 + }, +/obj/structure/spacevine, +/obj/machinery/vending/wardrobe/chef_wardrobe, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "qy" = ( /obj/structure/cable{ icon_state = "5-9" @@ -4517,6 +4228,18 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"qC" = ( +/obj/structure/spacevine{ + pixel_y = 32 + }, +/obj/structure/spacevine, +/obj/machinery/vending/dinnerware, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "qF" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -4524,6 +4247,27 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) +"qG" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "qK" = ( /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) @@ -4539,18 +4283,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"qN" = ( -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "qQ" = ( /obj/structure/transit_tube/curved/flipped, /obj/structure/cable{ @@ -4586,13 +4318,26 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"qU" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"qV" = ( +/obj/structure/table, +/obj/structure/sign/poster/official/moth/hardhats{ + pixel_x = -32 }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) +/obj/structure/spacevine, +/obj/item/assembly/igniter{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/assembly/igniter{ + pixel_x = 2; + pixel_y = -6 + }, +/obj/item/assembly/igniter{ + pixel_x = -7; + pixel_y = 3 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/engineering) "qZ" = ( /obj/effect/turf_decal/techfloor, /obj/effect/turf_decal/techfloor{ @@ -4605,83 +4350,35 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab) -"ra" = ( -/obj/structure/transit_tube/station/dispenser{ - dir = 4 - }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 23 - }, +"rc" = ( +/obj/effect/turf_decal/corner/opaque/white/full, /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/structure/spacevine, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) -"rc" = ( -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 9 +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 9 }, /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"rf" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "rg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab) -"rh" = ( -/obj/item/seeds/kudzu, -/obj/structure/sign/poster/contraband/kudzu{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense, -/obj/structure/closet/firecloset{ - anchored = 1 +"ri" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/turf/open/space/basic, +/area/space/nearstation) "rj" = ( /obj/structure/chair, /turf/open/floor/plasteel, @@ -4693,6 +4390,15 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) +"rn" = ( +/obj/machinery/mineral/processing_unit_console{ + machinedir = 9; + pixel_x = -32; + pixel_y = -4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/cargo) "rp" = ( /obj/structure/cable{ icon_state = "1-2" @@ -4707,13 +4413,13 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"rs" = ( -/obj/effect/decal/cleanable/blood/drip{ - pixel_x = 2; - pixel_y = 2 +"rt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "ru" = ( /obj/effect/turf_decal/box, /obj/item/clothing/shoes/magboots, @@ -4730,17 +4436,41 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"rA" = ( +"rw" = ( /obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/machinery/atmospherics/components/unary/outlet_injector/on, -/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 1; + piping_layer = 4 + }, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab) +"ry" = ( +/obj/structure/sign/warning/biohazard{ + pixel_x = 32; + pixel_y = 5 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/machinery/power/shieldwallgen/anchored{ + req_access = null + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-10" + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "rB" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, @@ -4751,15 +4481,6 @@ /obj/effect/turf_decal/corner/opaque/green/border, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"rE" = ( -/obj/machinery/power/emitter/welded{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/space/nearstation) "rG" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/vending/cola/pwr_game, @@ -4831,25 +4552,6 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"sa" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32; - pixel_y = 32 - }, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "sc" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/industrial/warning, @@ -4858,38 +4560,9 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"sd" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_x = 32 - }, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "se" = ( /turf/open/space/basic, /area/ruin/space/has_grav) -"sf" = ( -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/spacevine, -/obj/machinery/vending/wardrobe/chef_wardrobe, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "sh" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/item/weldingtool/empty, @@ -4897,16 +4570,22 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"sk" = ( -/obj/structure/cable{ - icon_state = "6-10" +"si" = ( +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engine Control" }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -4914,7 +4593,31 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/engineering) +"sl" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/engine/hull, +/area/space/nearstation) +"sp" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, /area/ruin/space/has_grav/singularitylab) "sr" = ( /obj/structure/closet/wall{ @@ -4934,26 +4637,25 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab/civvie) -"sv" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/floor/carpet/nanoweave/purple, -/area/ruin/space/has_grav/singularitylab/lab) -"sw" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 +"st" = ( +/obj/structure/cable{ + icon_state = "1-6" }, +/obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ - pixel_x = 32; - pixel_y = 32 + pixel_x = -32 }, -/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab) +"sv" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/carpet/nanoweave/purple, +/area/ruin/space/has_grav/singularitylab/lab) "sA" = ( /obj/machinery/conveyor{ id = "singlabfurn" @@ -4970,15 +4672,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab/engineering) -"sF" = ( -/obj/structure/spacevine, -/obj/structure/flora/ausbushes/stalkybush, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "sG" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -4994,20 +4687,6 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"sI" = ( -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_x = -32 - }, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "sJ" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/purple{ @@ -5037,18 +4716,6 @@ /obj/effect/turf_decal/techfloor, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"sU" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "sV" = ( /obj/structure/cable{ icon_state = "4-8" @@ -5061,6 +4728,15 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/cargo) +"sW" = ( +/obj/structure/spacevine/dense, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "sX" = ( /obj/machinery/door/poddoor{ id = "singlabcargo1" @@ -5068,9 +4744,31 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab) +"sZ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/mining{ + dir = 4; + name = "Cargo Bay" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, /turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab) +/area/ruin/space/has_grav/singularitylab/cargo) "tb" = ( /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ @@ -5093,6 +4791,27 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"tk" = ( +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"tl" = ( +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/space/has_grav/singularitylab) "tq" = ( /turf/template_noop, /area/template_noop) @@ -5103,6 +4822,19 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) +"ts" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "tv" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine{ @@ -5121,17 +4853,6 @@ "ty" = ( /turf/closed/wall, /area/ruin/space/has_grav/singularitylab/civvie) -"tz" = ( -/obj/structure/cable{ - icon_state = "5-9" - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/effect/turf_decal/siding/thinplating, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "tA" = ( /obj/structure/cable{ icon_state = "6-8" @@ -5142,21 +4863,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"tB" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "tE" = ( /obj/structure/spacevine, /obj/structure/spacevine{ @@ -5173,13 +4879,20 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"tF" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow{ - icon_state = "0-9" +"tI" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32 }, -/turf/open/floor/plating, -/area/space/nearstation) +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "tL" = ( /obj/structure/cable{ icon_state = "5-9" @@ -5203,15 +4916,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"tQ" = ( -/obj/structure/table, -/obj/item/paper, -/obj/item/pen{ - pixel_x = -4; - pixel_y = 2 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ruin/space/has_grav/singularitylab/cargo) "tR" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable{ @@ -5219,6 +4923,14 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"tV" = ( +/obj/structure/table, +/obj/item/clipboard{ + pixel_x = 9; + pixel_y = 7 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/engineering) "ua" = ( /obj/structure/spacevine, /turf/open/floor/plating/dirt{ @@ -5229,13 +4941,6 @@ /obj/machinery/rnd/experimentor, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) -"uk" = ( -/obj/machinery/door/poddoor{ - dir = 4; - id = "singlabhanger" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) "ul" = ( /obj/structure/sign/warning/testchamber{ pixel_y = 32 @@ -5275,19 +4980,24 @@ "un" = ( /turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/singularitylab/civvie) -"ur" = ( +"up" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = 32 +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32; + pixel_y = -32 }, -/mob/living/simple_animal/hostile/venus_human_trap, /obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/lavendergrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/area/ruin/space/has_grav/singularitylab) "us" = ( /obj/structure/transit_tube, /obj/structure/cable{ @@ -5375,6 +5085,24 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"uI" = ( +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/structure/flippedtable, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/obj/structure/spacevine, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "uJ" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/red{ @@ -5416,21 +5144,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"uQ" = ( -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32; - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) "uS" = ( /obj/effect/turf_decal/corner/transparent/orange{ dir = 1 @@ -5438,6 +5151,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) +"uU" = ( +/turf/open/floor/engine/hull, +/area/space/nearstation) "uV" = ( /obj/structure/tank_dispenser/plasma, /turf/open/floor/plasteel, @@ -5449,44 +5165,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"uX" = ( -/obj/effect/turf_decal/box, -/obj/machinery/light/directional/north, -/obj/item/gun/energy/lasercannon/unrestricted{ - desc = "An advanced laser cannon, a laser etched inscription in the handle states 'NT-LS-1013'. The casing is made of a lightweight alloy."; - icon_state = "pulse"; - name = "NT-LS-1013" - }, -/obj/item/gun/energy/laser/iot, -/obj/item/gun/energy/laser/iot{ - dry_fire_sound = 'sound/items/ding.ogg'; - dry_fire_text = "ding" - }, -/obj/structure/safe{ - name = "Prototype Storage" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab/lab) -"uY" = ( -/obj/item/flamethrower/full, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "uZ" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -5519,17 +5197,16 @@ /obj/structure/cable, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab/engineering) -"ve" = ( -/obj/structure/cable{ - icon_state = "6-9" +"vd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/area/ruin/space/has_grav/singularitylab) +/turf/open/space/basic, +/area/space/nearstation) "vg" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -5541,6 +5218,32 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"vh" = ( +/obj/machinery/door/airlock/freezer{ + dir = 4; + name = "Freezer" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/civvie) +"vi" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -32; + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "vk" = ( /obj/effect/turf_decal/techfloor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ @@ -5564,6 +5267,25 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/cargo) +"vr" = ( +/obj/machinery/door/airlock/security{ + dir = 8; + name = "Front Office" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/lab) "vu" = ( /obj/structure/cable{ icon_state = "1-10" @@ -5593,25 +5315,31 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"vy" = ( -/obj/machinery/door/airlock/security{ - dir = 8; - name = "Front Office" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 +"vz" = ( +/obj/structure/spacevine, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/area/ruin/space/has_grav/singularitylab/civvie) +"vD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/lab) +/obj/structure/table/wood/fancy/cyan, +/obj/structure/fluff/beach_umbrella{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/structure/spacevine, +/obj/machinery/light/floor, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "vE" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5632,6 +5360,18 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"vL" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "vO" = ( /obj/effect/turf_decal/siding/yellow/corner{ dir = 1 @@ -5639,18 +5379,6 @@ /obj/effect/turf_decal/corner/transparent/orange/three_quarters, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"vT" = ( -/obj/structure/flippedtable{ - dir = 4; - icon_state = "" - }, -/obj/effect/turf_decal/siding/thinplating, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/spacevine, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "vU" = ( /obj/effect/turf_decal/siding/yellow/corner{ dir = 4 @@ -5660,22 +5388,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"vV" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32; - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "vW" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -5686,16 +5398,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/vault, /area/ruin/space/has_grav/singularitylab/cargo) -"vX" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/flippedtable{ - dir = 2; - icon_state = "" - }, -/turf/open/floor/carpet/nanoweave/purple, -/area/ruin/space/has_grav/singularitylab/lab) "vY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 5 @@ -5703,18 +5405,6 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"vZ" = ( -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/spacevine, -/obj/machinery/vending/dinnerware, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "wa" = ( /obj/structure/spacevine, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ @@ -5804,43 +5494,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"wu" = ( -/obj/machinery/door/airlock/external{ - dir = 4; - name = "Engine Access" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/reactor) -"wv" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"ww" = ( -/obj/machinery/field/generator/anchored, -/turf/open/floor/plating, -/area/space/nearstation) "wx" = ( /obj/structure/transit_tube/curved{ dir = 1 @@ -5883,22 +5536,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"wH" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "wM" = ( /obj/structure/spacevine, /mob/living/simple_animal/hostile/venus_human_trap, @@ -5916,20 +5553,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) -"wP" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "wR" = ( /obj/structure/cable{ icon_state = "0-4" @@ -5940,16 +5563,17 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"wU" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "4-8" +"wV" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Assistant" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/space/basic, -/area/space/nearstation) +/area/ruin/space/has_grav/singularitylab/civvie) "wW" = ( /obj/structure/railing{ dir = 4; @@ -5982,19 +5606,6 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"xa" = ( -/obj/effect/turf_decal/siding/wood/end{ - dir = 4 - }, -/obj/structure/chair/stool/bar{ - dir = 8; - name = "picnic stool"; - pixel_x = -10; - pixel_y = 4 - }, -/obj/structure/spacevine, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) "xe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -6038,45 +5649,39 @@ /obj/item/paper_bin, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"xm" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/space/basic, -/area/space/nearstation) -"xn" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"xo" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/sparsegrass, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"xr" = ( -/obj/machinery/door/airlock{ - dir = 4; - name = "Bathroom" - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "xu" = ( /obj/effect/turf_decal/corner/transparent/orange{ dir = 5 }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) +"xv" = ( +/obj/structure/transit_tube/station/dispenser{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 23 + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/spacevine, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) "xw" = ( /obj/structure/cable{ icon_state = "4-8" @@ -6161,20 +5766,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"xF" = ( -/obj/machinery/power/shieldwallgen/atmos/strong/roundstart{ - dir = 1; - id = "singlabhang" - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "singlabhanger" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab) "xG" = ( /obj/effect/turf_decal/siding/thinplating/end, /turf/open/floor/plasteel, @@ -6216,16 +5807,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"xM" = ( -/obj/structure/spacevine/dense, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "xO" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -6234,27 +5815,8 @@ /obj/structure/cable{ icon_state = "1-10" }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) -"xR" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32; - pixel_y = 32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "xS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -6304,6 +5866,26 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) +"ya" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 9 + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "yc" = ( /obj/structure/chair{ dir = 4 @@ -6353,27 +5935,6 @@ "yi" = ( /turf/closed/wall/r_wall, /area/ruin/space/has_grav/singularitylab/engineering) -"yk" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) -"ym" = ( -/obj/machinery/turretid, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = -14 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ruin/space/has_grav/singularitylab/cargo) "yn" = ( /obj/machinery/light/directional/south, /turf/open/floor/engine/hull/reinforced, @@ -6388,20 +5949,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"yp" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "yr" = ( /obj/structure/railing{ dir = 4; @@ -6441,6 +5988,25 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"yw" = ( +/obj/machinery/door/airlock{ + dir = 8; + name = "Private Quarters" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/civvie) "yy" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plasteel, @@ -6494,6 +6060,24 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"yI" = ( +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "To Environment" + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "yL" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable{ @@ -6538,16 +6122,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"yW" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/space/basic, -/area/space/nearstation) "yZ" = ( /obj/structure/cable{ icon_state = "6-9" @@ -6563,22 +6137,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"za" = ( -/obj/item/pickaxe/rusted, -/obj/structure/spacevine, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "zb" = ( /obj/structure/sign/poster/retro/science{ pixel_y = -32 @@ -6612,6 +6170,10 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab/lab) +"zf" = ( +/obj/item/stack/cable_coil/cut/yellow, +/turf/open/space/basic, +/area/space/nearstation) "zg" = ( /obj/structure/transit_tube/curved{ dir = 4 @@ -6654,18 +6216,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/carpet/nanoweave/purple, /area/ruin/space/has_grav/singularitylab/lab) -"zl" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "zm" = ( /obj/structure/sign/poster/official/high_class_martini{ pixel_x = -32 @@ -6692,6 +6242,17 @@ /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) +"zs" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/button/door{ + dir = 8; + id = "singlabcargo2"; + name = "Blast Door Control"; + pixel_x = 24 + }, +/obj/structure/spacevine, +/turf/open/floor/plating, +/area/ruin/space/has_grav/singularitylab) "zt" = ( /obj/machinery/conveyor{ id = "singlabcarg" @@ -6717,6 +6278,13 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/reactor) +"zv" = ( +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-10" + }, +/turf/open/floor/plating, +/area/space/nearstation) "zw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, @@ -6745,38 +6313,15 @@ /obj/effect/decal/cleanable/blood/tracks, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"zz" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Assistant" - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"zB" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32; - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, -/obj/structure/flora/ausbushes/lavendergrass, +"zA" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/spacevine, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab) +/area/ruin/space/has_grav/singularitylab/civvie) "zC" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/white/full, @@ -6843,6 +6388,21 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"zK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"zL" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "zM" = ( /obj/structure/cable{ icon_state = "6-10" @@ -6863,9 +6423,6 @@ /obj/effect/turf_decal/corner/transparent/orange/border, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"zP" = ( -/turf/open/floor/engine/hull, -/area/space/nearstation) "zR" = ( /obj/structure/spacevine/dense, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -6912,20 +6469,6 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/on, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav) -"Ae" = ( -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "Ah" = ( /obj/structure/table, /obj/structure/sign/poster/contraband/power{ @@ -6980,6 +6523,26 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"Ar" = ( +/obj/effect/turf_decal/solarpanel, +/obj/machinery/power/solar, +/obj/structure/cable/yellow, +/turf/open/floor/plating, +/area/space/nearstation) +"As" = ( +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "At" = ( /obj/structure/cable{ icon_state = "1-2" @@ -7015,13 +6578,6 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) -"Ay" = ( -/obj/effect/decal/cleanable/blood/drip{ - pixel_x = 5; - pixel_y = 3 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "AA" = ( /obj/structure/cable{ icon_state = "0-8" @@ -7035,6 +6591,22 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) +"AB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "AC" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -7046,13 +6618,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"AD" = ( -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "AE" = ( /obj/structure/chair{ dir = 1 @@ -7087,20 +6652,11 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"AL" = ( -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) -"AM" = ( -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) +"AL" = ( +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "AN" = ( /obj/structure/closet/emcloset{ anchored = 1 @@ -7134,12 +6690,36 @@ }, /turf/closed/wall, /area/ruin/space/has_grav/singularitylab) +"AS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "AT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, /turf/closed/wall, /area/ruin/space/has_grav/singularitylab) +"AV" = ( +/obj/structure/table, +/obj/machinery/button/door{ + dir = 8; + id = "singlablast2"; + name = "Testing Chamber Control"; + pixel_x = -4; + pixel_y = 7 + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "AW" = ( /obj/structure/cable{ icon_state = "0-2" @@ -7162,6 +6742,22 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) +"Ba" = ( +/obj/item/pickaxe/rusted, +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_y = -32 + }, +/obj/structure/spacevine{ + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "Bb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 5 @@ -7174,16 +6770,6 @@ "Bc" = ( /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav/singularitylab/civvie) -"Be" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "Bf" = ( /obj/machinery/conveyor{ id = "singlabcarg" @@ -7213,6 +6799,18 @@ /obj/structure/spacevine, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) +"Bi" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "Bk" = ( /obj/machinery/door/airlock/highsecurity{ name = "Secure Weapon Storage" @@ -7241,56 +6839,46 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"Bp" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 +"Bq" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible/layer4{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "To Environment" +/obj/structure/cable/yellow{ + icon_state = "2-5" }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/cable/yellow{ + icon_state = "1-6" }, -/area/ruin/space/has_grav/singularitylab) +/turf/open/space/basic, +/area/space/nearstation) "Bw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"Bz" = ( -/obj/structure/spacevine/dense, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) +"Bx" = ( +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow, +/turf/open/floor/plating, +/area/space/nearstation) "BB" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"BH" = ( -/obj/structure/chair/office{ - dir = 8; - name = "tinkering chair" +"BE" = ( +/obj/structure/cable{ + icon_state = "6-10" }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) -"BI" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -7298,13 +6886,23 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating, -/obj/effect/decal/cleanable/blood{ - dir = 4; - icon_state = "gib3" +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) +"BG" = ( +/obj/machinery/field/generator/anchored, +/turf/open/floor/plating, +/area/space/nearstation) +"BH" = ( +/obj/structure/chair/office{ + dir = 8; + name = "tinkering chair" + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 }, /turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/cargo) +/area/ruin/space/has_grav/singularitylab/lab) "BK" = ( /obj/structure/window/reinforced{ dir = 1 @@ -7322,13 +6920,6 @@ /obj/item/pickaxe/rusted, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav/singularitylab/civvie) -"BP" = ( -/obj/machinery/door/poddoor{ - dir = 4; - id = "singlablas1" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab/lab) "BR" = ( /obj/structure/cable{ icon_state = "1-2" @@ -7538,23 +7129,6 @@ /obj/effect/turf_decal/siding/thinplating/corner, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"Cu" = ( -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"CB" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/space/basic, -/area/space/nearstation) "CC" = ( /obj/structure/transit_tube/curved/flipped, /obj/structure/cable{ @@ -7572,15 +7146,6 @@ /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"CE" = ( -/obj/structure/flippedtable, -/obj/structure/spacevine/dense{ - pixel_x = -31; - pixel_y = 32 - }, -/obj/structure/spacevine, -/turf/open/floor/plasteel/tech/techmaint, -/area/ruin/space/has_grav/singularitylab) "CF" = ( /obj/structure/lattice/catwalk, /obj/machinery/airalarm/directional/east, @@ -7599,48 +7164,17 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"CK" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-5" - }, -/obj/structure/cable/yellow{ - icon_state = "1-6" - }, -/turf/open/space/basic, -/area/space/nearstation) -"CL" = ( -/obj/structure/transit_tube/station/dispenser{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 23 - }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/spacevine, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 +"CJ" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) "CN" = ( /obj/effect/turf_decal/siding/yellow{ @@ -7655,23 +7189,31 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"CR" = ( -/obj/structure/cable{ - icon_state = "1-10" - }, -/obj/structure/spacevine, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +"CP" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/shoes/sneakers/white, +/obj/item/clothing/under/rank/rnd/scientist, +/obj/item/gun/energy/e_gun/iot, +/obj/item/flashlight/seclite, +/obj/effect/gibspawner, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/area/ruin/space/has_grav/singularitylab) +"CT" = ( +/obj/effect/turf_decal/siding/yellow, +/obj/machinery/button/door{ + dir = 8; + id = "singlabcargo2"; + name = "Blast Door Control"; + pixel_x = 24 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/cargo) "CU" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine{ @@ -7755,42 +7297,32 @@ dir = 4 }, /turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) -"Dh" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/space/basic, -/area/space/nearstation) -"Di" = ( -/obj/structure/spacevine, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/engineering) -"Dl" = ( -/obj/structure/cable{ - icon_state = "4-9" - }, +/area/ruin/space/has_grav/singularitylab) +"Dg" = ( /obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -31; + pixel_y = 32 + }, /obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab) -"Dn" = ( -/obj/structure/flippedtable{ - dir = 1; - icon_state = "" - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, +"Di" = ( +/obj/structure/spacevine, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/engineering) +"Dj" = ( /obj/structure/spacevine/dense, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; @@ -7837,6 +7369,14 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"Du" = ( +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/engineering) "Dw" = ( /obj/structure/particle_accelerator/particle_emitter/center{ dir = 4 @@ -7856,25 +7396,18 @@ /obj/effect/turf_decal/box, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) +"Dy" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "singlablas2" + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab/lab) "Dz" = ( /obj/structure/reagent_dispensers/beerkeg, /obj/effect/turf_decal/box, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/space/has_grav/singularitylab/cargo) -"DB" = ( -/obj/structure/cable{ - icon_state = "2-5" - }, -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "DC" = ( /obj/structure/transit_tube, /obj/structure/plasticflaps/opaque{ @@ -7954,25 +7487,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"DL" = ( -/obj/structure/cable{ - icon_state = "5-9" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/airlock/science{ - dir = 4; - name = "High Energy Applications Research Facility" - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/lab) "DM" = ( /obj/machinery/conveyor{ id = "singlabcarg" @@ -8016,6 +7530,31 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) +"DZ" = ( +/obj/structure/cable{ + icon_state = "6-10" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/airlock/science{ + dir = 4; + name = "High Energy Applications Research Facility" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/lab) "Ed" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -8036,6 +7575,14 @@ /obj/structure/spacevine, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab/civvie) +"Eh" = ( +/obj/effect/turf_decal/solarpanel, +/obj/machinery/power/tracker, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/space/nearstation) "Ei" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8107,9 +7654,11 @@ /obj/machinery/air_sensor/atmos/oxygen_tank, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"Ew" = ( +"Eu" = ( /obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; @@ -8163,18 +7712,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"EF" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "EG" = ( /obj/structure/transit_tube, /obj/structure/cable{ @@ -8232,18 +7769,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"EO" = ( -/obj/structure/table, -/obj/machinery/button/door{ - dir = 8; - id = "singlablast1"; - name = "Testing Chamber Control"; - pixel_x = -4; - pixel_y = 7 - }, -/obj/effect/turf_decal/corner/opaque/white/full, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "EP" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -8301,22 +7826,6 @@ /obj/effect/turf_decal/corner/transparent/orange, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"EY" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32; - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "EZ" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/white/full, @@ -8474,10 +7983,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"FA" = ( -/obj/item/wrench, -/turf/open/space/basic, -/area/space/nearstation) "FB" = ( /obj/machinery/door/airlock/highsecurity{ name = "Testing Lab" @@ -8503,6 +8008,13 @@ }, /turf/open/floor/plasteel/tech, /area/ruin/space/has_grav/singularitylab/lab) +"FD" = ( +/obj/structure/sign/poster/official/moth/boh{ + pixel_x = -32 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "FE" = ( /obj/structure/window/plasma/reinforced{ dir = 1 @@ -8513,17 +8025,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"FF" = ( -/obj/structure/cable{ - icon_state = "4-9" - }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/structure/spacevine, -/turf/open/floor/plasteel/tech/techmaint, -/area/ruin/space/has_grav/singularitylab) "FH" = ( /obj/effect/turf_decal/box, /obj/item/clothing/shoes/magboots, @@ -8531,12 +8032,13 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab/engineering) -"FI" = ( -/turf/closed/wall{ - desc = "A huge chunk of metal holding the roof of the asteroid at bay"; - name = "structural support" +"FJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/area/ruin/space/has_grav/singularitylab) +/turf/open/space/basic, +/area/space/nearstation) "FL" = ( /obj/effect/turf_decal/techfloor{ dir = 1 @@ -8598,6 +8100,18 @@ }, /turf/open/floor/wood, /area/ruin/space/has_grav/singularitylab/civvie) +"FV" = ( +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "FW" = ( /obj/structure/cable/yellow{ icon_state = "4-9" @@ -8618,20 +8132,6 @@ /obj/structure/railing, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/cargo) -"Ge" = ( -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/obj/structure/spacevine, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "Gf" = ( /obj/structure/table, /turf/open/floor/wood, @@ -8646,79 +8146,69 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab) -"Gm" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 5 - }, -/obj/structure/spacevine, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/civvie) -"Gn" = ( +"Gh" = ( /obj/structure/spacevine, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/space/has_grav/singularitylab/civvie) -"Gq" = ( -/obj/machinery/the_singularitygen{ - anchored = 1 - }, -/turf/open/floor/plating, -/area/space/nearstation) -"Gr" = ( -/obj/structure/cable{ - icon_state = "1-10" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/cargo) -"Gs" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32; - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ +/obj/structure/spacevine{ pixel_x = 32 }, -/obj/structure/spacevine/dense{ - pixel_y = 32 +/obj/structure/spacevine{ + pixel_y = -32 + }, +/obj/structure/spacevine{ + pixel_y = -32 }, -/obj/machinery/portable_atmospherics/scrubber/huge, -/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab) -"Gv" = ( -/obj/structure/cable{ +/area/ruin/space/has_grav/singularitylab/civvie) +"Gi" = ( +/obj/machinery/door/airlock/external{ + dir = 4; + name = "Engine Access" + }, +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 9 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/reactor) +"Gm" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 }, -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" +/obj/structure/spacevine, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/civvie) +"Gn" = ( +/obj/structure/spacevine, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/space/has_grav/singularitylab/civvie) +"Gr" = ( +/obj/structure/cable{ + icon_state = "1-10" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/effect/turf_decal/siding/yellow{ dir = 4 }, /turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/area/ruin/space/has_grav/singularitylab/cargo) "Gw" = ( /obj/machinery/door/airlock/public/glass{ name = "Kitchen" @@ -8732,16 +8222,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"GA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - dir = 4; - name = "Interior Mine" - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/cargo) "GC" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -8796,20 +8276,33 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"GH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/space/basic, -/area/space/nearstation) "GJ" = ( /obj/effect/decal/cleanable/insectguts, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"GK" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "GL" = ( /obj/machinery/particle_accelerator/control_box, /turf/open/floor/engine, @@ -8840,6 +8333,13 @@ /obj/effect/turf_decal/box, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) +"GP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/space/basic, +/area/space/nearstation) "GQ" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -8872,18 +8372,6 @@ /obj/structure/spacevine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"GV" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = 32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "GW" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -8921,6 +8409,27 @@ /obj/effect/turf_decal/box, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) +"Hc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/engine/hull, +/area/space/nearstation) +"He" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "Hg" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 4 @@ -8937,6 +8446,15 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/reactor) +"Hi" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "Hj" = ( /obj/machinery/conveyor{ id = "singlabcarg" @@ -8952,6 +8470,25 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab/cargo) +"Hk" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "singlabhanger" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/space/has_grav/singularitylab) +"Hm" = ( +/obj/structure/table, +/obj/machinery/button/door{ + dir = 8; + id = "singlablast1"; + name = "Testing Chamber Control"; + pixel_x = -4; + pixel_y = 7 + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "Hn" = ( /obj/effect/turf_decal/siding/yellow/corner{ dir = 8 @@ -8964,37 +8501,26 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"Hx" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/space/has_grav/singularitylab/civvie) -"Hy" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"Hz" = ( +"Hr" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ - pixel_y = 32 + pixel_x = -32 }, /obj/structure/spacevine/dense{ - pixel_x = -31; - pixel_y = 32 + pixel_x = -32; + pixel_y = -32 }, +/obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, /area/ruin/space/has_grav/singularitylab) +"Hx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/space/has_grav/singularitylab/civvie) "HA" = ( /obj/structure/cable{ icon_state = "2-10" @@ -9004,16 +8530,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"HC" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/space/basic, -/area/space/nearstation) "HD" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 10 @@ -9023,6 +8539,13 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"HE" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "HF" = ( /obj/structure/chair/office, /obj/effect/mob_spawn/human/corpse/charredskeleton, @@ -9042,6 +8565,22 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"HK" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "HL" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/spacevine/dense, @@ -9053,6 +8592,28 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"HN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/mining{ + dir = 4; + name = "Cargo Bay" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/cargo) "HO" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -9080,17 +8641,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/singularitylab/lab) -"HT" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = 32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "HU" = ( /obj/structure/fireaxecabinet{ pixel_y = 32 @@ -9101,17 +8651,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/engineering) -"HV" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 6 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "HW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 5 @@ -9121,6 +8660,22 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"HX" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "HY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 5 @@ -9132,23 +8687,11 @@ /area/ruin/space/has_grav/singularitylab/cargo) "Ia" = ( /obj/machinery/porta_turret{ - stun_projectile = "/obj/projectile/beam/hitscan/disabler" - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ruin/space/has_grav/singularitylab/cargo) -"Ib" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" + stun_projectile = "/obj/projectile/beam/hitscan/disabler" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/space/has_grav/singularitylab/cargo) "Ic" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 1 @@ -9158,6 +8701,18 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"Id" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "If" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, @@ -9175,19 +8730,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Ih" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/space/basic, -/area/space/nearstation) -"Ii" = ( -/obj/machinery/door/airlock{ - name = "Private Quarters" - }, -/turf/closed/mineral/random, -/area/ruin/space/has_grav) "Ij" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 10 @@ -9234,12 +8776,18 @@ /obj/machinery/power/shieldwallgen/atmos, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"Is" = ( -/obj/effect/turf_decal/solarpanel, -/obj/machinery/power/solar, -/obj/structure/cable/yellow, -/turf/open/floor/plating, -/area/space/nearstation) +"Iq" = ( +/obj/structure/flippedtable{ + dir = 4; + icon_state = "" + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/spacevine, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "Iu" = ( /obj/structure/transit_tube/diagonal{ dir = 4 @@ -9315,16 +8863,9 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"IM" = ( -/obj/effect/turf_decal/solarpanel, -/obj/machinery/power/solar, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/open/floor/plating, +"IK" = ( +/obj/item/wrench, +/turf/open/space/basic, /area/space/nearstation) "IO" = ( /obj/structure/railing{ @@ -9363,11 +8904,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/engine/hull/reinforced, /area/ruin/space/has_grav/singularitylab/reactor) -"IV" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow, -/turf/open/floor/plating, -/area/space/nearstation) "IW" = ( /obj/structure/cable{ icon_state = "4-8" @@ -9473,6 +9009,28 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel/tech, /area/ruin/space/has_grav/singularitylab/engineering) +"Jr" = ( +/obj/item/gun/energy/ionrifle/carbine{ + desc = "The Ion Projector is contained within a sleek metal case. Engraved on the handle are the letters S.H. The stock is warm to the touch"; + dry_fire_text = "RECHARGING"; + name = "ion projector"; + pixel_x = 2; + pixel_y = 5; + selfcharge = 1 + }, +/obj/item/screwdriver{ + pixel_y = -6 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 9 + }, +/obj/structure/sign/poster/official/ion_carbine{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "Ju" = ( /obj/structure/chair/office{ dir = 8 @@ -9546,6 +9104,40 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) +"JJ" = ( +/obj/item/gun/energy/e_gun/smg{ + dry_fire_sound = 'sound/items/ding.ogg'; + dry_fire_text = "ding"; + name = "\improper Modified E-TAR SMG"; + pixel_x = 5; + pixel_y = 6 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/item/stack/telecrystal{ + pixel_x = -9; + pixel_y = -4 + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 10 + }, +/obj/structure/sign/poster/official/mini_energy_gun{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) +"JK" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/under/rank/rnd/scientist, +/obj/item/clothing/shoes/sneakers/white, +/obj/effect/gibspawner, +/obj/item/gun/energy/lasercannon/unrestricted{ + desc = "An advanced laser cannon, a laser etched inscription in the handle states 'NT-LS-1013'. The casing is made of a lightweight alloy."; + icon_state = "pulse"; + name = "NT-LS-1013" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/space/has_grav/singularitylab) "JL" = ( /obj/structure/spacevine, /obj/effect/decal/cleanable/insectguts, @@ -9569,6 +9161,13 @@ /obj/item/stack/sheet/glass/fifty, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/space/has_grav/singularitylab/cargo) +"JO" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "singlablas1" + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab/lab) "JP" = ( /obj/structure/closet/emcloset{ anchored = 1 @@ -9581,17 +9180,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"JQ" = ( -/obj/structure/sign/poster/retro/science{ - pixel_y = 32 - }, -/obj/structure/chair/office{ - desc = "Technologically enhanced for the optimal research position."; - dir = 8; - name = "science chair" - }, -/turf/open/floor/carpet/nanoweave/purple, -/area/ruin/space/has_grav/singularitylab/lab) "JS" = ( /obj/structure/sign/warning/radiation{ pixel_x = 32 @@ -9603,17 +9191,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"JT" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Assistant" - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "JU" = ( /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) @@ -9663,23 +9240,100 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab) -"Kc" = ( -/obj/structure/spacevine, -/turf/closed/wall{ - desc = "A huge chunk of metal holding the roof of the asteroid at bay"; - name = "structural support" +"Kb" = ( +/obj/structure/chair/stool/bar{ + dir = 4; + name = "picnic stool"; + pixel_x = 9; + pixel_y = 7 }, -/area/ruin/space/has_grav/singularitylab) +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/structure/spacevine, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "Ke" = ( /turf/closed/indestructible/rock{ base_icon_state = "smoothrocks" }, /area/ruin/space/has_grav) +"Kf" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"Kg" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Kh" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -31; + pixel_y = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Ki" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/box, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/space/has_grav/singularitylab/cargo) +"Kj" = ( +/obj/item/seeds/kudzu, +/obj/structure/sign/poster/contraband/kudzu{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense, +/obj/structure/closet/firecloset{ + anchored = 1 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Kk" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Kn" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 4 @@ -9700,28 +9354,14 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"Kr" = ( -/obj/item/gun/energy/ionrifle/carbine{ - desc = "The Ion Projector is contained within a sleek metal case. Engraved on the handle are the letters S.H. The stock is warm to the touch"; - dry_fire_text = "RECHARGING"; - name = "ion projector"; - pixel_x = 2; - pixel_y = 5; - selfcharge = 1 - }, -/obj/item/screwdriver{ - pixel_y = -6 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 9 - }, -/obj/structure/sign/poster/official/ion_carbine{ - pixel_x = -32 +"Kq" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "singlabfurn" }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/obj/structure/railing, +/turf/open/floor/plating, +/area/ruin/space/has_grav/singularitylab/cargo) "Ks" = ( /obj/structure/cable{ icon_state = "6-8" @@ -9764,26 +9404,16 @@ /obj/structure/window/plasma/reinforced{ dir = 1 }, -/obj/structure/spacevine, -/obj/machinery/computer/atmos_control/tank/nitrogen_tank, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) -"Ky" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = -32 - }, -/obj/structure/spacevine{ - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/spacevine, +/obj/machinery/computer/atmos_control/tank/nitrogen_tank, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) +"KB" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/turf/open/floor/engine/hull, +/area/space/nearstation) "KC" = ( /obj/machinery/hydroponics/constructable, /obj/structure/spacevine, @@ -9791,6 +9421,13 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) +"KE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/space/nearstation) "KF" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -9811,6 +9448,27 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"KI" = ( +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/item/flashlight/seclite, +/turf/open/floor/plating/asteroid, +/area/ruin/space/has_grav/singularitylab) +"KK" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -14; + pixel_y = 4 + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Scientist" + }, +/obj/effect/turf_decal/siding/thinplating/light/corner, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "KL" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/plasteel/tech/techmaint, @@ -9862,6 +9520,17 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"KU" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "KW" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -9884,6 +9553,21 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"KY" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "KZ" = ( /obj/structure/cable{ icon_state = "2-5" @@ -9902,6 +9586,17 @@ dir = 1 }, /area/ruin/space/has_grav/singularitylab) +"Ld" = ( +/obj/structure/flippedtable{ + dir = 1; + icon_state = "" + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/space/has_grav/singularitylab) "Le" = ( /obj/structure/cable{ icon_state = "6-9" @@ -9922,17 +9617,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"Ln" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"Ll" = ( +/obj/machinery/conveyor_switch{ + id = "singlabcarg"; + pixel_x = 9; + pixel_y = -5 }, -/area/ruin/space/has_grav/singularitylab/civvie) +/turf/open/floor/plating, +/area/ruin/space/has_grav/singularitylab) "Lq" = ( /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/engineering) @@ -10011,6 +9703,17 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) +"LH" = ( +/obj/structure/cable{ + icon_state = "4-9" + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/structure/spacevine, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/space/has_grav/singularitylab) "LM" = ( /obj/structure/cable{ icon_state = "0-4" @@ -10053,6 +9756,12 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab) +"LQ" = ( +/turf/closed/wall{ + desc = "A huge chunk of metal holding the roof of the asteroid at bay"; + name = "structural support" + }, +/area/ruin/space/has_grav/singularitylab/hangar) "LY" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 6 @@ -10146,20 +9855,39 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"Mk" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"Mm" = ( +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 1 }, -/area/ruin/space/has_grav/singularitylab/civvie) +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "Mo" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, /turf/open/floor/wood, /area/ruin/space/has_grav/singularitylab/civvie) +"Mq" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + name = "picnic stool"; + pixel_x = -10; + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/structure/spacevine, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "Ms" = ( /obj/structure/spacevine{ pixel_y = -32 @@ -10185,15 +9913,18 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"My" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" +"Mx" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_y = -32 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/floor/engine/hull, -/area/space/nearstation) +/area/ruin/space/has_grav/singularitylab/civvie) "MA" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -10215,11 +9946,13 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"MF" = ( -/obj/machinery/power/emitter/welded, -/obj/structure/cable/yellow, -/turf/open/floor/plating, -/area/space/nearstation) +"MD" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "MG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -10265,28 +9998,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"MO" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/space/nearstation) -"MQ" = ( -/obj/structure/spacevine/dense, -/obj/machinery/power/apc/auto_name/directional/north{ - start_charge = 0 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "MS" = ( /obj/structure/dresser, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -10325,25 +10036,6 @@ /obj/item/stack/cable_coil/cut/yellow, /turf/open/floor/engine/hull/reinforced, /area/ruin/space/has_grav/singularitylab/reactor) -"MW" = ( -/obj/machinery/door/airlock{ - dir = 8; - name = "Private Quarters" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/civvie) "MX" = ( /obj/structure/transit_tube/curved{ dir = 1 @@ -10388,6 +10080,18 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"Nd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/table, +/obj/item/paper, +/obj/item/pen{ + pixel_x = 2; + pixel_y = -3 + }, +/turf/open/floor/carpet/nanoweave/beige, +/area/ruin/space/has_grav/singularitylab/cargo) "Ni" = ( /obj/structure/spacevine, /obj/structure/spacevine{ @@ -10452,10 +10156,6 @@ }, /turf/open/floor/wood, /area/ruin/space/has_grav/singularitylab/civvie) -"Nu" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "Nw" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -10466,14 +10166,57 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"NG" = ( -/obj/effect/turf_decal/solarpanel, -/obj/machinery/power/solar, -/obj/structure/cable/yellow{ - icon_state = "0-2" +"Nx" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Ny" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"NB" = ( +/turf/closed/wall{ + desc = "A huge chunk of metal holding the roof of the asteroid at bay"; + name = "structural support" + }, +/area/ruin/space/has_grav/singularitylab) +"NC" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/obj/structure/spacevine{ + pixel_y = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"NE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external{ + dir = 4; + name = "Interior Mine" }, -/turf/open/floor/plating, -/area/space/nearstation) +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/cargo) "NH" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/industrial/warning{ @@ -10497,17 +10240,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"NJ" = ( -/obj/structure/spacevine/dense, -/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ - dir = 8 - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "NK" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -10535,19 +10267,6 @@ }, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav/singularitylab/civvie) -"NN" = ( -/obj/structure/chair/stool/bar{ - dir = 4; - name = "picnic stool"; - pixel_x = 9; - pixel_y = 7 - }, -/obj/effect/turf_decal/siding/wood/end{ - dir = 8 - }, -/obj/structure/spacevine, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) "NP" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ @@ -10555,18 +10274,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"NR" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "NS" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/purple{ @@ -10574,23 +10281,16 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"NU" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/structure/spacevine/dense{ - pixel_y = -32 +"NT" = ( +/obj/structure/flippedtable{ + dir = 1; + icon_state = "" }, -/obj/structure/spacevine/dense{ - pixel_x = 32; - pixel_y = 32 +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" }, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/spacevine/dense, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; @@ -10653,17 +10353,6 @@ /obj/structure/tank_dispenser/plasma, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"Oe" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -14; - pixel_y = 4 - }, -/obj/structure/mirror{ - pixel_x = -29 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/civvie) "Oh" = ( /obj/structure/spacevine, /obj/machinery/atmospherics/components/binary/valve/digital/layer4{ @@ -10684,14 +10373,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"Ol" = ( -/obj/structure/spacevine, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "Om" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10713,6 +10394,13 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"Op" = ( +/obj/machinery/door/airlock/public/glass{ + dir = 4; + name = "Hydroponics" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/civvie) "Oq" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/purple{ @@ -10740,6 +10428,17 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"Ov" = ( +/obj/structure/sign/poster/retro/science{ + pixel_y = 32 + }, +/obj/structure/chair/office{ + desc = "Technologically enhanced for the optimal research position."; + dir = 8; + name = "science chair" + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ruin/space/has_grav/singularitylab/lab) "Ox" = ( /obj/structure/transit_tube/curved/flipped{ dir = 8 @@ -10755,12 +10454,6 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"Oy" = ( -/turf/closed/wall{ - desc = "A huge chunk of metal holding the roof of the asteroid at bay"; - name = "structural support" - }, -/area/ruin/space/has_grav/singularitylab/hangar) "Oz" = ( /obj/structure/particle_accelerator/fuel_chamber{ dir = 4 @@ -10790,6 +10483,16 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"OC" = ( +/obj/structure/flippedtable{ + dir = 1; + icon_state = "" + }, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt{ + baseturfs = /turf/open/floor/plating/asteroid + }, +/area/ruin/space/has_grav/singularitylab) "OE" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -10828,22 +10531,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"OK" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/machinery/recharger{ - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) "OL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 9 @@ -10918,17 +10605,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"OU" = ( -/obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "OV" = ( /obj/structure/lattice/catwalk, /turf/open/floor/plating, @@ -10940,24 +10616,20 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"OZ" = ( -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" +"OX" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/obj/item/flashlight/seclite, -/turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) "Pa" = ( /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"Pb" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "Pd" = ( /obj/structure/bed, /obj/item/bedsheet/nanotrasen, @@ -11009,15 +10681,6 @@ }, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/singularitylab/lab) -"Pk" = ( -/obj/structure/spacevine, -/obj/structure/spacevine/dense, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "Pl" = ( /obj/structure/cable{ icon_state = "1-2" @@ -11098,24 +10761,21 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"Pv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 +"Px" = ( +/obj/structure/spacevine, +/obj/structure/spacevine{ + pixel_y = 32 }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 +/obj/structure/spacevine{ + pixel_x = -32 }, -/obj/structure/table/wood/fancy/purple, -/obj/structure/fluff/beach_umbrella{ - pixel_x = -5; - pixel_y = 16 +/obj/structure/spacevine/dense{ + pixel_x = -31; + pixel_y = 32 }, -/obj/machinery/jukebox/boombox, -/obj/structure/spacevine, -/obj/machinery/light/floor, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) "Pz" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate, @@ -11195,6 +10855,19 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"PL" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_y = 32 + }, +/obj/structure/closet/emcloset, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "PM" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -11220,6 +10893,15 @@ /obj/machinery/computer/atmos_alert, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"PS" = ( +/obj/structure/spacevine, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "PT" = ( /obj/structure/table/reinforced, /obj/item/binoculars, @@ -11245,36 +10927,49 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Qc" = ( -/obj/structure/spacevine, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"PY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/area/ruin/space/has_grav/singularitylab/civvie) -"Qd" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/turf/open/floor/engine/hull, +/area/space/nearstation) +"PZ" = ( +/obj/effect/turf_decal/box, +/obj/machinery/light/directional/north, +/obj/item/gun/energy/lasercannon/unrestricted{ + desc = "An advanced laser cannon, a laser etched inscription in the handle states 'NT-LS-1013'. The casing is made of a lightweight alloy."; + icon_state = "pulse"; + name = "NT-LS-1013" }, -/area/ruin/space/has_grav/singularitylab) -"Qg" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/item/gun/energy/laser/iot, +/obj/item/gun/energy/laser/iot{ + dry_fire_sound = 'sound/items/ding.ogg'; + dry_fire_text = "ding" + }, +/obj/structure/safe{ + name = "Prototype Storage" + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab/lab) +"Qe" = ( +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" }, +/obj/structure/spacevine, +/turf/open/floor/plating/dirt{ + baseturfs = /turf/open/floor/plating/asteroid + }, +/area/ruin/space/has_grav/singularitylab) +"Qh" = ( +/obj/machinery/power/rad_collector/anchored, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-2" }, -/turf/open/space/basic, +/turf/open/floor/plating, /area/space/nearstation) "Qi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ @@ -11285,69 +10980,37 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Qj" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/space/basic, -/area/space/nearstation) "Ql" = ( -/obj/item/banner/engineering{ - anchored = 1 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) -"Qm" = ( /obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_x = -32; - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ +/obj/structure/spacevine{ pixel_x = -32 }, +/obj/structure/spacevine{ + pixel_y = -32 + }, /obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab) +/area/ruin/space/has_grav/singularitylab/civvie) "Qo" = ( /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav) -"Qr" = ( -/obj/structure/spacevine, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"Qs" = ( -/obj/structure/cable{ - icon_state = "1-2" +"Qq" = ( +/obj/machinery/power/shieldwallgen/atmos/strong/roundstart{ + id = "singlabhang" }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/mob/living/simple_animal/hostile/venus_human_trap, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/machinery/door/poddoor{ + dir = 4; + id = "singlabhanger" }, +/turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) "Qt" = ( /obj/effect/turf_decal/corner/transparent/orange{ @@ -11358,14 +11021,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"Qw" = ( -/obj/structure/table, -/obj/item/clipboard{ - pixel_x = 9; - pixel_y = 7 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/engineering) "Qx" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/west, @@ -11409,9 +11064,6 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"QB" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav) "QC" = ( /obj/structure/cable{ icon_state = "1-6" @@ -11423,19 +11075,6 @@ /obj/effect/decal/cleanable/blood/tracks, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"QD" = ( -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/spacevine, -/obj/machinery/light/directional/north, -/obj/structure/flora/ausbushes/stalkybush, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "QE" = ( /obj/effect/turf_decal/corner/transparent/orange{ dir = 10 @@ -11447,25 +11086,19 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"QH" = ( -/obj/item/clothing/suit/space/hardsuit/engine, -/obj/item/tank/internals/oxygen, -/obj/effect/decal/remains/human, -/obj/structure/cable{ - icon_state = "4-8" - }, +"QF" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ - pixel_y = -32 + pixel_x = 32 }, -/obj/effect/decal/cleanable/blood/old, /obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab) +/area/ruin/space/has_grav/singularitylab/civvie) "QI" = ( /obj/structure/spacevine, /obj/machinery/light/directional/north, @@ -11483,29 +11116,43 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"QO" = ( +/obj/machinery/power/shieldwallgen/atmos/strong/roundstart{ + dir = 1; + id = "singlabhang" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "singlabhanger" + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) "QQ" = ( /obj/effect/decal/remains/human, /obj/item/clothing/shoes/sneakers/white, /obj/item/clothing/under/rank/rnd/scientist, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) -"QT" = ( -/obj/structure/spacevine, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Assistant" - }, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "QV" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"QW" = ( +/obj/structure/cable{ + icon_state = "5-9" + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "QX" = ( /obj/structure/cable/yellow{ icon_state = "1-6" @@ -11519,12 +11166,35 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) +"QY" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "QZ" = ( /obj/structure/railing{ dir = 8 }, /turf/open/floor/plasteel/stairs, /area/ruin/space/has_grav/singularitylab/engineering) +"Rb" = ( +/obj/machinery/power/emitter/welded{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/space/nearstation) "Rc" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/industrial/warning/corner, @@ -11540,6 +11210,16 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) +"Rf" = ( +/obj/structure/spacevine/dense, +/mob/living/simple_animal/hostile/venus_human_trap, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "Rh" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 5 @@ -11566,15 +11246,14 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/engineering) -"Ro" = ( -/obj/structure/spacevine, -/mob/living/simple_animal/hostile/venus_human_trap, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"Rl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/turf/open/space/basic, +/area/space/nearstation) "Rp" = ( /obj/structure/transit_tube/horizontal, /obj/structure/plasticflaps/opaque{ @@ -11591,6 +11270,26 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) +"Rq" = ( +/obj/structure/cable{ + icon_state = "1-6" + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 8 + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "Rr" = ( /obj/structure/cable{ icon_state = "6-8" @@ -11613,6 +11312,19 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/reactor) +"Rw" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Rx" = ( /obj/structure/dresser, /obj/item/radio/intercom/directional/west, @@ -11704,15 +11416,23 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"RN" = ( -/obj/structure/toilet{ - dir = 4; - pixel_x = -6; - pixel_y = 6 +"RP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/table/wood/fancy/blue, +/obj/structure/fluff/beach_umbrella{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/structure/spacevine, +/obj/machinery/light/floor, +/turf/open/floor/wood, +/area/ruin/space/has_grav/singularitylab/civvie) "RR" = ( /obj/effect/turf_decal/corner/transparent/orange{ dir = 5 @@ -11726,53 +11446,26 @@ /obj/structure/cable{ icon_state = "6-9" }, -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood{ - icon_state = "bubblegumfoot" - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/cargo) -"RV" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/reactor) -"RW" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/civvie) -"RX" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/machinery/portable_atmospherics/scrubber/huge, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) -"RZ" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = -32 +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 }, -/obj/structure/spacevine{ - pixel_y = -32 +/obj/effect/decal/cleanable/blood{ + icon_state = "bubblegumfoot" }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/cargo) +"RV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/reactor) +"RW" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, +/turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) "Sa" = ( /obj/structure/cable{ @@ -11808,23 +11501,16 @@ /obj/structure/spacevine, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"Sh" = ( -/obj/item/stack/cable_coil/cut/yellow, -/turf/open/space/basic, -/area/space/nearstation) -"Si" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_y = -32 +"Sj" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/turf/open/space/basic, +/area/space/nearstation) "Sk" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -11833,17 +11519,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Sm" = ( -/obj/structure/toilet{ - dir = 8; - pixel_x = 6; - pixel_y = 5 - }, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/civvie) "Sn" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -11905,23 +11580,29 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/lab) -"SF" = ( +"Sv" = ( +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 23 + }, /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" }, /obj/effect/turf_decal/siding/thinplating{ dir = 4 }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 23 - }, -/obj/structure/railing/corner{ - pixel_x = -3; - pixel_y = 2 +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 }, /obj/structure/transit_tube/station/dispenser/flipped{ dir = 8 @@ -11933,17 +11614,36 @@ dir = 8 }, /turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab/cargo) +"SC" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, /area/ruin/space/has_grav/singularitylab) -"SH" = ( -/obj/structure/chair/stool/bar{ - dir = 1; - name = "picnic stool"; - pixel_y = 16 +"SE" = ( +/obj/structure/toilet{ + dir = 4; + pixel_x = -6; + pixel_y = 6 }, -/obj/effect/turf_decal/siding/wood/end, -/obj/structure/spacevine, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) +"SJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/flippedtable{ + dir = 2; + icon_state = "" + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ruin/space/has_grav/singularitylab/lab) "SK" = ( /obj/structure/closet/emcloset{ anchored = 1 @@ -11960,11 +11660,49 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"SM" = ( +/obj/structure/spacevine, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "SQ" = ( /obj/machinery/rnd/production/protolathe/department/engineering, /obj/structure/spacevine, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/engineering) +"SR" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/space/nearstation) +"SS" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "singlabhanger" + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) +"ST" = ( +/obj/structure/flippedtable{ + dir = 4; + icon_state = "" + }, +/obj/structure/spacevine/dense, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "SW" = ( /obj/structure/chair/office{ dir = 4 @@ -11982,6 +11720,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/visible/layer4, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"SY" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "SZ" = ( /obj/effect/spawner/structure/window, /obj/structure/curtain/cloth/fancy, @@ -11997,6 +11747,18 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"Tb" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Td" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -12008,6 +11770,35 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) +"Th" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 23 + }, +/obj/structure/railing/corner{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/structure/transit_tube/station/dispenser/flipped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) "Ti" = ( /obj/structure/transit_tube/curved, /obj/structure/cable{ @@ -12017,18 +11808,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"To" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_y = 32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "Tq" = ( /obj/effect/turf_decal/siding/yellow/corner{ dir = 8 @@ -12051,15 +11830,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"Tu" = ( -/obj/structure/spacevine, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) "Tv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 5 @@ -12105,22 +11875,6 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab/civvie) -"TC" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_y = 32 - }, -/obj/structure/spacevine/dense{ - pixel_y = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "TD" = ( /obj/structure/cable{ icon_state = "4-8" @@ -12152,6 +11906,20 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"TG" = ( +/obj/structure/cable{ + icon_state = "5-9" + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/item/gun/energy/e_gun/smg{ + dry_fire_sound = 'sound/items/ding.ogg'; + dry_fire_text = "ding"; + name = "\improper Modified E-TAR SMG"; + pixel_x = 5; + pixel_y = 6 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "TH" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/corner/opaque/white/full, @@ -12164,14 +11932,34 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/siding/thinplating/dark{ +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/cargo) +"TK" = ( +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/flippedtable{ + dir = 8; + icon_state = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/cargo) +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "TL" = ( /obj/machinery/rnd/production/circuit_imprinter/department/engi, /turf/open/floor/plasteel/dark, @@ -12220,13 +12008,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"TQ" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow{ - icon_state = "0-10" - }, -/turf/open/floor/plating, -/area/space/nearstation) "TR" = ( /obj/structure/cable{ icon_state = "4-8" @@ -12310,19 +12091,25 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) -"Uf" = ( -/obj/structure/chair/stool/bar{ - dir = 8; - name = "picnic stool"; - pixel_x = -10; - pixel_y = 4 +"Ue" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 }, -/obj/effect/turf_decal/siding/wood/end{ - dir = 4 +/obj/structure/spacevine/dense{ + pixel_y = 32 }, -/obj/structure/spacevine, -/turf/open/floor/wood, -/area/ruin/space/has_grav/singularitylab/civvie) +/obj/structure/spacevine/dense{ + pixel_x = -32; + pixel_y = 32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Ui" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable{ @@ -12385,6 +12172,50 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/engineering) +"Up" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Ur" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"Ut" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_y = -32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Ux" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Uy" = ( /obj/machinery/door/airlock{ name = "Bedroom" @@ -12407,6 +12238,45 @@ "UD" = ( /turf/open/floor/engine/hull/reinforced, /area/ruin/space/has_grav/singularitylab/reactor) +"UF" = ( +/obj/effect/turf_decal/solarpanel, +/obj/machinery/power/solar, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/space/nearstation) +"UG" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/spacevine/dense{ + pixel_y = -32 + }, +/obj/structure/spacevine/dense{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"UH" = ( +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "UI" = ( /obj/structure/spacevine, /obj/structure/spacevine/dense{ @@ -12435,6 +12305,33 @@ baseturfs = /turf/open/floor/plating/asteroid }, /area/ruin/space/has_grav/singularitylab) +"UL" = ( +/obj/structure/sign/poster/retro/lasergun{ + pixel_x = -32 + }, +/obj/effect/turf_decal/box, +/obj/machinery/light/directional/north, +/obj/item/gun/energy/e_gun/smg{ + dry_fire_sound = 'sound/items/ding.ogg'; + dry_fire_text = "ding"; + name = "\improper Modified E-TAR SMG"; + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/gun/energy/e_gun/smg{ + dry_fire_sound = 'sound/items/ding.ogg'; + dry_fire_text = "ding"; + name = "\improper Modified E-TAR SMG"; + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/structure/safe{ + name = "Prototype Storage" + }, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab/lab) "UM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer4{ dir = 8 @@ -12447,18 +12344,13 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"UR" = ( -/obj/structure/spacevine, -/obj/item/gun/energy/floragun, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/gibspawner, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +"UP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/turf/open/space/basic, +/area/space/nearstation) "UU" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 9 @@ -12479,6 +12371,22 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) +"UW" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "UY" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ @@ -12486,6 +12394,40 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab) +"Vb" = ( +/obj/structure/spacevine/dense{ + pixel_x = -32 + }, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Vc" = ( +/obj/structure/spacevine/dense, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer4{ + dir = 6 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) +"Ve" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 5; + pixel_y = 11 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "Vg" = ( /obj/structure/sign/warning/radiation/rad_area{ pixel_x = 32 @@ -12540,6 +12482,12 @@ /obj/item/gun/energy/floragun, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"Vn" = ( +/obj/machinery/the_singularitygen{ + anchored = 1 + }, +/turf/open/floor/plating, +/area/space/nearstation) "Vo" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 6 @@ -12549,18 +12497,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Vp" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine{ - pixel_x = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "Vq" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/industrial/warning/corner, @@ -12608,62 +12544,51 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"Vw" = ( -/obj/effect/turf_decal/corner/opaque/green{ - dir = 10 - }, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/civvie) -"Vz" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/tech/grid, -/area/ruin/space/has_grav/singularitylab/engineering) -"VA" = ( +"Vv" = ( +/obj/item/clothing/suit/space/hardsuit/engine, +/obj/item/flamethrower/full, +/obj/effect/decal/remains/human, /obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"VD" = ( -/obj/structure/table, -/obj/structure/sign/poster/official/moth/hardhats{ - pixel_x = -32 - }, -/obj/structure/spacevine, -/obj/item/assembly/igniter{ - pixel_x = 7; - pixel_y = 3 + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = -6 +/area/ruin/space/has_grav/singularitylab/engineering) +"Vw" = ( +/obj/effect/turf_decal/corner/opaque/green{ + dir = 10 }, -/obj/item/assembly/igniter{ - pixel_x = -7; - pixel_y = 3 +/obj/effect/turf_decal/corner/opaque/green{ + dir = 5 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/civvie) +"Vz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/singularitylab/engineering) "VE" = ( /obj/machinery/light/directional/west, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) -"VF" = ( -/obj/machinery/door/airlock/public/glass{ - dir = 4; - name = "Hydroponics" +"VG" = ( +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" }, -/turf/open/floor/plasteel/tech, /area/ruin/space/has_grav/singularitylab/civvie) +"VH" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "VI" = ( /obj/structure/curtain/cloth, /obj/machinery/light/small/directional/north, @@ -12716,6 +12641,37 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) +"VT" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = -32 + }, +/obj/structure/spacevine{ + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"VU" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) "VV" = ( /obj/structure/transit_tube/curved/flipped{ dir = 4 @@ -12817,13 +12773,6 @@ }, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav/singularitylab/civvie) -"Wg" = ( -/obj/effect/decal/cleanable/blood/drip{ - pixel_x = 5; - pixel_y = 11 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "Wh" = ( /obj/structure/spacevine, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -12850,20 +12799,27 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/lab) -"Wl" = ( -/obj/structure/cable{ - icon_state = "5-9" +"Wm" = ( +/obj/effect/turf_decal/solarpanel, +/obj/machinery/power/solar, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/turf_decal/siding/thinplating, -/obj/item/gun/energy/e_gun/smg{ - dry_fire_sound = 'sound/items/ding.ogg'; - dry_fire_text = "ding"; - name = "\improper Modified E-TAR SMG"; - pixel_x = 5; - pixel_y = 6 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) +/turf/open/floor/plating, +/area/space/nearstation) +"Wo" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/space/nearstation) "Wp" = ( /obj/structure/railing/corner{ dir = 4 @@ -12895,25 +12851,26 @@ /obj/effect/decal/cleanable/ash, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Wy" = ( -/obj/structure/window/reinforced{ - dir = 1 +"Ww" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Barracks" }, -/obj/effect/turf_decal/corner/opaque/white/full, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 5 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/soda_cans/sol_dry{ - pixel_x = -6; - pixel_y = -3 +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 }, -/obj/item/reagent_containers/food/drinks/soda_cans/sodawater{ - pixel_x = 8; - pixel_y = 8 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/space/has_grav/singularitylab/civvie) "Wz" = ( /obj/machinery/door/airlock/vault{ name = "Vault Access" @@ -12948,6 +12905,17 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"WE" = ( +/obj/structure/spacevine, +/mob/living/simple_animal/hostile/zombie/kudzu{ + zombiejob = "Assistant" + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "WG" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/directional/east, @@ -12971,6 +12939,10 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) +"WJ" = ( +/obj/structure/table, +/turf/closed/mineral/random, +/area/ruin/space/has_grav) "WK" = ( /obj/structure/rack, /obj/item/gun/energy/e_gun/rdgun{ @@ -13048,43 +13020,18 @@ }, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/singularitylab/lab) -"WU" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/mining{ - dir = 4; - name = "Cargo Bay" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/cargo) -"WV" = ( +"WT" = ( /obj/structure/spacevine/dense, /obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/mob/living/simple_animal/hostile/zombie/kudzu{ - zombiejob = "Assistant" + pixel_y = -32 }, -/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; name = "grass" }, -/area/ruin/space/has_grav/singularitylab/civvie) +/area/ruin/space/has_grav/singularitylab) "WW" = ( /obj/structure/transit_tube/curved/flipped{ dir = 1 @@ -13101,22 +13048,6 @@ /obj/structure/spacevine, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"Xa" = ( -/obj/machinery/door/airlock/engineering{ - dir = 8; - name = "Power Control" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/engineering) "Xc" = ( /obj/structure/chair/office, /obj/structure/sign/poster/official/wtf_is_co2{ @@ -13127,6 +13058,21 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/reactor) +"Xe" = ( +/obj/structure/spacevine{ + pixel_y = 32 + }, +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/engine, +/area/ruin/space/has_grav/singularitylab) "Xf" = ( /obj/structure/filingcabinet, /obj/item/pen/fountain, @@ -13147,6 +13093,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab) +"Xh" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/open/floor/carpet/nanoweave/beige, +/area/ruin/space/has_grav/singularitylab/cargo) "Xk" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer4{ @@ -13164,44 +13119,26 @@ }, /turf/open/floor/carpet/nanoweave/beige, /area/ruin/space/has_grav/singularitylab/cargo) -"Xn" = ( -/obj/machinery/door/airlock{ +"Xp" = ( +/obj/structure/table, +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/singularitylab/engineering) +"Xt" = ( +/obj/machinery/door/airlock/hatch{ dir = 4; - name = "Barracks" + name = "Server Room" }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/turf/open/floor/plasteel/tech, -/area/ruin/space/has_grav/singularitylab/civvie) -"Xo" = ( -/obj/machinery/hydroponics/constructable, -/obj/structure/spacevine, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab/civvie) -"Xp" = ( -/obj/structure/table, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/singularitylab/engineering) -"Xs" = ( -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = 32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/area/ruin/space/has_grav/singularitylab/civvie) +/turf/open/floor/plating, +/area/ruin/space/has_grav/singularitylab/lab) "Xv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 @@ -13211,13 +13148,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"Xw" = ( -/obj/structure/flippedtable{ - dir = 8; - icon_state = "" - }, -/turf/open/floor/plating/asteroid, -/area/ruin/space/has_grav/singularitylab) "Xx" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ @@ -13229,8 +13159,18 @@ /obj/effect/turf_decal/corner/opaque/purple{ dir = 1 }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab/lab) +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) +"XB" = ( +/obj/structure/spacevine, +/obj/structure/spacevine/dense, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "XD" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 4 @@ -13269,34 +13209,11 @@ }, /turf/closed/wall/r_wall, /area/ruin/space/has_grav/singularitylab/reactor) -"XG" = ( -/obj/structure/cable{ - icon_state = "1-6" - }, -/obj/structure/spacevine/dense, -/obj/structure/spacevine/dense{ - pixel_x = -32 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "XJ" = ( /obj/structure/lattice/catwalk, /obj/structure/spacevine, /turf/open/floor/plating, /area/ruin/space/has_grav/singularitylab) -"XN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/singularitylab) "XR" = ( /obj/effect/turf_decal/siding/thinplating, /obj/effect/decal/cleanable/blood{ @@ -13321,6 +13238,18 @@ /obj/structure/filingcabinet, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"Ya" = ( +/obj/structure/table, +/obj/item/paper{ + default_raw_text = "Whatever happens. Happens." + }, +/obj/item/pen, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = 10; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "Yc" = ( /obj/structure/cable{ icon_state = "1-2" @@ -13340,6 +13269,46 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) +"Yh" = ( +/obj/structure/spacevine, +/mob/living/simple_animal/hostile/venus_human_trap, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"Yi" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/effect/turf_decal/corner/opaque/white/full, +/obj/structure/table, +/obj/item/lighter{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/clothing/mask/cigarette, +/obj/item/clothing/mask/cigarette{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab/lab) +"Yj" = ( +/turf/closed/wall{ + desc = "A huge chunk of metal holding the roof of the asteroid at bay"; + name = "structural support" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "Yk" = ( /obj/machinery/conveyor{ id = "singlabcarg" @@ -13373,13 +13342,6 @@ /obj/structure/chair, /turf/open/floor/carpet/nanoweave/purple, /area/ruin/space/has_grav/singularitylab/lab) -"Yo" = ( -/obj/machinery/door/poddoor{ - dir = 4; - id = "singlablas2" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab/lab) "Yp" = ( /obj/structure/transit_tube/curved/flipped{ dir = 8 @@ -13399,14 +13361,19 @@ }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"Ys" = ( +"Yt" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, /obj/structure/spacevine/dense, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 10 +/obj/structure/spacevine/dense{ + pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 +/obj/structure/spacevine/dense{ + pixel_x = -32; + pixel_y = 32 }, +/obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/plating/grass/jungle{ baseturfs = /turf/open/floor/plasteel; desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; @@ -13493,17 +13460,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/reactor) -"YG" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/button/door{ - dir = 8; - id = "singlabcargo2"; - name = "Blast Door Control"; - pixel_x = 24 - }, -/obj/structure/spacevine, -/turf/open/floor/plating, -/area/ruin/space/has_grav/singularitylab) "YH" = ( /obj/structure/transit_tube, /obj/structure/cable{ @@ -13520,13 +13476,25 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/singularitylab) -"YJ" = ( -/obj/structure/sign/poster/official/moth/boh{ - pixel_x = -32 +"YK" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32 }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"YL" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "YN" = ( /obj/structure/table, /obj/item/paper_bin, @@ -13556,45 +13524,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/cargo) -"YV" = ( -/obj/structure/sign/poster/retro/lasergun{ - pixel_x = -32 - }, -/obj/effect/turf_decal/box, -/obj/machinery/light/directional/north, -/obj/item/gun/energy/e_gun/smg{ - dry_fire_sound = 'sound/items/ding.ogg'; - dry_fire_text = "ding"; - name = "\improper Modified E-TAR SMG"; - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/gun/energy/e_gun/smg{ - dry_fire_sound = 'sound/items/ding.ogg'; - dry_fire_text = "ding"; - name = "\improper Modified E-TAR SMG"; - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/gun/energy/laser, -/obj/item/gun/energy/laser, -/obj/structure/safe{ - name = "Prototype Storage" - }, -/turf/open/floor/engine, -/area/ruin/space/has_grav/singularitylab/lab) -"YW" = ( -/obj/structure/cable{ - icon_state = "6-9" - }, -/obj/structure/spacevine/dense, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/plating/grass/jungle{ - baseturfs = /turf/open/floor/plasteel; - desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; - name = "grass" - }, -/area/ruin/space/has_grav/singularitylab) "YX" = ( /obj/effect/turf_decal/corner/opaque/white/full, /turf/open/floor/plasteel, @@ -13611,23 +13540,51 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/singularitylab/engineering) +"Za" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine/dense{ + pixel_x = 32 + }, +/obj/machinery/portable_atmospherics/scrubber/huge, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab) "Zc" = ( /turf/closed/wall, /area/ruin/space/has_grav/singularitylab) -"Zh" = ( -/obj/structure/cable{ - icon_state = "6-9" +"Ze" = ( +/obj/structure/spacevine, +/turf/closed/wall{ + desc = "A huge chunk of metal holding the roof of the asteroid at bay"; + name = "structural support" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen{ - pixel_x = -4; - pixel_y = 2 +/area/ruin/space/has_grav/singularitylab) +"Zg" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ruin/space/has_grav/singularitylab/cargo) +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/space/nearstation) +"Zj" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/machinery/button/door{ + dir = 1; + id = "singlabcargo1"; + name = "Blast Door Control"; + pixel_y = -25 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/singularitylab) "Zk" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -13710,12 +13667,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab) -"Zx" = ( -/turf/closed/wall{ - desc = "A huge chunk of metal holding the roof of the asteroid at bay"; - name = "structural support" - }, -/area/ruin/space/has_grav/singularitylab/cargo) "Zy" = ( /obj/structure/cable{ icon_state = "6-10" @@ -13805,6 +13756,16 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"ZO" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/space/basic, +/area/space/nearstation) "ZR" = ( /obj/structure/cable{ icon_state = "4-8" @@ -13817,6 +13778,34 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/singularitylab/civvie) +"ZS" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/spacevine, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) +"ZU" = ( +/obj/structure/spacevine/dense, +/obj/structure/spacevine{ + pixel_x = 32 + }, +/turf/open/floor/plating/grass/jungle{ + baseturfs = /turf/open/floor/plasteel; + desc = "A patch of overgrown grass. Hints of plasteel plating lay under it."; + name = "grass" + }, +/area/ruin/space/has_grav/singularitylab/civvie) "ZV" = ( /obj/structure/transit_tube/horizontal, /obj/structure/cable{ @@ -13881,7 +13870,7 @@ tq tq tq tq -QB +id tq tq tq @@ -13927,17 +13916,17 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id tq -QB -QB +id +id tq tq "} @@ -13953,7 +13942,7 @@ tq tq tq tq -QB +id tq tq tq @@ -14002,19 +13991,19 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id tq tq "} @@ -14024,18 +14013,18 @@ tq tq tq tq -QB -QB +id +id tq tq tq -QB -QB +id +id tq Ke Ke Ke -QB +id Ke tq tq @@ -14047,8 +14036,8 @@ tq tq tq tq -QB -QB +id +id tq tq tq @@ -14057,7 +14046,7 @@ tq tq tq tq -QB +id tq tq tq @@ -14078,20 +14067,20 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id tq tq "} @@ -14100,7 +14089,7 @@ tq tq tq tq -QB +id Ke Ke Ke @@ -14110,22 +14099,22 @@ Ke Ke Ke Ke -QB -QB -QB +id +id +id Ke Ke -QB +id tq tq tq -QB +id tq tq tq -QB -QB -QB +id +id +id tq tq tq @@ -14133,8 +14122,8 @@ tq tq tq tq -QB -QB +id +id tq tq tq @@ -14142,10 +14131,10 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id tq tq tq @@ -14154,14 +14143,14 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id tq tq tq @@ -14179,29 +14168,29 @@ tq tq tq Ke -QB +id Ke tq Ke -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Ke tq tq Ke Ke Ke -QB +id tq -QB -QB -QB +id +id +id tq tq tq @@ -14209,35 +14198,35 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id tq tq tq tq -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id tq tq tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id tq tq tq @@ -14256,28 +14245,28 @@ tq Ke Ke Ke -QB +id Ke Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Ke Ke Ke Ke -QB +id Ke -QB +id tq tq -QB +id tq tq tq @@ -14286,18 +14275,18 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id tq tq tq tq tq tq -QB -QB +id +id tq tq tq @@ -14305,15 +14294,15 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id tq tq tq @@ -14331,25 +14320,25 @@ tq tq Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke tq tq @@ -14362,10 +14351,10 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id tq tq tq @@ -14373,23 +14362,23 @@ tq tq tq tq -QB -QB -QB +id +id +id tq tq tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id kP tq tq @@ -14407,26 +14396,26 @@ tq tq Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke tq tq @@ -14439,8 +14428,8 @@ tq tq tq tq -QB -QB +id +id tq tq tq @@ -14450,23 +14439,23 @@ tq tq tq tq -QB -QB +id +id tq tq tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id kP tq tq @@ -14481,29 +14470,29 @@ tq tq "} (9,1,1) = {" -QB +id Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -14516,8 +14505,8 @@ tq tq tq tq -QB -QB +id +id tq tq tq @@ -14534,14 +14523,14 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id kP kP kP @@ -14562,26 +14551,26 @@ tq Ke Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -14600,9 +14589,9 @@ tq tq tq tq -QB -QB -QB +id +id +id tq tq tq @@ -14610,14 +14599,14 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id kP kP kP @@ -14639,27 +14628,27 @@ tq tq tq Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -14676,9 +14665,9 @@ tq tq tq tq -QB -QB -QB +id +id +id tq tq tq @@ -14687,14 +14676,14 @@ tq tq tq tq -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id kP kP kP @@ -14716,28 +14705,28 @@ tq tq Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -14753,24 +14742,24 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id tq tq tq tq tq tq -QB -QB -QB -QB +id +id +id +id kP kP -QB -QB +id +id kP kP kP @@ -14792,30 +14781,30 @@ tq tq Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -sa -Qs -rf -XG -vV -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +Yt +AB +dh +st +Hr +id +id +id +id +id +id Ke Ke tq @@ -14830,24 +14819,24 @@ tq tq tq tq -QB +id tq -QB +id tq tq tq tq tq tq -QB -QB -QB -QB +id +id +id +id kP kP kP -QB -QB +id +id kP kP kP @@ -14866,40 +14855,40 @@ tq tq "} (14,1,1) = {" -QB +id Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -xR -zl -Ew -fq -fq -YW -sU -lb -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +Ue +AS +fD +pd +pd +SY +Tb +UG +id +id +id +id +id Ke Ke Ke Ke Ke -QB +id Ke Ke Ke @@ -14916,14 +14905,14 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id kP kP kP -QB +id kP kP kP @@ -14943,42 +14932,42 @@ tq tq "} (15,1,1) = {" -QB +id Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -ci -Qd -nN -QB -QB -sw -Dl -EY -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +qn +Id +WT +id +id +UW +nz +HX +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -14992,15 +14981,15 @@ tq tq tq tq -QB -QB -QB -QB +id +id +id +id kP kP kP kP -QB +id kP kP kP @@ -15023,14 +15012,14 @@ tq tq Ke Ke -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Zc Zc Zc @@ -15039,45 +15028,45 @@ ii Iz iZ Zc -QB -QB +id +id mo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke tq tq tq tq tq -QB -QB +id +id tq tq tq -QB -QB -QB -QB +id +id +id +id kP kP kP kP kP -QB +id kP kP kP @@ -15100,16 +15089,16 @@ tq tq tq Ke -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Zc -jB +Px zx zx Bh @@ -15121,19 +15110,19 @@ Zc Or Zc Zc -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -15145,10 +15134,10 @@ Ke tq tq tq -QB -QB -QB -QB +id +id +id +id kP kP kP @@ -15156,8 +15145,8 @@ kP kP kP kP -QB -QB +id +id kP kP tq @@ -15177,18 +15166,18 @@ tq tq tq Ke -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Zc tr -OU -fT +KU +SC jj Re eh @@ -15196,28 +15185,28 @@ FE wR th jN -bD +rw Zc -QB -QB -QB -dG -zB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +Dg +qG +id +id +id +id +id +id +id +id +id Ke Ke Ke Ke Ke -QB +id Ke Ke tq @@ -15233,8 +15222,8 @@ kP kP kP kP -QB -QB +id +id kP kP tq @@ -15261,11 +15250,11 @@ Ke Ke Ke Ke -QB +id Zc tr -fT -OU +SC +KU VW vb xK @@ -15273,34 +15262,34 @@ zJ KH Es Fx -bD +rw Zc -QB -QB -Hz -xo -gB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -Ke -Ke -Ke -QB -QB +id +id +Kh +mL +up +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +Ke +Ke +Ke +id +id Ke Ke kP @@ -15311,8 +15300,8 @@ kP kP kP kP -QB -QB +id +id kP tq tq @@ -15338,9 +15327,9 @@ Qo Qo Qo Ke -QB +id Zc -uQ +Xe UY wX Bh @@ -15348,37 +15337,37 @@ OP fG Kx Wh -Ew +fD Oh ac Zc Zc -CE +oG UU fw -FI -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +NB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke Ke @@ -15388,8 +15377,8 @@ kP kP kP kP -QB -QB +id +id kP tq tq @@ -15412,10 +15401,10 @@ Ke Qo Qo Qo -QB +id Qo Ke -QB +id Zc Zc Zc @@ -15424,8 +15413,8 @@ Jb WI Zc PR -NJ -Ew +hN +fD De TX wk @@ -15435,31 +15424,31 @@ jQ Ot Kt iQ -ra +dt ut kT -QB -FI -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -FI -QB -QB -QB -QB -QB -QB +id +NB +id +id +id +id +id +id +id +id +id +id +id +id +id +NB +id +id +id +id +id +id Ke Ke Ke @@ -15486,10 +15475,10 @@ tq tq tq Ke -QB -QB -QB -QB +id +id +id +id Qo Ke Ke @@ -15498,11 +15487,11 @@ Ni Bh Bh Bh -HV -ax +Eu +pK aj -oP -Ew +UH +fD Gy VP kA @@ -15537,12 +15526,12 @@ us us Jc HW -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id Ke Ke kP @@ -15563,10 +15552,10 @@ tq tq tq Ke -QB -QB -QB -QB +id +id +id +id Qo Qo Ke @@ -15575,10 +15564,10 @@ XE OW OW Et -aI -rA +hf +nT FE -dM +Vc SX MN jM @@ -15593,7 +15582,7 @@ iB iN wm Zw -FI +NB BX BX BX @@ -15606,21 +15595,21 @@ BX BX BX BX -QB -FI -QB -QB -QB -QB +id +NB +id +id +id +id kU oa -QB -FI -QB -QB -QB -QB -QB +id +NB +id +id +id +id +id Ke kP kP @@ -15637,11 +15626,11 @@ tq "} (24,1,1) = {" tq -QB -QB +id +id Ke -QB -QB +id +id Qo Qo Qo @@ -15654,14 +15643,14 @@ Zc Zc CD CD -HV -Bp +Eu +yI Ou kb kD Zc -QB -QB +id +id cU cX zE @@ -15678,26 +15667,26 @@ Eo EX zq Di -VD +qV OH Uo ce BX -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id Ci CC my UV yS -QB -QB -QB +id +id +id Ke Ke kP @@ -15715,31 +15704,31 @@ tq (25,1,1) = {" tq tq -QB +id Ke -QB -QB +id +id Qo -QB -QB -QB -QB -QB +id +id +id +id +id Qo Qo Ad AR -Gs -RX -yp +ku +Za +tI nZ iF sH Ss Zc -QB -Qm -Ew +id +vi +fD wW lJ mY @@ -15750,32 +15739,32 @@ BX BX hP by -Qw +tV RR MH QZ In Di -bZ -bZ +Du +Du TZ BX rg jL kU -QB -QB -QB -QB -QB -QB -FI +id +id +id +id +id +id +NB os KT la -QB -QB -QB +id +id +id Ke kP kP @@ -15794,17 +15783,17 @@ tq tq tq Ke -QB -QB +id +id Qo -QB -QB -QB -QB -QB +id +id +id +id +id Qo -QB -QB +id +id AT om om @@ -15814,14 +15803,14 @@ Zc Zc Zc Zc -QB -TC -QB -FI +id +HK +id +NB OM -FI -Ge -FF +NB +lt +LH BX BX BX @@ -15834,7 +15823,7 @@ dX CI CY Cb -nq +Vv QE KQ EV @@ -15842,17 +15831,17 @@ jL kU kU kU -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id HP EN yS -QB -QB +id +id Ke Ke kP @@ -15871,33 +15860,33 @@ tq tq tq Ke -QB -QB +id +id Qo -QB +id Qo Qo Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -NU -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +GK +id +id eF -QB -Ys +id +tk Xg Jq cB @@ -15920,17 +15909,17 @@ Fy kU kU jp -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id os KT la -FI -QB +NB +id Ke Ke kP @@ -15948,34 +15937,34 @@ tq tq Ke Ke -QB -QB +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id eF -QB -pv -QH +id +iV +kd BX bo JU @@ -15999,16 +15988,16 @@ nr ua uN uN -Vp -hh -QB -QB -QB +vL +Kk +id +id +id HP Nj vY -QB -QB +id +id Ke Ke kP @@ -16024,35 +16013,35 @@ tq tq tq Ke -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -FI +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +NB bl -FI -MQ -uY +NB +ht +hg BX EK rB @@ -16060,7 +16049,7 @@ rB EK rB BX -Xa +mu yi JS FW @@ -16076,17 +16065,17 @@ JD ua ua ua -jT -cP -Cu -QB -QB -FI +Dj +lL +Ux +id +id +NB os Nc Bb zY -QB +id Ke Ke kP @@ -16099,37 +16088,37 @@ tq "} (30,1,1) = {" tq -QB -Ke -QB -QB -QB -QB -QB -QB -QB -FI -QB -QB -QB -FI -QB -QB -QB -FI -QB -QB -QB -QB -QB -QB -QB -FI +id +Ke +id +id +id +id +id +id +id +NB +id +id +id +NB +id +id +id +NB +id +id +id +id +id +id +id +NB rZ Na -QB -jC -vT +id +ST +Iq BX Ei xZ @@ -16140,7 +16129,7 @@ YZ vE yi yi -cz +ob yi yi BX @@ -16154,17 +16143,17 @@ ET JD ua ua -jT -Ew -Ew -QB -QB -QB +Dj +fD +fD +id +id +id pI aQ LP qc -QB +id Ke Ke kP @@ -16176,13 +16165,13 @@ tq "} (31,1,1) = {" tq -QB +id Ke -QB -QB -QB -QB -QB +id +id +id +id +id rZ VZ DC @@ -16191,7 +16180,7 @@ YH YH DC Ph -CL +xv Ph NV YH @@ -16204,7 +16193,7 @@ YH DC wx tE -QB +id vg gI BX @@ -16222,11 +16211,11 @@ ru yi ok ua -jT -jT -jT -jT -jT +Dj +Dj +Dj +Dj +Dj Ly ha JD @@ -16235,14 +16224,14 @@ ua ua Mi xG -QB -QB -QB +id +id +id WQ GX TN bY -QB +id Ke Ke kP @@ -16255,33 +16244,33 @@ tq tq tq Ke -QB -QB -QB -QB +id +id +id +id Ck ys wY -FI -QB -QB -QB -FI +NB +id +id +id +NB Yu Pu kk -Kc -QB -QB -QB -QB -QB -QB -QB -FI +Ze +id +id +id +id +id +id +id +NB ec -QB -QB +id +id vg ly BX @@ -16298,12 +16287,12 @@ HO mB yi Fw -jT -jT -zz -jT -pv -Ew +Dj +Dj +dx +Dj +iV +fD ua BT ha @@ -16313,13 +16302,13 @@ Mi Vo kU kU -QB -QB -QB -QB +id +id +id +id pI zg -QB +id Ke Ke Ke @@ -16333,31 +16322,31 @@ tq tq Ke Ke -QB -QB -QB +id +id +id DG uE -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id ql gK Yy -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id hW xH Wv @@ -16375,13 +16364,13 @@ Rk Md yi Fw -jT -jT -jT +Dj +Dj +Dj ua ua -Ew -Cu +fD +Ux ua oc ha @@ -16391,13 +16380,13 @@ kU kU kU jp -QB -QB -QB -QB +id +id +id +id QA vY -QB +id Ke Ke Ke @@ -16410,34 +16399,34 @@ tq tq tq Ke -QB -QB -QB +id +id +id pS -QB -QB -QB -QB +id +id +id +id BM Bc WH -Ln -Ib -fv -tB +YK +FV +aa +KY WH Bc Bc -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id ZC OJ -QB +id BX fe ea @@ -16456,10 +16445,10 @@ AQ AQ ua ua -jT -cP -Cu -Cu +Dj +lL +Ux +Ux ua oc EM @@ -16469,14 +16458,14 @@ GJ kU ua UK -QB -QB -QB +id +id +id os og -QB -QB -QB +id +id +id Ke Ke tq @@ -16487,13 +16476,13 @@ tq Ke Ke Ke -QB -QB -FI +id +id +NB bl -FI -QB -QB +NB +id +id ty ty ty @@ -16507,14 +16496,14 @@ ty ty ty EU -QB -QB -QB -QB -QB +id +id +id +id +id ZC Ui -QB +id BX BX BX @@ -16525,7 +16514,7 @@ pE pE pE pE -dc +si pE pE pE @@ -16533,10 +16522,10 @@ pE pE AQ AQ -jT -HT -Ew -GV +Dj +OX +fD +sp AQ ua kn @@ -16549,11 +16538,11 @@ ua uN kU as -FI +NB Rp -FI -QB -QB +NB +id +id Ke se tq @@ -16562,14 +16551,14 @@ tq (36,1,1) = {" tq Ke -QB -QB -QB -QB -QB +id +id +id +id +id RL -QB -QB +id +id Bc ty MS @@ -16584,19 +16573,19 @@ dd Qx ty EU -WV -qm +dr +iJ fa Zu Zu jQ JC -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id pE Xc pt @@ -16608,13 +16597,13 @@ KO Yv cE pE -QB -QB -hE -QB +id +id +NC +id cf -QB -QB +id +id Wc Cl kH @@ -16628,9 +16617,9 @@ Vs zV Am Ud -QB -QB -QB +id +id +id Ke Qo tq @@ -16641,12 +16630,12 @@ tq Ke Ke Ke -QB -QB -QB +id +id +id RL -QB -QB +id +id Bc ty qo @@ -16661,8 +16650,8 @@ Ns Mo ty fn -xn -ip +dK +fh Zu Zu lg @@ -16670,10 +16659,10 @@ pG DK uN uN -QB -QB -QB -QB +id +id +id +id pE oT JX @@ -16685,13 +16674,13 @@ Fu rv Wb pE -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id kU Rh EC @@ -16705,9 +16694,9 @@ QV uW xW Ud -QB -QB -QB +id +id +id Ke Qo tq @@ -16718,22 +16707,22 @@ tq tq tq Ke -QB -QB -QB +id +id +id RL -QB -QB +id +id Bc ty -ay +jY ty SZ ty tx Bc ty -MW +yw ty SZ ty @@ -16744,13 +16733,13 @@ PF kt GU fW -QB +id ua -jT -wP -QB -QB -QB +Dj +QY +id +id +id pE Qt YC @@ -16762,18 +16751,18 @@ RV xS yQ pE -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id kU kU Rh -ve -jT +Kf +Dj ua ua ua @@ -16782,9 +16771,9 @@ jQ aT KZ lM -QB -QB -QB +id +id +id Ke Ke tq @@ -16795,12 +16784,12 @@ tq tq tq Ke -QB -QB -QB +id +id +id RL -QB -QB +id +id Bc NX rX @@ -16820,14 +16809,14 @@ ae hQ bj fW -QB -QB -QB -wv -iC -QB -QB -QB +id +id +id +Ur +aJ +id +id +id pE KM zi @@ -16839,19 +16828,19 @@ gi Od uV pE -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id kU ua -jT -ve -jT +Dj +Kf +Dj ua ua nr @@ -16859,10 +16848,10 @@ Vi nk qk Ud -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -16872,12 +16861,12 @@ tq tq tq Ke -QB -QB -QB +id +id +id RL -QB -QB +id +id Bc Bc Bc @@ -16895,16 +16884,16 @@ WH Nn dQ fW -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id pE UC oT @@ -16912,32 +16901,32 @@ Ed Ed uD pE -iL +Gi pE pE pE -QB -QB -QB -fU -QB -QB -QB -QB -QB +id +id +id +WJ +id +id +id +id +id LO ua -Dn -nB -eY +NT +ba +dI ua nr lc bi jO Ud -QB -QB +id +id Ke Ke Ke @@ -16945,16 +16934,16 @@ tq tq "} (41,1,1) = {" -QB -QB +id +id Ke Ke -QB -QB -QB +id +id +id RL -QB -QB +id +id Bc Bc ty @@ -16971,17 +16960,17 @@ ty WH Nn AK -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id pE Rc zu @@ -16991,30 +16980,30 @@ bH pE wF pE -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id LO -ko -ou -gS +OC +CP +Rw ET ET pY HG -FI +NB Rp -FI -QB +NB +id Ke Qo Qo @@ -17022,16 +17011,16 @@ tq tq "} (42,1,1) = {" -QB -QB +id +id Ke -QB -QB -QB -QB +id +id +id +id RL -QB -QB +id +id Bc Bc ty @@ -17048,7 +17037,7 @@ ty WH Nm tR -QB +id pE pE pE @@ -17066,7 +17055,7 @@ GY cG dp pE -wu +pF pE pE pE @@ -17076,22 +17065,22 @@ pE pE pE pE -QB -QB -QB -QB -QB +id +id +id +id +id Fw ua -jT +Dj JZ OQ -mJ +uI kU -QB +id ZV -QB -QB +id +id Ke Qo tq @@ -17102,14 +17091,14 @@ tq tq tq Ke -QB -QB -QB -FI +id +id +id +NB bl -FI -QB -QB +NB +id +id Bc ty Pd @@ -17125,17 +17114,17 @@ ty Bc Nn tR -QB +id pE -Nu -Nu +VH +VH UD IU UD -Nu -YJ -Nu -Nu +VH +FD +VH +VH pE Ix cG @@ -17144,31 +17133,31 @@ GL Wp pE Er -Nu -Nu -Nu +VH +VH +VH UD IU UD -Nu -Nu +VH +VH pE -QB -QB -QB -QB -QB +id +id +id +id +id Fw -ft -ft +Qe +Qe dY aD kU -QB -QB +id +id ZV -QB -QB +id +id Ke Qo tq @@ -17179,14 +17168,14 @@ tq tq tq Ke -QB -QB -QB +id +id +id JA Yp -QB -QB -QB +id +id +id Bc ty Zq @@ -17195,24 +17184,24 @@ SZ tx Bc ty -nw +bC ty SZ ty Bc hS tR -QB +id pE -Nu -aA -aA -zP -aA -aA -aA -aA -aA +VH +nI +nI +uU +nI +nI +nI +nI +nI pE Ix cG @@ -17221,31 +17210,31 @@ cG dp pE Dp -aA -aA -aA -aA -zP -aA -aA -Nu +nI +nI +nI +nI +uU +nI +nI +VH pE -QB -QB -QB -QB -QB +id +id +id +id +id kU ua ua qT aD kU -QB -QB +id +id ZV -QB -QB +id +id Ke Ke Ke @@ -17256,13 +17245,13 @@ tq tq tq Ke -QB -QB +id +id jq Ta El -QB -QB +id +id Zu Zu ty @@ -17279,17 +17268,17 @@ Bc Bc hS oW -QB +id pE -Nu -aA -pB -My -fg -fg -fg -Is -aA +VH +nI +Eh +ir +hu +hu +hu +Ar +nI pE Ix ye @@ -17298,33 +17287,33 @@ nc Ao pE Dp -aA -NG -IM -IM -kq -Is -aA -Nu +nI +UF +Wm +Wm +PY +Ar +nI +VH pE -QB -QB -QB -QB -QB +id +id +id +id +id kU -aC -Xw -sk -tz -OZ -QB -QB +Ld +tl +BE +QW +KI +id +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -17333,13 +17322,13 @@ tq tq tq Ke -QB -QB +id +id DG IY -QB -QB -QB +id +id +id wh Zu Zu @@ -17356,17 +17345,17 @@ qa Aq WC Mu -QB +id pE -Nu -aA -aA -bO -aA -aA -aA -aA -aA +VH +nI +nI +KB +nI +nI +nI +nI +nI pE gC ag @@ -17375,33 +17364,33 @@ ag lD pE xV -Sh -aA -aA -aA -bO -aA -aA -Nu +zf +nI +nI +nI +KB +nI +nI +VH pE -QB -QB -QB -QB -QB -QB -gZ +id +id +id +id +id +id +JK kU qT -Wl +TG kU -QB +id kU ZV kU -QB -QB -QB +id +id +id Ke tq tq @@ -17410,14 +17399,14 @@ tq tq Ke Ke -QB -FI +id +NB bl -FI -QB -QB -lZ -Pk +NB +id +id +az +SM Zu Zu WH @@ -17432,18 +17421,18 @@ Hg Tw vw Mu -QB -QB +id +id pE -Nu -aA -NG -pw -fg -fg -fg -Is -aA +VH +nI +UF +sl +hu +hu +hu +Ar +nI pE da da @@ -17452,33 +17441,33 @@ da da pE PC -aA -NG -IM -IM -mK -Is -aA -Nu +nI +UF +Wm +Wm +Hc +Ar +nI +VH pE -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id fb VX qT aD kX -QB -QB +id +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -17486,14 +17475,14 @@ tq (48,1,1) = {" tq Ke -QB -QB -QB +id +id +id eF -QB -QB -nR -Qr +id +id +As +XB lg ae ae @@ -17510,52 +17499,52 @@ Hg zH Bc Bc -QB +id pE -Nu -aA -aA -bO -aA -aA -aA -aA -aA +VH +nI +nI +KB +nI +nI +nI +nI +nI UD -aA -aA -aA -aA -aA +nI +nI +nI +nI +nI MV -xm -aA -aA -aA -aA -bO -aA -aA -Nu +KE +nI +nI +nI +nI +KB +nI +nI +VH pE -QB -QB -QB -QB -QB +id +id +id +id +id lK lK lK -lv -DL +DZ +lF lK lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -17563,15 +17552,15 @@ tq (49,1,1) = {" tq Ke -QB -QB -QB +id +id +id eF -QB -lZ -Qr -wH -DB +id +az +XB +Kg +iw xU xU xU @@ -17579,47 +17568,47 @@ ls Mh PN Zu -gU -nA +Up +mj Zu Zu KF mh -QB -QB -QB +id +id +id pE UD -aA -aA -bO -aA -aA -aA -aA -aA +nI +nI +KB +nI +nI +nI +nI +nI HR -aA -aA -aA -aA -aA +nI +nI +nI +nI +nI HR -xm -aA -aA -aA -aA -bO -aA -aA +KE +nI +nI +nI +nI +KB +nI +nI UD pE -QB -QB -QB -QB -QB +id +id +id +id +id lK Pj pi @@ -17627,12 +17616,12 @@ vu Cm AE lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -17640,63 +17629,63 @@ tq (50,1,1) = {" tq Ke -QB -QB -QB +id +id +id eF -QB +id wh Pp -CR -gU -Ol +ZS +Up +vz Zu JI JI JI bt JI -Xs -nV -ur +cv +QF +ts Zu hS yL -QB -Ii -QB +id +cC +id pE Rs -zP -zP -Dh -Ih -Ih -Ih -Ih -pc -Pb -Ih -Ih -CK -Ih -Ih -Pb -cl -Ih -Ih -Ih -Ih -Qj -zP -zP +uU +uU +cV +FJ +FJ +FJ +FJ +Rl +rt +FJ +FJ +Bq +FJ +FJ +rt +pM +FJ +FJ +FJ +FJ +Zg +uU +uU yn pE -QB -QB -QB -QB -QB +id +id +id +id +id lK kK fS @@ -17704,12 +17693,12 @@ Kn jG WS lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -17718,20 +17707,20 @@ tq tq Ke Ke -QB -QB +id +id eF -QB +id fa Nn tL Zu -fv -io +aa +Ut ty ty ty -ed +Ww ty ty ty @@ -17739,41 +17728,41 @@ ty Zu EP ps -QB -QB -QB +id +id +id pE UD -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -TQ -iX -tF -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +zv +kw +oR +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI UD pE -QB -QB -QB -QB -QB +id +id +id +id +id lK ho lK @@ -17781,12 +17770,12 @@ Vl BU lK lK -FI +NB Rp -FI -QB -QB -QB +NB +id +id +id Ke tq tq @@ -17795,16 +17784,16 @@ tq tq tq Ke -QB -QB +id +id eF -QB +id Zu Zy nm Zu -fv -Hy +aa +Mx Aw Jk mn @@ -17816,41 +17805,41 @@ Aw Bc hS Pg -QB -QB -QB +id +id +id pE -Nu -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -aA -aA -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA -Nu +VH +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +nI +nI +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI +VH pE -QB -QB -QB -QB -QB +id +id +id +id +id lK Lz lK @@ -17858,12 +17847,12 @@ xA Ju YB lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -17872,16 +17861,16 @@ tq tq tq Ke -QB -QB +id +id eF -QB +id Zu Nn tL Zu -JT -Si +wV +oF ty gO ty @@ -17893,41 +17882,41 @@ ty Bc EP FM -QB -QB -QB +id +id +id pE -Nu -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -aA -aA -aA -aA -aA -Nu -aA -aA -aA -FA -xm -aA -aA -Nu +VH +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +nI +nI +nI +nI +nI +VH +nI +nI +nI +IK +KE +nI +nI +VH pE -QB -QB -QB -QB -QB +id +id +id +id +id lK mv lK @@ -17935,13 +17924,13 @@ fF HS fI lK -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} @@ -17949,16 +17938,16 @@ tq tq tq Ke -QB -FI +id +NB bl -FI +NB QI Au nm Zu -fv -Hy +aa +Mx ty ty ty @@ -17970,37 +17959,37 @@ ty Bc hS bn -QB -QB -QB +id +id +id pE -Nu -aA -aA -yW -MF -Nu -Nu -Nu -ww -Nu -Nu -Nu -Nu -Nu -Nu -Nu -ww -Nu -Nu -Nu -rE -GH -aA -aA -Nu +VH +nI +nI +Sj +ig +VH +VH +VH +BG +VH +VH +VH +VH +VH +VH +VH +BG +VH +VH +VH +Rb +Wo +nI +nI +VH pE -QB +id lK lK lK @@ -18008,33 +17997,33 @@ lK lK FB lK -vy +vr lK lK lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke Ke tq "} (55,1,1) = {" tq -QB +id Ke -QB -QB +id +id wp Rj NI GE HL Zu -fv +aa Ms Aw Jk @@ -18048,36 +18037,36 @@ Bc EP FM AN -QB -QB +id +id pE -Nu -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA -Nu +VH +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI +VH pE -QB +id lK nJ KL @@ -18087,13 +18076,13 @@ Om uJ nh lK -RN +SE lK -QB +id ZV -QB -QB -QB +id +id +id Ke Ke tq @@ -18101,17 +18090,17 @@ tq "} (56,1,1) = {" tq -QB +id Ke Ke -QB +id BS yr TM zR pN Zu -fv +aa Ms ty gO @@ -18125,36 +18114,36 @@ Bc hS bn cj -QB -QB +id +id pE -Nu -aA -aA -qj -IV -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -MO -wU -aA -aA -Nu +VH +nI +nI +ZO +Bx +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +Qh +ri +nI +nI +VH pE -QB +id lK qf oy @@ -18164,24 +18153,24 @@ mP RD MA lK -xr +jS lK -QB +id ZV -QB -QB -QB +id +id +id Ke Qo tq tq "} (57,1,1) = {" -QB -QB +id +id tq Ke -QB +id wp GQ KX @@ -18201,53 +18190,53 @@ ty Bc EP FM -QB -QB -QB +id +id +id pE UD -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI UD pE -QB +id lK Zk ze -km +Xt lK eW nd pj -na +KK rk lK -QB +id ZV -QB -QB -QB +id +id +id Ke Qo tq @@ -18258,9 +18247,9 @@ tq tq tq Ke -FI +NB bl -FI +NB LB tA kZ @@ -18278,37 +18267,37 @@ Aw Bc hS bn -QB -QB -QB +id +id +id pE Rs -zP -Ql -qU -aA -aA -aA -aA -Nu -Nu -Nu -Nu -Gq -Nu -Nu -Nu -Nu -aA -aA -aA -aA -qU -Ql -zP +uU +pT +zK +nI +nI +nI +nI +VH +VH +VH +VH +Vn +VH +VH +VH +VH +nI +nI +nI +nI +zK +pT +uU yn pE -QB +id lK PI RE @@ -18320,11 +18309,11 @@ Ex Tt fJ lK -QB +id ZV -QB -QB -QB +id +id +id Ke Qo tq @@ -18335,9 +18324,9 @@ tq tq tq Ke -QB +id RL -QB +id WH Nn BW @@ -18355,39 +18344,39 @@ ty Bc EP FM -QB -QB -QB +id +id +id pE UD -aA -aA -qU -aA -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA +nI +nI +zK +nI +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI UD pE -QB +id lK -JQ +Ov Rr LM lK @@ -18397,11 +18386,11 @@ EZ Ym oK lK -QB +id ZV -QB -QB -QB +id +id +id Ke Qo tq @@ -18412,9 +18401,9 @@ tq tq tq Ke -QB +id RL -QB +id WH Zy kZ @@ -18432,53 +18421,53 @@ ty Bc hS yL -QB -QB -QB +id +id +id pE -Nu -aA -aA -yW -IV -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -MO -GH -aA -aA -Nu +VH +nI +nI +Sj +Bx +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +Qh +Wo +nI +nI +VH pE -QB +id lK mE CX cw Pl -gM +Yi GF zC Ym zk lK -QB +id ZV -QB -QB -QB +id +id +id Ke Ke tq @@ -18489,9 +18478,9 @@ tq tq tq Ke -QB +id RL -QB +id WH Nn Fz @@ -18499,7 +18488,7 @@ Bc Bc ty VI -Oe +fP bg Pa bV @@ -18509,37 +18498,37 @@ Aw Bc EP ps -QB -QB -QB +id +id +id pE -Nu -aA -aA -xm -FA -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA -Nu +VH +nI +nI +KE +IK +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI +VH pE -QB +id lK co Sn @@ -18551,12 +18540,12 @@ pf ZD Cr lK -FI +NB Rp -FI -QB -QB -QB +NB +id +id +id Ke tq tq @@ -18566,9 +18555,9 @@ tq tq tq Ke -QB +id RL -QB +id WH HA qb @@ -18576,7 +18565,7 @@ Ey Bc ty ky -Sm +ew ty Pa WG @@ -18586,37 +18575,37 @@ ty Bc hS ZY -QB -QB -QB +id +id +id pE -Nu -aA -aA -qj -MF -Nu -Nu -Nu -ww -Nu -Nu -Nu -Nu -Nu -Nu -Nu -ww -Nu -Nu -Nu -rE -wU -aA -aA -Nu +VH +nI +nI +ZO +ig +VH +VH +VH +BG +VH +VH +VH +VH +VH +VH +VH +BG +VH +VH +VH +Rb +ri +nI +nI +VH pE -QB +id lK xC ei @@ -18628,24 +18617,24 @@ rI OS kp lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke Ke tq "} (63,1,1) = {" tq -QB +id Ke Ke -QB +id RL -QB +id Bc Bc TO @@ -18655,7 +18644,7 @@ ty ty ty ty -Xn +en ty ty ty @@ -18663,37 +18652,37 @@ ty Bc CV Mu -QB -QB -QB +id +id +id pE -Nu -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -aA -aA -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA -Nu +VH +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +nI +nI +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI +VH pE -QB +id lK FX LN @@ -18705,13 +18694,13 @@ lK Bk lK lK -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} @@ -18719,11 +18708,11 @@ tq tq tq Ke -QB -QB +id +id RL -QB -QB +id +id Bc Bc af @@ -18733,44 +18722,44 @@ Bc Bc WH xL -qN -EF -EF +Vb +Bi +Bi uv Bc jt -QB -QB -QB -QB +id +id +id +id pE -Nu -aA -aA -xm -aA -aA -aA -aA -Nu -aA -aA -aA -aA -aA -aA -aA -Nu -aA -aA -aA -aA -xm -aA -aA -Nu +VH +nI +nI +KE +nI +nI +nI +nI +VH +nI +nI +nI +nI +nI +nI +nI +VH +nI +nI +nI +nI +KE +nI +nI +VH pE -QB +id lK dP pL @@ -18782,13 +18771,13 @@ lK Lw zb lK -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} @@ -18796,12 +18785,12 @@ tq tq tq Ke -QB -QB +id +id RL -QB -QB -QB +id +id +id in Ic aZ @@ -18816,38 +18805,38 @@ WH WH lg aL -QB -QB -QB -QB +id +id +id +id pE UD -aA -aA -xm -aA -aA -aA -aA -Nu -aA -nK -aA -aA -aA -nK -aA -Nu -aA -aA -aA -aA -xm -aA -aA +nI +nI +KE +nI +nI +nI +nI +VH +nI +eu +nI +nI +nI +eu +nI +VH +nI +nI +nI +nI +KE +nI +nI UD pE -QB +id lK dP uc @@ -18855,17 +18844,17 @@ dP kE xw lK -YV +UL Lw WK lK -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} @@ -18873,11 +18862,11 @@ tq tq tq Ke -QB -QB +id +id RL -QB -QB +id +id Bc JP bV @@ -18893,56 +18882,56 @@ gF gF fX Sd -QB -QB -QB -QB +id +id +id +id pE Rs -zP -zP -op -Ih -Ih -Ih -Ih -Ih -Ih -Qg -Ih -Pb -Ih -HC -Ih -Ih -Ih -Ih -Ih -Ih -CB -zP -zP +uU +uU +UP +FJ +FJ +FJ +FJ +FJ +FJ +vd +FJ +rt +FJ +SR +FJ +FJ +FJ +FJ +FJ +FJ +GP +uU +uU yn pE -QB +id lK dP Lw dP -Wy +lU xw lK Dx Lw Su lK -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} @@ -18950,11 +18939,11 @@ tq tq tq Ke -QB -FI +id +NB bl -FI -QB +NB +id Bc iA gN @@ -18969,39 +18958,39 @@ Tw Tw Vj WP -QB -QB -QB -QB -QB +id +id +id +id +id pE UD -aA -aA -zP -aA -aA -aA -aA -aA -aA -aA -aA -Ql -aA -aA -aA -aA -aA -aA -aA -aA -zP -aA -aA +nI +nI +uU +nI +nI +nI +nI +nI +nI +nI +nI +pT +nI +nI +nI +nI +nI +nI +nI +nI +uU +nI +nI UD pE -QB +id lK fy ga @@ -19009,16 +18998,16 @@ fy gm TR lK -uX +PZ QQ pC lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -19027,11 +19016,11 @@ tq tq Ke Ke -QB +id kU fo -QB -QB +id +id Bc DT Vt @@ -19040,45 +19029,45 @@ Zu Zu Zu FP -fv -xM -jr -jr +aa +nG +VG +VG Zu bN -QB -QB -QB -QB -QB +id +id +id +id +id pE -Nu -aA -aA -zP -aA -aA -aA -aA -aA -aA -aA -aA -zP -aA -aA -aA -aA -aA -aA -aA -aA -zP -aA -aA -Nu +VH +nI +nI +uU +nI +nI +nI +nI +nI +nI +nI +nI +uU +nI +nI +nI +nI +nI +nI +nI +nI +uU +nI +nI +VH pE -QB +id lK lK lK @@ -19090,12 +19079,12 @@ lK lK lK lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -19103,108 +19092,108 @@ tq (69,1,1) = {" Ke Ke -QB +id yg wg pH -QB -QB +id +id Bc Bc Vr VR Zu -fv -fv -Ol +aa +aa +vz yh -fv -fv -fv +aa +aa +aa Zu Zu IP -QB -QB -QB -QB +id +id +id +id pE -Nu -Nu +VH +VH UD ll UD -Nu -Nu -Nu -Nu -Nu -Nu +VH +VH +VH +VH +VH +VH UD ll UD -Nu -Nu -Nu -Nu -Nu -Nu +VH +VH +VH +VH +VH +VH UD ll UD -Nu -Nu +VH +VH pE -QB +id lK sv cK -vX -eo -Gv -Ae -OK -Kr +SJ +Rq +ya +Mm +oY +Jr GR lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq "} (70,1,1) = {" Ke -QB -QB +id +id xx kU -QB -QB +id +id Bc Bc Bc ZR ps -fv +aa Zu Zu -NN +Kb yh Zu Zu Zu -NN +Kb xJ Zu -sI -QB -QB -QB +oH +id +id +id pE XF pE @@ -19232,7 +19221,7 @@ pE pE pE pE -QB +id lK Xf HF @@ -19242,24 +19231,24 @@ RG sh Lk BH -et +JJ lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq "} (71,1,1) = {" Ke -QB -FI +id +NB gD -aY +Yj ty ty ty @@ -19267,74 +19256,74 @@ ty ph TW ps -jr +VG Zu Zu -qg -SH +vD +cZ Zu Zu Zu -Pv -SH +lH +cZ wM -Qc -Ky -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +lx +Ql +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id lK PT Td ih mp -kr +TK YX Ty NP -aU +VU lK -FI +NB Rp -FI -QB -QB -QB +NB +id +id +id Ke tq tq "} (72,1,1) = {" Ke -QB -QB +id +id ZV ty yH @@ -19344,49 +19333,49 @@ PB ZE Bo ps -gU -VA +Up +Nx Zu -xa +jx Zu Zu FP Zu -Uf +Mq Zu Zu -Ol -nA -RZ -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +vz +mj +VT +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id lK nl Vq @@ -19398,20 +19387,20 @@ oA oS TH lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq "} (73,1,1) = {" Ke -QB -QB +id +id ZV ty Iv @@ -19421,13 +19410,13 @@ lu Bc Jl XR -jr -xM +VG +nG Zu Zu fa -VA -nA +Nx +mj Zu Zu fa @@ -19439,30 +19428,30 @@ ty ty yh wr -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id lK lK VJ @@ -19475,20 +19464,20 @@ yd VS Oq lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq "} (74,1,1) = {" Ke -QB -QB +id +id ZV ty FS @@ -19498,13 +19487,13 @@ lu Bc hS RK -Ol +vz Zu Zu -Ol -Be -gU -jr +vz +Rf +Up +VG fa fa fa @@ -19516,48 +19505,48 @@ PM ty ty jK -AD -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +bx +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id lK Fq sc GZ -EO +Hm tg AL GO -mU +AV NZ sJ lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -19565,7 +19554,7 @@ tq (75,1,1) = {" Ke Ke -QB +id ZV ty gJ @@ -19575,48 +19564,48 @@ eP du zM yh -Ol +vz Zu -NN +Kb Zu Zu fa -fv -NN +aa +Kb Zu Zu -fv -fv +aa +aa Ft pq Gf AI ty -vZ -Mk -QB -QB -QB -QB -QB -QB +qC +YL +id +id +id +id +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id Qo Qo Qo -QB +id lK qR Cp @@ -19629,20 +19618,20 @@ DX gw ne lK -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} (76,1,1) = {" tq Ke -QB +id ZV ty ty @@ -19652,66 +19641,66 @@ ty Gn Zu jy -Ol +vz Zu -er -SH +hA +cZ fa fa -Ol -oV -SH +vz +RP +cZ Zu -fv -fv +aa +aa Ft pq pq vI ty -sf -Mk -QB -QB -QB -QB -QB +qu +YL +id +id +id +id +id Qo -QB +id Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id Qo Qo Qo -QB -QB +id +id lK ul NH xO KR -nO +ry KR KR Wj XD lK lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -19719,27 +19708,27 @@ tq (77,1,1) = {" tq Ke -FI +NB Rp -FI -QB +NB +id Bc WH WH WH wO -fv -fv +aa +aa Zu -Uf +Mq Zu fa -fv -Tu -Uf +aa +PS +Mq Zu Zu -Bz +sW EL ty sN @@ -19748,47 +19737,47 @@ pq zS Eg fK -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id Qo Qo -QB +id lK lK -BP -BP -BP +JO +JO +JO lK -Yo -Yo -Yo +Dy +Dy +Dy lK lK lK -QB +id ZV -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -19796,27 +19785,27 @@ tq (78,1,1) = {" tq Ke -QB +id nj la -QB +id Bc WH WH hy Zu -fv -aP +aa +He Zu -Ol -Ol -Ol +vz +vz +vz Zu -sF -Ol +fk +vz Zu -Ol -AD +vz +bx yh Gw pq @@ -19824,31 +19813,31 @@ Gf ty ty AG -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id lK Lw Lw @@ -19858,13 +19847,13 @@ Lw Lw Lw lK -QB -QB -QB +id +id +id ZV -QB -QB -QB +id +id +id Ke Ke tq @@ -19876,56 +19865,56 @@ Ke Ke HP cL -QB +id Bc WH WH Tz Zu -gU -nA -Ol +Up +mj +vz Zu Zu -Ol -Ol -QT +vz +vz +WE Zu fa yh yh yh ty -ke +vh IQ ty -rh -gU -QB -QB -QB -QB +Kj +Up +id +id +id +id Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id lK pe pl @@ -19935,13 +19924,13 @@ pe Ax rO lK -QB -QB -QB +id +id +id ZV -QB -QB -QB +id +id +id Ke Qo tq @@ -19951,58 +19940,58 @@ tq tq tq Ke -QB +id ZV -QB +id Bc Bc WH Zu Zu -fv -VA -VA -Qc +aa +Nx +Nx +lx bb Zu -Ol -fv +vz +aa fa fa -VA -fv +Nx +aa yh ty un TT ty -oN -UR -QB -QB +PL +ca +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id lK Lw Lw @@ -20012,13 +20001,13 @@ Lw Lw Lw lK -QB -QB -FI +id +id +NB Rp -FI -QB -QB +NB +id +id Ke Qo tq @@ -20030,56 +20019,56 @@ tq Ke Ke ZV -QB +id Bc Bc Bc Zu Zu JI -jg +ZU xz -Ro -Ol -Ol +Yh +vz +vz yh fa -fv +aa rY fa -fv -Mk +aa +YL ty un bk ty -To -Qc -QB -QB +gR +lx +id +id Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id lK lK lK @@ -20090,12 +20079,12 @@ lK lK lK lK -QB -QB +id +id ZV -QB -QB -QB +id +id +id Ke Ke tq @@ -20107,8 +20096,8 @@ tq tq Ke ZV -QB -QB +id +id Bc WH WH @@ -20116,64 +20105,64 @@ bN ty ty ty -VF +Op ty -QD +iW KC KC Ik Ik Ik -gU -AM +Up +cI ty un IX ty Mg WH -QB -QB +id +id Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Qo Qo Qo Qo -QB -QB -QB -QB -QB +id +id +id +id +id cW Fc -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -20184,8 +20173,8 @@ tq Ke Ke ZV -QB -QB +id +id WH WH WH @@ -20195,7 +20184,7 @@ ai Vm gH rD -AD +bx yh Zu Zu @@ -20209,49 +20198,49 @@ Fg ty CU WH -QB -QB +id +id Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Qo Qo bv Qo Qo -QB -QB -QB -QB -QB +id +id +id +id +id VV OL -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq "} @@ -20259,10 +20248,10 @@ tq tq tq Ke -QB +id ZV -QB -QB +id +id Ek WH Zu @@ -20285,49 +20274,49 @@ ty ty ty CU -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id EI Qo cH Qo Qo Qo -QB -QB -QB -QB +id +id +id +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke Ke tq @@ -20336,11 +20325,11 @@ tq tq tq Ke -QB +id ZV -QB -QB -QB +id +id +id fn Zu Ms @@ -20351,10 +20340,10 @@ lV rD yh WO -Xo -gQ -gQ -Xo +zA +zL +zL +zA Zu fa fa @@ -20362,64 +20351,64 @@ NM qs We zX -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id IB -GA +NE IB IB Qo Qo Qo Qo -QB +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq "} (86,1,1) = {" tq -QB +id Ke -QB +id ZV -QB -QB -QB -jR -fv +id +id +id +hv +aa Ms ty sM @@ -20428,75 +20417,75 @@ Jv rD yh Zu -Ol -Qc -Qc +vz +lx +lx fs Zu fa tv -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id Qo Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Cg sV dg IB Qo -QB -QB -QB -QB +id +id +id +id ZV -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq "} (87,1,1) = {" tq -QB +id Ke -QB +id ZV -QB -QB -QB -QB -hF +id +id +id +id +Ny Ms ty ty @@ -20505,60 +20494,60 @@ ty ty xB Zu -QT -Qc +WE +lx Zu Zu -Qc +lx Jx -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id lh TI lh -QB -QB -QB -QB -QB -FI +id +id +id +id +id +NB Rp -FI -QB -QB -QB -QB +NB +id +id +id +id Ke tq tq @@ -20567,12 +20556,12 @@ tq tq tq Ke -FI +NB Rp -FI -QB -QB -QB +NB +id +id +id UJ fa Zu @@ -20585,57 +20574,57 @@ KC KC KC WO -Xo -za -QB -QB -QB -QB -QB -QB +zA +Ba +id +id +id +id +id +id Qo Qo -QB -QB -QB -QB +id +id +id +id Qo -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id Qo -QB -QB -QB +id +id +id kU -QB -QB -FI +id +id +NB kU kU -QB -QB -Zx +id +id +kM ES hl zc -Zx -QB -QB -QB -FI +kM +id +id +id +NB kU Ox -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq @@ -20644,51 +20633,51 @@ tq tq tq Ke -QB +id eB kU -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id yh yh JI JI -cr -sd -QB -QB -QB -QB -QB -QB +cT +Gh +id +id +id +id +id +id Qo Qo -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id Qo -QB -QB -QB +id +id +id yg Bw Ti @@ -20699,7 +20688,7 @@ od od Zp eH -jI +Sv eH Zp od @@ -20708,11 +20697,11 @@ od my MX pH -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq @@ -20721,75 +20710,75 @@ tq tq Ke Ke -QB +id Ci Iu HW -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Qo Qo -QB -QB -QB +id +id +id mq bM kU -FI -QB -QB -QB -QB -Zx +NB +id +id +id +id +kM vm ij Jy -Zx -QB -QB -QB -FI -QB -QB -QB -QB -QB -QB -QB +kM +id +id +id +NB +id +id +id +id +id +id +id Ke Ke tq @@ -20797,77 +20786,77 @@ tq (91,1,1) = {" tq Ke -QB -QB -QB +id +id +id kU oa kU -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Qo Qo -QB -QB -QB -QB +id +id +id +id xx kU kU -QB -QB -QB -QB -Zx +id +id +id +id +kM Te ev YU Tx -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id Ke tq "} @@ -20877,57 +20866,57 @@ Ke Ke Ke Ke -QB +id Ci Iu HW -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id ZV kU kU -QB -QB -QB -QB -QB +id +id +id +id +id rj qK GD @@ -20938,73 +20927,73 @@ IB IB IB IB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id Ke Ke tq "} (93,1,1) = {" tq -QB -QB +id +id tq Ke Ke -QB +id kU oa kU -FI -QB -QB -QB -QB -FI -QB -QB -QB -Oy -QB -QB -QB -QB -QB -QB -FI -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +NB +id +id +id +id +NB +id +id +id +LQ +id +id +id +id +id +id +NB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id ZV kU kU -QB -QB -QB -QB -Zx +id +id +id +id +kM wB qK Uk @@ -21012,28 +21001,28 @@ Mj IB Ez Ma -ym +jk gP IB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id Ke tq tq "} (94,1,1) = {" tq -QB +id tq tq tq Ke Ke -QB +id Ci CC my @@ -21043,7 +21032,7 @@ od od my EG -SF +Th EG my od @@ -21055,48 +21044,48 @@ od my WW HW -QB -QB -QB -QB -FI -QB -QB -QB -QB -QB -QB -FI -QB -QB -QB -QB -QB -FI +id +id +id +id +NB +id +id +id +id +id +id +NB +id +id +id +id +id +NB kU Ox kU -QB -QB -QB -QB -QB -QB -Zx -QB +id +id +id +id +id +id +kM +id IB -WU +HN IB OO SW qy pp IB -QB -QB -QB -QB -QB +id +id +id +id +id Ke Ke tq @@ -21104,32 +21093,32 @@ tq "} (95,1,1) = {" tq -QB +id tq tq tq tq Ke Ke -QB -QB -FI -QB -QB -QB -QB -FI +id +id +NB +id +id +id +id +NB Xk GM ox -FI -QB -QB -QB -QB -QB -QB -FI +NB +id +id +id +id +id +id +NB kU qQ od @@ -21152,15 +21141,15 @@ od my MX pH -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id IB Zv nv @@ -21169,11 +21158,11 @@ Xl KW DH IB -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq @@ -21181,55 +21170,55 @@ tq "} (96,1,1) = {" tq -QB +id tq tq tq tq tq Ke -QB -QB -QB -QB -QB -FI -QB +id +id +id +id +id +NB +id Zc Ig xg vk Zc -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -FI -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +NB +id +id +id +id +id kU -FI -QB -QB -QB -QB -QB -FI +NB +id +id +id +id +id +NB kU -QB -QB +id +id lr lr lr @@ -21246,10 +21235,10 @@ jl wt mi IB -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -21258,18 +21247,18 @@ tq "} (97,1,1) = {" tq -QB +id tq tq tq tq tq Ke -QB -QB -QB -QB -FI +id +id +id +id +NB qq ZW GG @@ -21284,29 +21273,29 @@ lk VQ cQ cQ -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id lr vW hz @@ -21323,10 +21312,10 @@ JY Xv if IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -21340,18 +21329,18 @@ tq tq tq tq -QB +id Ke -QB -QB -QB -QB -QB +id +id +id +id +id FL nu If -XN -yk +If +Hi WB DE DE @@ -21361,29 +21350,29 @@ DE aK DE cQ -FI -QB -QB -QB +NB +id +id +id mx -QB -Oy +id +LQ ws ws ws -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id lr rK oE @@ -21397,13 +21386,13 @@ jV RU IE cb -lQ +Nd Me IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -21417,13 +21406,13 @@ tq tq tq tq -QB +id Ke Ke Ke Ke -QB -QB +id +id FL xe GW @@ -21449,18 +21438,18 @@ cS cS yA EJ -FI +NB Zc Zc Zc Zc Zc Zc -QB -QB -QB -QB -QB +id +id +id +id +id lr vW hz @@ -21472,15 +21461,15 @@ bu IB Ef lp -Zh +oz Tv nS pp IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -21493,14 +21482,14 @@ tq tq tq tq -QB -QB -QB +id +id +id tq tq Ke -QB -QB +id +id FL wq Fa @@ -21530,14 +21519,14 @@ ZX Zc Sk bX -hX +Ya xk Zc -QB -QB -QB -QB -QB +id +id +id +id +id lr lr lr @@ -21554,10 +21543,10 @@ Un sG sG IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -21568,16 +21557,16 @@ tq tq tq tq -QB -QB -QB -QB -QB +id +id +id +id +id tq Ke Ke -QB -QB +id +id FL wq yC @@ -21610,15 +21599,15 @@ dq rQ Dr Zc -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id IB gs sA @@ -21631,13 +21620,13 @@ OT uO IH IB -QB -QB -QB -QB +id +id +id +id Ke Ke -QB +id tq tq "} @@ -21646,15 +21635,15 @@ tq tq tq tq -QB -QB +id +id tq tq tq Ke -QB -QB -QB +id +id +id FL wq yC @@ -21679,23 +21668,23 @@ Ss Ss BB wq -Wg +Ve ZX Zc UM bX -aR +mD XZ Zc -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id IB Oa IB @@ -21704,15 +21693,15 @@ IB IB SK hJ -BI -tQ +ao +Xh Ul IB -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq @@ -21722,16 +21711,16 @@ tq tq tq tq -QB -QB -QB +id +id +id tq tq tq Ke -QB -QB -QB +id +id +id FL PJ yC @@ -21756,7 +21745,7 @@ Ss Ss BB MG -Ay +HE cQ Zc Zc @@ -21764,32 +21753,32 @@ Zc Zc Zc Zc -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id IB -kx -no -lj -em +pU +kv +Kq +rn IB IB IB -nM +sZ IB IB IB -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq @@ -21798,8 +21787,8 @@ tq (104,1,1) = {" tq tq -QB -QB +id +id tq tq tq @@ -21807,8 +21796,8 @@ tq tq Ke Ke -QB -FI +id +NB mQ Qi yC @@ -21833,27 +21822,27 @@ Ss Ss BB Qi -rs +MD DE -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id IB -kx +pU FZ -lj +Kq IC IB lw @@ -21862,11 +21851,11 @@ rN CN vU IB -QB -QB -QB -QB -QB +id +id +id +id +id Ke tq tq @@ -21875,7 +21864,7 @@ tq (105,1,1) = {" tq tq -QB +id tq tq tq @@ -21884,8 +21873,8 @@ tq tq tq Ke -QB -QB +id +id FL Qi yC @@ -21912,21 +21901,21 @@ BB Qi DE DE -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id IB nE ol @@ -21939,10 +21928,10 @@ OB pk tM IB -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -21961,8 +21950,8 @@ tq tq tq Ke -QB -QB +id +id FL kY yC @@ -21988,22 +21977,22 @@ Ss BB Qi DE -mW -FI +Ll +NB aH kU kU kU MB -FI +NB Ko uN -NR -NR +CJ +CJ uN eX -FI -QB +NB +id IB db UA @@ -22016,10 +22005,10 @@ dw cu tM IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -22038,7 +22027,7 @@ tq tq tq Ke -QB +id ZA TE Qi @@ -22075,8 +22064,8 @@ JV JV DM Bf -ap -ap +nn +nn Bf Yk zt @@ -22093,10 +22082,10 @@ dw Ki YO IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -22113,10 +22102,10 @@ tq tq tq tq -QB +id Ke -QB -QB +id +id FL Qi yC @@ -22170,10 +22159,10 @@ zn Dz tM IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -22188,12 +22177,12 @@ tq tq tq tq -QB -QB -QB +id +id +id Ke Ke -QB +id FL Qi yC @@ -22233,10 +22222,10 @@ Se XJ XJ XJ -YG +zs OV Mc -jd +CT kS ch mz @@ -22247,10 +22236,10 @@ Hn kR vO IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -22265,12 +22254,12 @@ tq tq tq tq -QB -QB -QB +id +id +id tq Ke -FI +NB WR Co yC @@ -22296,22 +22285,22 @@ Ss BB Qi an -kI -FI +Zj +NB BV -QB -QB -QB -QB -FI +id +id +id +id +NB WX np AA np nr MB -FI -QB +NB +id IB IB IB @@ -22324,10 +22313,10 @@ IB IB IB IB -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -22347,8 +22336,8 @@ tq tq tq Ke -QB -QB +id +id oU yC Ss @@ -22374,37 +22363,37 @@ BB Qi DE sS -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke Ke @@ -22424,8 +22413,8 @@ tq tq tq Ke -QB -QB +id +id Zs mk Ss @@ -22451,59 +22440,59 @@ BB Qi Yg sS -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -Ke -Ke -Ke -Ke -Ke -QB -QB -QB -QB -QB -QB -QB -Ke -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +Ke +Ke +Ke +Ke +Ke +id +id +id +id +id +id +id +Ke +id tq "} (113,1,1) = {" tq tq tq -QB -QB +id +id tq tq tq tq tq -QB +id Ke -QB -QB -FI +id +id +NB hb Ss Ss @@ -22528,38 +22517,38 @@ BB eA DW uw -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq tq tq Ke -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id Ke Ke tq @@ -22568,19 +22557,19 @@ tq (114,1,1) = {" tq tq -QB -QB -QB -QB +id +id +id +id tq tq tq tq -QB +id Ke -QB -QB -QB +id +id +id OR Ss Ss @@ -22604,26 +22593,26 @@ Ss iv Wu of -FI -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB -QB +NB +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id +id Ke Ke tq @@ -22632,10 +22621,10 @@ tq tq Ke Ke -QB -QB -QB -QB +id +id +id +id Ke Ke tq @@ -22644,12 +22633,12 @@ tq "} (115,1,1) = {" tq -QB -QB -QB -QB -QB -QB +id +id +id +id +id +id tq tq tq @@ -22657,41 +22646,41 @@ tq Ke Ke Ke -QB -ki -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -uk -xF -QB -QB -QB -QB +id +Qq +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +SS +QO +id +id +id +id Ke Ke Ke Ke Ke -QB -QB -QB -QB +id +id +id +id Ke Ke Ke @@ -22699,7 +22688,7 @@ Ke Ke Ke Ke -QB +id Ke Ke tq @@ -22709,10 +22698,10 @@ tq tq tq Ke -QB -QB -QB -QB +id +id +id +id Ke tq tq @@ -22721,11 +22710,11 @@ tq "} (116,1,1) = {" tq -QB -QB -QB -QB -QB +id +id +id +id +id tq tq tq @@ -22756,7 +22745,7 @@ kU kU kU hK -QB +id Ke Ke Ke @@ -22784,11 +22773,11 @@ tq tq tq tq -QB +id Ke -QB -QB -QB +id +id +id Ke Ke tq @@ -22800,7 +22789,7 @@ tq tq tq tq -QB +id tq tq tq @@ -22812,40 +22801,40 @@ tq tq tq Ke -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn -hn +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk +Hk Ke Ke tq tq tq tq -QB -QB -QB -QB +id +id +id +id tq -QB -QB +id +id tq tq tq @@ -22865,7 +22854,7 @@ tq Ke Ke Ke -QB +id Ke tq tq @@ -22916,12 +22905,12 @@ tq tq tq tq -QB -QB -QB +id +id +id tq tq -QB +id tq tq tq diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index dc7fd7e0b454..a8413ce407c3 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -950,19 +950,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) -"dJ" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "dK" = ( /obj/effect/decal/cleanable/blood/gibs, /obj/structure/cable{ @@ -1324,16 +1311,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) -"eT" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/item/paper{ - name = "Cheap Kalixcian Phrasebook"; - default_raw_text = "Rsku suok sz zalo - My sugarcube is full of eels." - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/spacemall/shop) "eU" = ( /obj/structure/mirror{ pixel_y = -30 @@ -1877,16 +1854,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/ruin/space/has_grav/spacemall/maint) -"hh" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "hj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 6 @@ -2161,6 +2128,16 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/shop2) +"ii" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/spacemall/maint) "im" = ( /obj/effect/turf_decal/corner/transparent/red/diagonal, /obj/structure/disposalpipe/junction/yjunction{ @@ -2972,18 +2949,6 @@ "ll" = ( /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall) -"lm" = ( -/obj/machinery/door/window{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/spacemall/shop) "ln" = ( /obj/structure/rack, /obj/effect/turf_decal/siding/thinplating/dark/end{ @@ -3044,6 +3009,15 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall) +"lw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/spacemall/maint) "lx" = ( /obj/effect/turf_decal/corner/transparent/black/diagonal, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -4693,22 +4667,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall) -"rp" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "rq" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 1 @@ -5174,19 +5132,6 @@ }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/spacemall) -"sZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/spacemall/shop) "td" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -5225,6 +5170,21 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/dorms) +"tj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/spacemall/maint) "tl" = ( /obj/structure/rack, /obj/structure/window/reinforced/spawner, @@ -5929,24 +5889,6 @@ /obj/machinery/light/dim/directional/north, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall) -"vO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/spacemall/dorms) "vQ" = ( /mob/living/simple_animal/hostile/poison/giant_spider{ environment_smash = 0 @@ -6266,6 +6208,22 @@ /obj/effect/turf_decal/box/white, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) +"xh" = ( +/obj/effect/turf_decal/corner/opaque/blue/half, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ruin/space/has_grav/spacemall/shop2) "xo" = ( /obj/structure/rack, /obj/effect/turf_decal/siding/thinplating/dark, @@ -6898,21 +6856,6 @@ /obj/effect/decal/cleanable/plasma, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall) -"zA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/spacemall/shop) "zB" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/spider/stickyweb, @@ -7798,25 +7741,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) -"Dd" = ( -/obj/effect/turf_decal/corner/opaque/blue/half, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/ruin/space/has_grav/spacemall/shop2) "Df" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 @@ -8121,22 +8045,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) -"Ei" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "Ek" = ( /obj/machinery/camera/autoname{ dir = 6; @@ -9061,6 +8969,16 @@ /obj/effect/turf_decal/corner/transparent/green/diagonal, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/spacemall) +"Ht" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/spacemall/shop) "Hv" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile/indestructable, @@ -9245,6 +9163,16 @@ name = "bathroom floor" }, /area/ruin/space/has_grav/spacemall) +"Im" = ( +/obj/structure/rack, +/obj/effect/turf_decal/corner/transparent/black/diagonal, +/obj/item/paper{ + name = "Cheap Kalixcian Phrasebook"; + default_raw_text = "Rsku suok sz zalo - My sugarcube is full of eels." + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/spacemall/shop) "In" = ( /obj/structure/cable{ icon_state = "4-8" @@ -9379,22 +9307,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) -"IN" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "IO" = ( /obj/effect/decal/cleanable/blood/footprints{ dir = 1 @@ -9774,6 +9686,19 @@ }, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall) +"KJ" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating, +/area/ruin/space/has_grav/spacemall/maint) "KL" = ( /obj/effect/turf_decal/corner/transparent/blue{ dir = 4 @@ -10366,6 +10291,15 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall) +"ME" = ( +/obj/machinery/door/window{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/spacemall/shop) "MF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 10 @@ -11034,24 +10968,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/shop) -"Pc" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "Pe" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11686,6 +11602,21 @@ /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall) +"Rj" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/spacemall/maint) "Rk" = ( /obj/machinery/door/airlock/external/glass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, @@ -11940,6 +11871,22 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) +"Ss" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/spacemall) "St" = ( /obj/effect/turf_decal/corner/opaque/blue/three_quarters{ dir = 8 @@ -13241,32 +13188,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/dorms) -"Xz" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) -"XB" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "XC" = ( /obj/structure/table/reinforced, /turf/open/floor/plasteel, @@ -13497,24 +13418,6 @@ /obj/structure/table, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/spacemall/shop2) -"Yz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/spacemall/maint) "YA" = ( /obj/item/storage/toolbox/electrical, /obj/item/stack/sheet/mineral/uranium/five, @@ -14760,7 +14663,7 @@ tZ tZ yt ly -vO +qr fR dn BH @@ -16098,7 +16001,7 @@ QS fi YP zY -Yz +tj zY ED fl @@ -16184,7 +16087,7 @@ Kh Kh Hv bA -IN +vn YI Yo Bg @@ -16287,7 +16190,7 @@ Ge HY Yo PB -rp +KJ Hn Pq ki @@ -16394,11 +16297,11 @@ QL Vy Yo wE -dJ +ii pe he td -sZ +Ht VW hQ RH @@ -16444,11 +16347,11 @@ xZ Vy Yo sL -Xz +lw pe xY Sm -lm +ME LY Ac pe @@ -16466,7 +16369,7 @@ vS Wr xp TZ -Dd +xh Yo ZS Wb @@ -16535,7 +16438,7 @@ Kh qK sy sT -XB +NX NX PM og @@ -16618,7 +16521,7 @@ pQ St nh Yo -Ei +ZS cr Hv Kh @@ -16953,7 +16856,7 @@ nM iT pe UW -AG +Ss kv pU XD @@ -17144,7 +17047,7 @@ FM kj qK aA -Ei +ZS pe zS XC @@ -17199,7 +17102,7 @@ pe cA eW LP -zA +DU kr RG dO @@ -17494,7 +17397,7 @@ cD In Yo Yo -Pc +Rj pe pe pe @@ -17716,7 +17619,7 @@ to OV sp ny -hh +Vt Lt bQ Hv @@ -17747,7 +17650,7 @@ mt ps Wd pe -eT +Im TX LS Qf diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm index d91f8f24b4b6..5b3bedb82a7d 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm @@ -868,15 +868,6 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/plasteel/tech, /area/ruin/wasteplanet/abandoned_mechbay/engineering) -"iG" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/camera/autoname{ - dir = 2 - }, -/turf/open/floor/concrete/slab_4, -/area/ruin/wasteplanet/abandoned_mechbay/mainhall) "iR" = ( /obj/effect/turf_decal/trimline/transparent/neutral/filled/warning{ dir = 8 @@ -1196,9 +1187,6 @@ }, /turf/open/floor/concrete/slab_4, /area/ruin/wasteplanet/abandoned_mechbay/mainhall) -"ms" = ( -/turf/closed/mineral/random/wasteplanet, -/area/ruin/wasteplanet/abandoned_mechbay) "mx" = ( /obj/machinery/camera/autoname{ dir = 10 @@ -1359,6 +1347,9 @@ }, /turf/open/floor/concrete/slab_1, /area/ruin/wasteplanet/abandoned_mechbay/mainhall) +"oI" = ( +/turf/closed/mineral/random/wasteplanet, +/area/ruin/wasteplanet/abandoned_mechbay) "oL" = ( /obj/effect/turf_decal/trimline/transparent/neutral/filled/warning{ dir = 4 @@ -2589,9 +2580,6 @@ "DU" = ( /turf/closed/wall/concrete, /area/ruin/wasteplanet/abandoned_mechbay/mechlab) -"DV" = ( -/turf/closed/mineral/random/wasteplanet, -/area/overmap_encounter/planetoid/cave/explored) "DY" = ( /obj/machinery/door/airlock/engineering{ name = "Mech Lab"; @@ -3504,6 +3492,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/concrete/slab_1, /area/overmap_encounter/planetoid/cave/explored) +"Pl" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/camera/autoname, +/turf/open/floor/concrete/slab_4, +/area/ruin/wasteplanet/abandoned_mechbay/mainhall) "PF" = ( /obj/effect/turf_decal/trimline/transparent/neutral/filled/warning{ dir = 4 @@ -3892,6 +3887,9 @@ dir = 1 }, /area/ruin/wasteplanet/abandoned_mechbay/bay2) +"Ur" = ( +/turf/closed/mineral/random/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) "UH" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/plating/asteroid/wasteplanet, @@ -4317,12 +4315,12 @@ vd vd vd vd -DV +Ur vd -DV +Ur PK -DV -DV +Ur +Ur vd vd vd @@ -4360,19 +4358,19 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur vd vd vd @@ -4408,21 +4406,21 @@ vd vd vd vd -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur vd vd vd @@ -4456,22 +4454,22 @@ vd vd vd vd -DV -DV +Ur +Ur PK -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur PK PK -DV +Ur vd vd vd @@ -4504,24 +4502,24 @@ vd vd vd vd -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV +Ur +Ur +Ur +Ur eb -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK -DV -DV +Ur +Ur vd vd PK @@ -4552,30 +4550,30 @@ vd vd vd vd -DV -DV +Ur +Ur PK -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur eb eb tM Hh eb -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK -DV -DV +Ur +Ur vd -DV -DV -DV +Ur +Ur +Ur vd vd vd @@ -4600,13 +4598,13 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur eb tM eb @@ -4616,19 +4614,19 @@ yy yy yy qb -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd vd vd @@ -4648,13 +4646,13 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur eb kJ eb @@ -4665,20 +4663,20 @@ pG aw pG Tb -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur PK -DV +Ur PK -DV +Ur vd vd vd @@ -4695,14 +4693,14 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur eb eb tM @@ -4724,14 +4722,14 @@ dR dR eb eb -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd vd au -ms +oI vd vd vd @@ -4744,13 +4742,13 @@ vd vd vd vd -DV -DV -DV +Ur +Ur +Ur PK -DV -DV -DV +Ur +Ur +Ur tM eb ib @@ -4773,13 +4771,13 @@ DU dR dR eb -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK vd -ms +oI vd vd vd @@ -4793,11 +4791,11 @@ vd vd vd vd -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur eb Hh tM @@ -4822,15 +4820,15 @@ DU DU dR dR -DV -DV +Ur +Ur PK -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd -ms +oI vd vd "} @@ -4841,12 +4839,12 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur tM eb tM @@ -4873,12 +4871,12 @@ TL dR dR PK -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur PK vd vd @@ -4889,12 +4887,12 @@ vd vd vd vd -DV -DV -DV +Ur +Ur +Ur PK -DV -DV +Ur +Ur tM eb kJ @@ -4922,13 +4920,13 @@ uO Hm dR dR -DV -DV -DV +Ur +Ur +Ur PK -DV -DV -DV +Ur +Ur +Ur vd vd "} @@ -4938,12 +4936,12 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur eb eb Og @@ -4973,26 +4971,26 @@ NW dR dR PK -DV -DV -DV -DV -DV -ms -ms +Ur +Ur +Ur +Ur +Ur +oI +oI "} (15,1,1) = {" vd vd vd vd -DV -DV -DV +Ur +Ur +Ur PK -DV -DV -DV +Ur +Ur +Ur eb eb eb @@ -5022,11 +5020,11 @@ Kj Lv dR dR -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur vd vd "} @@ -5035,13 +5033,13 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur tM eb eb @@ -5071,11 +5069,11 @@ wq wq wq wq -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK vd "} @@ -5084,13 +5082,13 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur eb eb eb @@ -5120,26 +5118,26 @@ QM lt wq wq -DV +Ur PK -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd "} (18,1,1) = {" vd vd vd -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur PK -DV +Ur eb eb eb @@ -5169,26 +5167,26 @@ kD fY wq wq -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur vd vd "} (19,1,1) = {" vd vd -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur tM Hh tM @@ -5218,9 +5216,9 @@ DN IY wq wq -DV -DV -DV +Ur +Ur +Ur vd vd vd @@ -5229,14 +5227,14 @@ vd (20,1,1) = {" vd vd -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur tM eb eb @@ -5267,9 +5265,9 @@ DN Jf wq wq -DV -DV -DV +Ur +Ur +Ur vd vd vd @@ -5278,13 +5276,13 @@ vd (21,1,1) = {" vd vd -DV +Ur PK -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur tM eb eb @@ -5316,8 +5314,8 @@ BA pa wq wq -DV -DV +Ur +Ur vd vd vd @@ -5325,16 +5323,16 @@ vd vd "} (22,1,1) = {" -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur eb eb kJ @@ -5365,8 +5363,8 @@ UK wq wq wq -DV -DV +Ur +Ur vd vd vd @@ -5374,16 +5372,16 @@ vd vd "} (23,1,1) = {" -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV +Ur +Ur +Ur +Ur eb eb eb @@ -5414,8 +5412,8 @@ HK sG Hj wq -DV -DV +Ur +Ur PK vd vd @@ -5424,14 +5422,14 @@ vd "} (24,1,1) = {" vd -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur Og eb eb @@ -5463,30 +5461,30 @@ eR vj ec wq -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur vd vd "} (25,1,1) = {" vd vd -DV +Ur vd vd -DV -DV -DV +Ur +Ur +Ur eb eb Hh eb Og -DV -DV +Ur +Ur KG VG VG @@ -5512,10 +5510,10 @@ WT wq wq wq -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK vd vd @@ -5528,13 +5526,13 @@ vd vd vd vd -DV +Ur xz xz eb eb -DV -DV +Ur +Ur KG KG eA @@ -5549,7 +5547,7 @@ ir DC fd zE -iG +Pl aM iU YX @@ -5561,11 +5559,11 @@ Bw fX wq wq -DV +Ur PK -DV -DV -DV +Ur +Ur +Ur vd vd "} @@ -5579,10 +5577,10 @@ vd vd vd xz -DV -DV -DV -DV +Ur +Ur +Ur +Ur KG KG VG @@ -5610,10 +5608,10 @@ zR Vx wq wq -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd vd vd @@ -5629,8 +5627,8 @@ vd vd vd PK -DV -DV +Ur +Ur KG KG Dk @@ -5659,8 +5657,8 @@ Yf qH wq wq -DV -DV +Ur +Ur PK vd vd @@ -5678,8 +5676,8 @@ vd vd vd vd -DV -DV +Ur +Ur KG VG Om @@ -5708,10 +5706,10 @@ hv tW wq wq -DV -DV +Ur +Ur vd -DV +Ur vd vd vd @@ -5728,7 +5726,7 @@ vd vd vd vd -DV +Ur KG VG VG @@ -5757,8 +5755,8 @@ Ec YP wq wq -DV -DV +Ur +Ur vd vd vd @@ -5777,7 +5775,7 @@ vd vd vd vd -DV +Ur aX nF nF @@ -5806,12 +5804,12 @@ wq wq wq wq -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur vd "} (32,1,1) = {" @@ -5825,7 +5823,7 @@ vd vd vd vd -DV +Ur PK aX nF @@ -5855,10 +5853,10 @@ ET gJ Im Im -DV +Ur PK -DV -DV +Ur +Ur vd vd vd @@ -5872,10 +5870,10 @@ vd vd vd vd -DV -DV +Ur +Ur PK -DV +Ur aX nF JY @@ -5903,10 +5901,10 @@ uQ Vk gJ Im -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK vd vd @@ -5922,9 +5920,9 @@ vd vd vd xz -DV -DV -DV +Ur +Ur +Ur aX nF ey @@ -5952,11 +5950,11 @@ uQ Iq gJ Im -DV +Ur PK -DV -DV -DV +Ur +Ur +Ur vd vd vd @@ -6001,10 +5999,10 @@ uQ Iq gJ Im -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd vd vd @@ -6050,9 +6048,9 @@ uQ Hn gJ Im -DV -DV -DV +Ur +Ur +Ur vd vd vd @@ -6099,10 +6097,10 @@ Js CM gJ Im -DV -DV +Ur +Ur PK -DV +Ur vd vd vd @@ -6148,11 +6146,11 @@ iB CM gJ Im -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur vd vd vd @@ -6197,10 +6195,10 @@ Im Im Im Im -DV -DV -DV -DV +Ur +Ur +Ur +Ur vd vd vd @@ -6216,39 +6214,39 @@ vd vd vd vd -DV -DV -DV +Ur +Ur +Ur uu -DV -DV +Ur +Ur PK -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur Im Ad Im -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK -DV +Ur vd vd vd @@ -6265,38 +6263,38 @@ vd vd vd vd -DV -DV -DV +Ur +Ur +Ur uu -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur PK -DV +Ur vd -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur Im Im Im PK -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur vd vd vd @@ -6313,38 +6311,38 @@ vd vd vd vd -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV +Ur +Ur +Ur +Ur PK -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur vd vd PK -DV -DV -DV -DV -DV -DV -DV -DV -DV +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur PK -DV -DV +Ur +Ur vd vd vd @@ -6368,30 +6366,30 @@ vd vd vd vd -DV +Ur vd -DV -DV +Ur +Ur vd -DV -DV -DV +Ur +Ur +Ur PK vd -DV -DV +Ur +Ur vd vd vd PK -DV +Ur vd vd -DV +Ur vd -DV -DV -DV +Ur +Ur +Ur vd vd vd @@ -6418,28 +6416,28 @@ vd vd vd vd -DV +Ur vd vd -DV +Ur vd vd PK -DV +Ur vd vd -DV +Ur vd vd vd vd vd PK -DV +Ur vd vd PK -DV +Ur vd vd vd @@ -6470,7 +6468,7 @@ vd vd vd vd -DV +Ur vd vd vd diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index fa90eedff88a..11542625c870 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -1,5 +1,5 @@ /// VERY IMPORTANT FOR RUNNING FAST IN PRODUCTION! -/// If you define this flag, more things will init during initializations rather than when they're needed, such as planetoids. +/// If you define this flag, centcom will load. It's also supposed to preload planetoids, but that is disabled. //#define FULL_INIT #ifdef FULL_INIT @@ -8,10 +8,8 @@ #include "map_files\generic\blank.dmm" #endif -#ifndef LOWMEMORYMODE - #ifdef ALL_MAPS - #ifdef CIBUILDING - #include "templates.dm" - #endif +#ifdef ALL_MAPS + #ifdef CIBUILDING + #include "templates.dm" #endif #endif diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/deprecated/Ruins/lavaland_biodome_beach.dmm similarity index 100% rename from _maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm rename to _maps/deprecated/Ruins/lavaland_biodome_beach.dmm diff --git a/_maps/deprecated/Ruins/lavaland_surface_syndicate_base1.dmm b/_maps/deprecated/Ruins/lavaland_surface_syndicate_base1.dmm new file mode 100644 index 000000000000..be604192e5bd --- /dev/null +++ b/_maps/deprecated/Ruins/lavaland_surface_syndicate_base1.dmm @@ -0,0 +1,9168 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"ac" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ae" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"af" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ag" = ( +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = -25 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ah" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 1 + }, +/obj/structure/sign/barsign{ + pixel_y = -32; + req_access = null + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ai" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"aj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/medical/syndicate_access, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ak" = ( +/obj/machinery/vending/boozeomat/syndicate_access, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/bar) +"al" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/medical/syndicate_access, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ap" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"aq" = ( +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"as" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"at" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor{ + id = "lavalandsyndi_chemistry" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"aF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"aL" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"aM" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/chem_dispenser/fullupgrade, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"aN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Bar Storage"; + req_access_txt = "150"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"aQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"aR" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"aW" = ( +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "lavalandsyndi_arrivals"; + name = "Arrivals Blast Door Control"; + pixel_y = -26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"bd" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"bf" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"bv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"by" = ( +/obj/structure/closet/l3closet, +/obj/machinery/power/apc/syndicate{ + dir = 8; + name = "Chemistry APC"; + pixel_x = -25 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"bM" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_syndicatelava{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ca" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"cA" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/chemistry, +/obj/item/book/manual/wiki/chemistry, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"cG" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/chem_master, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"cI" = ( +/obj/machinery/power/apc/syndicate{ + name = "Experimentation Lab APC"; + pixel_y = -25 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"cJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + name = "CO2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cK" = ( +/obj/machinery/power/compressor{ + comp_id = "syndie_lavaland_incineratorturbine"; + dir = 1; + luminosity = 2 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cN" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_bar"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"cP" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/plasma, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cU" = ( +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Virology APC"; + pixel_y = 25 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"cV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dc" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"di" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dn" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"do" = ( +/obj/structure/closet/secure_closet/medical1{ + req_access = null; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/beakers/bluespace, +/obj/item/storage/box/beakers/bluespace, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"du" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door{ + id = "lavalandsyndi_chemistry"; + name = "Chemistry Blast Door Control"; + pixel_y = 26; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dv" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/chem_heater, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dw" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dx" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dy" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dE" = ( +/obj/structure/table/glass, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_y = 2 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_x = 2; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/glass/bottle/charcoal{ + pixel_x = 6 + }, +/obj/item/reagent_containers/glass/bottle/epinephrine, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dG" = ( +/obj/structure/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"dI" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/item/reagent_containers/glass/beaker/large, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dK" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/structure/closet/crate/secure/gear{ + req_access_txt = "150" + }, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dL" = ( +/obj/machinery/airalarm/syndicate{ + pixel_y = 25 + }, +/obj/structure/closet/crate, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/radio/headset/syndicate/alt{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/radio/headset/syndicate/alt, +/obj/item/radio/headset/syndicate/alt{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dM" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_access_txt = "150"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"dP" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dQ" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + heat_proof = 1; + name = "Experimentation Room"; + req_access_txt = "150" + }, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi"; + name = "Syndicate Research Experimentation Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dS" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi"; + name = "Syndicate Research Experimentation Shutters" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dY" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dZ" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/dropper, +/obj/machinery/airalarm/syndicate{ + dir = 8; + pixel_x = 25 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/screwdriver/nuke{ + pixel_y = 18 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ea" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/structure/closet/crate/secure/weapon{ + req_access_txt = "150" + }, +/obj/item/ammo_box/c10mm{ + pixel_y = 6 + }, +/obj/item/ammo_box/c10mm, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eb" = ( +/obj/structure/closet/crate, +/obj/item/storage/toolbox/electrical{ + pixel_y = 4 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ec" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/brute, +/obj/item/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ed" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/rad_collector, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ee" = ( +/obj/structure/rack, +/obj/item/flashlight{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/flashlight, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eg" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eh" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ei" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ej" = ( +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/mob/living/carbon/monkey{ + faction = list("neutral","Syndicate") + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"ek" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"el" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"em" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door{ + id = "lavalandsyndi"; + name = "Syndicate Experimentation Lockdown Control"; + pixel_y = 26; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"en" = ( +/obj/machinery/igniter/incinerator_syndicatelava, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"eo" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/syndicate, +/obj/item/paper/crumpled{ + info = "Explosive testing on site is STRICTLY forbidden, as this outpost's walls are lined with explosives intended for intentional self-destruct purposes that may be set off prematurely through careless experiments."; + name = "Explosives Testing Warning"; + pixel_x = -6; + pixel_y = -3 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"ep" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eq" = ( +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs, +/obj/item/taperecorder, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"es" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"et" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eu" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/chem_heater, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ev" = ( +/obj/effect/turf_decal/corner/opaque/white, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ew" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/syndichem, +/obj/effect/turf_decal/corner/opaque/white/three_quarters, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eE" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/table, +/obj/item/storage/box/lights/bulbs, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eG" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eH" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eI" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eJ" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eK" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/mob/living/carbon/monkey{ + faction = list("neutral","Syndicate") + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eL" = ( +/obj/machinery/door/airlock/hatch{ + name = "Monkey Pen"; + req_access_txt = "150"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eP" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eQ" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/table/reinforced, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eS" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/chem_master, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eT" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/chair/office/light, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eU" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/chem_dispenser/fullupgrade, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white/three_quarters, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eX" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/structure/closet/crate/internals, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eY" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/rad_collector, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fa" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fe" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ff" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/white/three_quarters, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fj" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/virusfood{ + pixel_y = 28 + }, +/obj/item/clothing/gloves/color/latex, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"fn" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fo" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/southleft{ + name = "Chemistry" + }, +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Chemistry"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fp" = ( +/obj/machinery/smartfridge/chemistry/preloaded, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/assist, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fs" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/structure/closet/crate, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/circuitboard/machine/processor, +/obj/item/circuitboard/machine/gibber, +/obj/item/circuitboard/machine/deep_fryer, +/obj/item/circuitboard/machine/cell_charger, +/obj/item/circuitboard/machine/smoke_machine, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ft" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/structure/closet/crate, +/obj/item/reagent_containers/food/drinks/waterbottle/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fu" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = -25 + }, +/obj/structure/table, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/head/soft{ + pixel_x = -8 + }, +/obj/item/clothing/head/soft{ + pixel_x = -8 + }, +/obj/item/radio{ + pixel_x = 5 + }, +/obj/item/radio{ + pixel_x = 5 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fw" = ( +/obj/effect/turf_decal/industrial/warning/corner, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fx" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fy" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Isolation B"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fz" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Isolation A"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fB" = ( +/obj/structure/chair/stool, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fC" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fD" = ( +/obj/structure/sign/warning/biohazard, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fE" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/closet/l3closet, +/obj/machinery/light/small/directional/west, +/obj/machinery/airalarm/syndicate{ + pixel_y = 25 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"fF" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/shower{ + pixel_y = 14 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"fH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"fM" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"fO" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gb" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gc" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gd" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150"; + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gf" = ( +/obj/structure/sign/warning/vacuum{ + pixel_y = -32 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gg" = ( +/obj/structure/sign/warning/fire{ + pixel_y = 32 + }, +/obj/structure/sign/warning/xeno_mining{ + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gh" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gj" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"gp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gs" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gD" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + heat_capacity = 1e+006 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"gM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gO" = ( +/obj/structure/sign/departments/cargo, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gP" = ( +/obj/machinery/photocopier, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gS" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/button/door{ + id = "lavalandsyndi_cargo"; + name = "Cargo Bay Blast Door Control"; + pixel_x = 26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gT" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Monkey Pen"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gU" = ( +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = -25 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gV" = ( +/obj/structure/chair/office/light, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gY" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "lavaland_syndie_virology_interior"; + idSelf = "lavaland_syndie_virology_control"; + name = "Virology Access Button"; + pixel_x = -25; + pixel_y = 8; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gZ" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ha" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"hb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hd" = ( +/obj/effect/turf_decal/corner/opaque/red, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"he" = ( +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hg" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hh" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hi" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hj" = ( +/obj/effect/turf_decal/corner/opaque/brown, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hl" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hn" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ho" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/computer/helm, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 4 + }, +/mob/living/carbon/monkey{ + faction = list("neutral","Syndicate") + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hr" = ( +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 8 + }, +/mob/living/carbon/monkey{ + faction = list("neutral","Syndicate") + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hs" = ( +/obj/machinery/computer/pandemic, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door{ + id = "lavalandsyndi_virology"; + name = "Virology Blast Door Control"; + pixel_x = -26; + req_access_txt = "150" + }, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ht" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/hand_labeler, +/obj/item/pen/red, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/glasses/science, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hu" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/gold{ + amount = 10 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hv" = ( +/obj/machinery/disposal/bin, +/obj/structure/sign/warning/deathsposal{ + pixel_x = 32 + }, +/obj/effect/turf_decal/industrial/fire/full, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hw" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hy" = ( +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hz" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hA" = ( +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hB" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hD" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hE" = ( +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 1 + }, +/mob/living/carbon/monkey{ + faction = list("neutral","Syndicate") + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hF" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white/three_quarters, +/mob/living/carbon/monkey{ + faction = list("neutral","Syndicate") + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hH" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_virology" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hI" = ( +/obj/structure/sign/warning/vacuum{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hK" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/fire{ + pixel_x = 32 + }, +/obj/structure/closet/emcloset/anchored, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/flashlight/seclite, +/obj/item/clothing/mask/gas, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hM" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/ammo_box/magazine/sniper_rounds, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hN" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hO" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hP" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hQ" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/m10mm, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"hS" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/suppressor, +/obj/item/clothing/ears/earmuffs, +/obj/item/clothing/ears/earmuffs, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hT" = ( +/obj/machinery/vending/toyliberationstation{ + req_access_txt = "150" + }, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hU" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/structure/tank_dispenser/plasma, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hV" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hW" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"hX" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hY" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"ia" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ib" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ic" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"id" = ( +/obj/structure/toilet{ + pixel_y = 18 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = 11 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/mirror{ + pixel_x = 28 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ie" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate/comms{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"if" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ig" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"ih" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"ii" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ik" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"il" = ( +/obj/machinery/door/airlock{ + name = "Cabin 2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"im" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"in" = ( +/obj/machinery/door/airlock{ + name = "Cabin 4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ip" = ( +/obj/effect/turf_decal/industrial/fire/corner, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iq" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"ir" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/fire{ + dir = 9 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/machinery/turretid{ + ailock = 1; + control_area = "/area/ruin/unpowered/syndicate_lava_base/main"; + dir = 1; + icon_state = "control_kill"; + lethal = 1; + name = "Base turret controls"; + pixel_y = 30; + req_access = null; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/main) +"is" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"it" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/fire{ + dir = 5 + }, +/obj/structure/filingcabinet, +/obj/item/folder/syndicate/mining, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"iu" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"iv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"iy" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dormitories"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iz" = ( +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iB" = ( +/obj/machinery/airalarm/syndicate{ + pixel_y = 25 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iF" = ( +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iH" = ( +/obj/effect/turf_decal/industrial/fire{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/caution/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iI" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault"; + req_access_txt = "150" + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/main) +"iJ" = ( +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"iK" = ( +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1 + }, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"iM" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"iN" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/main) +"iO" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iW" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel{ + heat_capacity = 1e+006 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iY" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ja" = ( +/obj/effect/turf_decal/industrial/fire/corner{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "syndie_lavaland_vault"; + name = "Vault Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + pixel_y = 8; + req_access_txt = "150"; + specialfunctions = 4; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/fire{ + dir = 10 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/main) +"jc" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"jd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/fire{ + dir = 6 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/main) +"je" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"jf" = ( +/obj/machinery/door/airlock{ + name = "Cabin 1" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jh" = ( +/obj/machinery/door/airlock{ + name = "Cabin 3" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jj" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jk" = ( +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"jl" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jn" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jq" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jr" = ( +/obj/machinery/vending/snack/random{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ju" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jv" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/suit_storage_unit/syndicate, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jw" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/toolcloset{ + anchored = 1 + }, +/obj/item/crowbar, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jx" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_bar" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jy" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jA" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/ammo_box/magazine/sniper_rounds, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jB" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jC" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jD" = ( +/obj/machinery/vending/cola/random{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jK" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + id = "lavalandsyndi_cargo"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"jL" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/lighter{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = -3 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jM" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "lavalandsyndi_bar"; + name = "Bar Blast Door Control"; + pixel_y = 26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jN" = ( +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jP" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jR" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/departments/engineering, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"jU" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/shower{ + desc = "The HS-452. Installed recently by the DonkCo Hygiene Division."; + dir = 4; + name = "emergency shower" + }, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/radiation/rad_area{ + pixel_y = -32 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jY" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jZ" = ( +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ka" = ( +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kb" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/box/lights/bulbs, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/clothing/head/welding, +/obj/item/stock_parts/cell/high/plus, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"kl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ko" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kq" = ( +/obj/machinery/airalarm/syndicate{ + dir = 8; + pixel_x = 25 + }, +/obj/machinery/vending/coffee{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ks" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"ku" = ( +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"kv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"kw" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/gloves/combat{ + pixel_y = -6 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"kC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kD" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + frequency = 1442; + id_tag = "syndie_lavaland_co2_out"; + internal_pressure_bound = 5066; + name = "CO2 out" + }, +/turf/open/floor/engine/co2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kF" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/n2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kG" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/beer, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kH" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kJ" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kK" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kM" = ( +/obj/machinery/vending/cigarette{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink/kitchen{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kP" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/obj/item/soap/syndie, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kQ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kS" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kT" = ( +/obj/structure/sign/departments/medbay/alt, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 1 + }, +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kV" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/power/smes/engineering, +/obj/structure/sign/warning/electricshock{ + pixel_x = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kW" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/smes/engineering, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kZ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"la" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 6; + name = "N2 to Mix" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lb" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + frequency = 1442; + id_tag = "syndie_lavaland_n2_out"; + internal_pressure_bound = 5066; + name = "Nitrogen Out" + }, +/turf/open/floor/engine/n2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ld" = ( +/turf/open/floor/engine/co2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"le" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"lf" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lg" = ( +/obj/structure/chair/stool/bar, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lh" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"li" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/syndicate{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lj" = ( +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 1; + icon_state = "right"; + name = "Bar" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lk" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/east, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 30 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lm" = ( +/obj/structure/closet/secure_closet/medical1{ + req_access = null; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ln" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lo" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/table, +/obj/item/storage/firstaid/fire, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ls" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lt" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + name = "O2 to Mix" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lu" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 9; + name = "N2 to Mix" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lv" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"lw" = ( +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/lavaland/surface/outdoors) +"lx" = ( +/obj/structure/bookcase/random, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ly" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lz" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/rag{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lA" = ( +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lC" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder, +/obj/item/kitchen/rollingpin, +/obj/item/kitchen/knife{ + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lG" = ( +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/gun/syringe/syndicate, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lI" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lK" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lL" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 30 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/head/welding, +/obj/item/weldingtool/largetank, +/obj/item/analyzer, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lP" = ( +/obj/effect/turf_decal/corner/opaque/blue, +/obj/effect/turf_decal/corner/opaque/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lQ" = ( +/obj/machinery/meter/turf, +/turf/open/floor/engine/o2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lR" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/o2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lS" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"lT" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"lU" = ( +/obj/structure/chair/stool, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lV" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"md" = ( +/obj/machinery/sleeper/syndie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"me" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mf" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = 11 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mg" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/effect/decal/cleanable/dirt, +/obj/item/pipe_dispenser{ + pixel_y = 12 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mi" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "O2 to Mix" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mk" = ( +/obj/machinery/atmospherics/pipe/manifold/supplymain/visible{ + name = "O2 to Mix" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ml" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/blue, +/obj/effect/turf_decal/corner/opaque/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4; + name = "O2 Layer Manifold" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + frequency = 1442; + id_tag = "syndie_lavaland_o2_out"; + internal_pressure_bound = 5066; + name = "Oxygen Out" + }, +/turf/open/floor/engine/o2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mn" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mo" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mp" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_telecomms" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mq" = ( +/obj/structure/sign/warning/vacuum{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mr" = ( +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"ms" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/fire{ + pixel_x = 32 + }, +/obj/structure/closet/emcloset/anchored, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/flashlight/seclite, +/obj/item/clothing/mask/gas, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mt" = ( +/obj/machinery/computer/arcade/orion_trail, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mu" = ( +/obj/item/kirbyplants{ + icon_state = "plant-22" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mv" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, +/obj/machinery/power/apc/syndicate{ + name = "Bar APC"; + pixel_y = -25 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mx" = ( +/obj/structure/table/wood, +/obj/machinery/microwave, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"my" = ( +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mA" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/blood/OMinus, +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mE" = ( +/obj/structure/table/reinforced, +/obj/item/scalpel, +/obj/item/circular_saw{ + pixel_y = 9 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mF" = ( +/obj/machinery/atmospherics/components/unary/portables_connector, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mH" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mI" = ( +/obj/effect/turf_decal/industrial/warning/corner, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Plasma to Mix" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mJ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10; + name = "Plasma to Mix" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mM" = ( +/turf/open/floor/circuit/green, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mN" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mP" = ( +/obj/structure/filingcabinet/security, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mQ" = ( +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mR" = ( +/obj/structure/table, +/obj/item/storage/toolbox/syndicate, +/obj/item/multitool, +/obj/machinery/button/door{ + id = "lavalandsyndi_telecomms"; + name = "Telecomms Blast Door Control"; + pixel_x = 26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mS" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mT" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mU" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mX" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/cable_coil{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/multitool, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mZ" = ( +/obj/machinery/sleeper/syndie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"na" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nb" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nc" = ( +/obj/machinery/atmospherics/pipe/simple/yellow, +/obj/machinery/computer/turbine_computer{ + dir = 1; + id = "syndie_lavaland_incineratorturbine" + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ne" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_syndicatelava{ + pixel_x = -8; + pixel_y = -26 + }, +/obj/machinery/button/ignition/incinerator/syndicatelava{ + pixel_x = 6; + pixel_y = -25; + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/incinerator_vent_syndicatelava_aux{ + pixel_x = 22; + pixel_y = -8; + dir = 8 + }, +/obj/machinery/button/door/incinerator_vent_syndicatelava_main{ + pixel_x = 22; + pixel_y = 3; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nf" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ng" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5; + name = "Plasma to Mix" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nh" = ( +/obj/machinery/telecomms/relay/preset/ruskie{ + use_power = 0 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ni" = ( +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nj" = ( +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications Control"; + req_access_txt = "150"; + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nm" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 27 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nn" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"no" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"np" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nq" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nv" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nB" = ( +/obj/structure/table/reinforced, +/obj/item/surgicaldrill, +/obj/item/cautery, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nC" = ( +/obj/structure/table/reinforced, +/obj/item/retractor, +/obj/item/hemostat, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nE" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nH" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nI" = ( +/obj/machinery/computer/camera_advanced, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nJ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nW" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nZ" = ( +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oa" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ob" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"oc" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/power/apc/syndicate{ + dir = 4; + name = "Medbay APC"; + pixel_x = 25 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"od" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"of" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/binary/pump/on{ + target_pressure = 4500 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 8 + }, +/obj/machinery/airlock_sensor/incinerator_syndicatelava{ + pixel_x = 22 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"og" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oh" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"oi" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"oj" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + name = "Syndicate Radio Intercom" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ok" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/power/apc/syndicate{ + name = "Telecommunications APC"; + pixel_y = -25 + }, +/obj/structure/cable, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ol" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/rack{ + dir = 8 + }, +/obj/item/clothing/suit/space/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate, +/obj/item/mining_scanner, +/obj/item/pickaxe, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"om" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"on" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oo" = ( +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"op" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"or" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/belt/medical, +/obj/effect/decal/cleanable/dirt, +/obj/item/crowbar, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ou" = ( +/obj/machinery/computer/message_monitor{ + dir = 1 + }, +/obj/item/paper/monitorkey, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ov" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ox" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + id = "lavalandsyndi_arrivals" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oB" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos{ + dir = 1; + id = "syndie_lavaland_inc_in" + }, +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -32 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oC" = ( +/obj/machinery/door/poddoor/incinerator_syndicatelava_aux, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oD" = ( +/obj/structure/sign/warning/xeno_mining{ + pixel_x = -32 + }, +/obj/structure/sign/warning/fire{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oF" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oG" = ( +/obj/machinery/power/turbine{ + luminosity = 2 + }, +/obj/structure/cable, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oH" = ( +/obj/machinery/door/poddoor/incinerator_syndicatelava_main, +/turf/open/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oI" = ( +/obj/structure/sign/warning/vacuum{ + pixel_x = -32 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oL" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"oO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology{ + frequency = 1449; + id_tag = "lavaland_syndie_virology_exterior"; + name = "Virology Lab Exterior Airlock"; + req_access_txt = "150"; + dir = 4 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "lavaland_syndie_virology_exterior"; + idSelf = "lavaland_syndie_virology_control"; + name = "Virology Access Button"; + pixel_y = -25; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"oP" = ( +/obj/structure/sign/departments/chemistry, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"pD" = ( +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "lavaland_syndie_virology_exterior"; + idInterior = "lavaland_syndie_virology_interior"; + idSelf = "lavaland_syndie_virology_control"; + name = "Virology Access Console"; + pixel_x = 25; + pixel_y = -5; + req_access_txt = "150" + }, +/obj/effect/turf_decal/industrial/caution/red{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"pJ" = ( +/turf/open/floor/engine/n2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"pQ" = ( +/obj/structure/sign/warning/explosives/alt{ + pixel_x = 32 + }, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"pY" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"qC" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"qG" = ( +/obj/structure/sign/warning/explosives/alt{ + pixel_x = -32 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"qJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"qL" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"rc" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"rg" = ( +/obj/machinery/meter/turf, +/turf/open/floor/engine/plasma, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"rF" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"rL" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"rO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"sk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay"; + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"so" = ( +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Engineering APC"; + pixel_y = 25 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ta" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + frequency = 1442; + id_tag = "syndie_lavaland_o2_out"; + internal_pressure_bound = 5066; + name = "Plasma Out" + }, +/turf/open/floor/engine/plasma, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"th" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"tq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"tu" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"tM" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"tW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"uB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"uW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"vd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"vu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"vx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"vz" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"vD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/hatch{ + name = "Experimentation Lab"; + req_access_txt = "150" + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"vE" = ( +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = -25 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"vX" = ( +/obj/machinery/atmospherics/pipe/simple/orange{ + dir = 8 + }, +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"wi" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8; + volume_rate = 200 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"wA" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"xm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 9 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"xJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"xK" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"ye" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"yg" = ( +/turf/open/floor/engine/o2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ys" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/corner/opaque/white, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"yH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"zq" = ( +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance{ + req_access = null + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"zK" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"zM" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"zX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + dir = 6; + pixel_x = 23; + pixel_y = -23 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"Av" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"AS" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Bd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"Bk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Bl" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/corner/opaque/white, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"Bp" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"Bz" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"BC" = ( +/obj/machinery/meter/turf, +/turf/open/floor/engine/co2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"BF" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi"; + name = "Syndicate Research Experimentation Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"BG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"BP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Cg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"Cx" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"CC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitories"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"CG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"Db" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Dk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"DC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Chemistry Lab"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"DF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"DL" = ( +/obj/structure/sign/warning/explosives/alt{ + pixel_x = 32 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"Ec" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Ed" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Ep" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"ED" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/virology{ + frequency = 1449; + id_tag = "lavaland_syndie_virology_interior"; + name = "Virology Lab Interior Airlock"; + req_access_txt = "150"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"EN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"EZ" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Fk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Fy" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/glass/incinerator/syndicatelava_interior, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Fz" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"FJ" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/infections{ + pixel_y = 7 + }, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"Gq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"Hu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"HG" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_access_txt = "150" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"HX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + name = "CO2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"IH" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"II" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"IJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"IX" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"Je" = ( +/obj/docking_port/stationary{ + dir = 4; + height = 15; + dwidth = 8; + width = 15 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"JB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4; + name = "Plasma Layer Manifold" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Kx" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"KZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"La" = ( +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/stack/wrapping_paper{ + pixel_y = 5 + }, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"Lg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"Lp" = ( +/obj/machinery/atmospherics/pipe/simple/yellow, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Ls" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"Lz" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/computer/monitor/secret{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"LG" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"LQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"LR" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Mf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Mg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/white/three_quarters{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"Mo" = ( +/obj/machinery/power/apc/syndicate{ + dir = 8; + name = "Primary Hallway APC"; + pixel_x = -25 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"MG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"Ng" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Nj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Nm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/power/apc/syndicate{ + name = "Dormitories APC"; + pixel_y = -25 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"Nw" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"NB" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/glass/incinerator/syndicatelava_exterior, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"NL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"NU" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Ov" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"Pf" = ( +/obj/effect/turf_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Pi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/mining/glass{ + name = "Warehouse"; + req_access_txt = "150" + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"Pk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/mining/glass{ + name = "Warehouse"; + req_access_txt = "150" + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"Qc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"Qh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"Qr" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"Qv" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"QN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"Ro" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_bar"; + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"Rq" = ( +/turf/open/floor/engine/plasma, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"RE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"RK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"RM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"RV" = ( +/obj/structure/sign/warning/fire, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Sb" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"St" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"SA" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/crate, +/obj/item/vending_refill/snack{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/vending_refill/snack{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/cola, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"SE" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"SX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Td" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"Tp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"TC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"TG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"TV" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"Ub" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Uc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"Us" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"UX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Vb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"Ve" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"VE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"Wt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"WD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"WE" = ( +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications"; + req_access_txt = "150"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"Xd" = ( +/obj/structure/closet/radiation, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Xg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/white/three_quarters, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"XI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"XR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Ya" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Yd" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"Ym" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Cargo Bay APC"; + pixel_y = 25 + }, +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"Yz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"Zj" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"Zo" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"Zv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Arrival Hallway APC"; + pixel_y = 25 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"ZN" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/engine/co2, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ZU" = ( +/obj/machinery/meter/turf, +/turf/open/floor/engine/n2, +/area/ruin/unpowered/syndicate_lava_base/engineering) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +ab +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(4,1,1) = {" +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mn +mn +mn +mn +mn +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(5,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mn +mn +mM +nh +mM +mn +mn +ab +ab +ab +ab +ab +ab +ab +aa +"} +(6,1,1) = {" +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mn +mM +mM +ni +mM +mM +mn +ab +ab +ab +ab +ab +ab +aa +aa +"} +(7,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eh +eh +eh +eh +eh +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mn +mn +mN +nj +mn +mn +mn +ab +ab +ab +ab +ab +ab +ab +aa +"} +(8,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ac +eh +tM +ff +eI +aj +eh +eh +eh +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mP +ni +nH +oh +mn +mn +ab +ab +ab +ab +ab +ab +aa +"} +(9,1,1) = {" +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +eh +eH +Xg +fy +gp +eI +hp +hE +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mP +nk +nI +oi +ou +mn +ab +ab +ab +ab +ab +ab +ab +"} +(10,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ac +eh +eI +eI +eI +gq +gT +hq +hF +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mQ +nl +nJ +oj +ov +mn +ab +ab +ab +ab +ab +ab +ab +"} +(11,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ac +eh +eG +fh +eI +gr +eI +hr +hG +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mR +nm +yH +ok +mn +mn +ab +ab +ab +ab +ab +ab +ab +"} +(12,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eh +eH +fg +fz +gs +eh +gj +eh +eh +ab +ab +ab +ab +ab +ab +dG +dG +dG +dG +dG +dG +lS +mn +mn +mo +WE +mn +mn +ab +ab +ab +ab +ab +ab +ab +ab +"} +(13,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eh +eh +eI +eI +gt +gU +hs +hH +ab +ab +ab +ab +ab +ab +dG +dG +ig +iu +iu +iu +lv +lT +mq +mS +nn +Db +mT +mT +ab +ab +ab +ab +ab +ab +ab +ab +"} +(14,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ac +eh +cU +FJ +XI +gV +ht +hH +ab +ab +ab +ab +ab +dG +dG +ig +je +iv +jk +le +lw +lT +mr +mS +nn +EN +ol +mT +ab +ab +ab +ab +ab +ab +ab +ab +"} +(15,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ei +eJ +fj +fB +TV +gW +hu +hH +ab +ab +ab +ab +dG +dG +ig +je +jk +jx +cN +jy +jy +jy +ms +mT +no +EN +ol +mT +ab +ab +ab +ab +ab +ab +ab +ab +"} +(16,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ac +ab +ac +ac +ae +ae +ae +ae +fC +zX +pD +hv +hH +ab +ab +ab +dG +dG +ig +je +jk +jx +Ro +kG +lf +lx +jy +jy +jy +np +Pf +mT +mT +mT +oF +ab +ab +ab +ab +ab +ab +"} +(17,1,1) = {" +ab +ab +ab +ab +ab +ae +ae +ae +ae +ae +ae +ae +ej +eK +ae +fD +ED +eh +eh +eh +hW +dG +dG +dG +ig +je +iv +jx +Ro +kn +kH +jN +jZ +lU +mt +mU +np +SE +EZ +oI +oD +St +ab +ab +ab +ab +ab +aa +"} +(18,1,1) = {" +ab +ab +ab +ab +ae +ae +aq +aq +qG +dc +aq +dQ +ek +eL +ae +fE +Bz +gY +hw +hI +hX +ig +iu +iu +je +jk +jx +cN +jN +jZ +jN +jZ +jN +jZ +kn +mU +nq +LR +mT +mT +mT +oF +ab +ab +ab +ab +ab +aa +"} +(19,1,1) = {" +ab +ab +ab +ab +ae +ap +aq +Lg +aq +Lg +aq +dR +el +rO +ae +fF +LG +gZ +hw +hJ +hY +ih +iv +iM +iv +iv +jx +jL +jY +jN +kI +lg +ly +lV +mu +mU +nr +Mf +om +mT +ab +ab +ab +ab +ab +ab +aa +aa +"} +(20,1,1) = {" +aa +ab +ab +ab +ae +aq +aq +aF +aq +aF +aq +ae +em +eN +ae +ae +oO +ha +ha +hK +ha +ha +ha +ha +ha +ha +jP +jM +jN +jZ +kJ +lh +lz +oL +mv +jy +jy +NU +on +mT +ab +ab +ab +ab +ab +ab +ab +aa +"} +(21,1,1) = {" +aa +ab +ab +ab +ae +aq +aq +Tp +aq +Cg +aq +dS +eo +eO +cI +ae +vd +hb +ha +iN +ha +ii +AS +iO +hB +jl +jz +jN +jZ +ko +kK +li +lA +Qc +mw +ah +jy +QN +oo +ox +ab +ab +ab +ab +ab +ab +ab +ab +"} +(22,1,1) = {" +aa +ab +ab +ab +ae +ap +aq +CG +vu +TC +LQ +BF +ep +eP +Td +vD +Zo +Av +vE +zM +Ub +lZ +tq +Us +hd +jm +jz +fM +jN +kp +kL +lj +lB +th +lA +ai +jP +Fk +op +ox +ab +ab +ab +ab +ab +ab +ab +ab +"} +(23,1,1) = {" +aa +ab +ab +ab +ae +ae +aq +aq +DL +di +aq +dS +eq +eQ +ae +dQ +tu +hd +hy +hy +ia +ik +if +ca +hz +hz +jy +jy +ka +kq +kM +lk +lC +Uc +mx +jy +jy +xK +oo +ox +ab +ab +ab +ab +ab +ab +ab +ab +"} +(24,1,1) = {" +aa +ab +ab +ab +ab +ae +ae +ae +ae +ae +aL +ae +ae +ae +oP +fH +Bk +he +hz +hz +hz +hz +iy +CC +hz +jn +jA +jy +jy +jy +jy +jy +ak +aN +jy +jy +qL +II +oo +ox +ab +ab +ab +ab +ab +ab +ab +ab +"} +(25,1,1) = {" +aa +ab +ab +ab +ab +ab +ac +ac +as +do +by +xm +Yd +Mg +DC +UX +zK +he +hz +hM +ib +hz +iz +Sb +jf +jo +jB +hz +kb +jy +kN +jZ +lE +xJ +my +jy +Zv +nW +aW +mT +ab +ab +ab +ab +ab +ab +ab +ab +"} +(26,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +as +as +du +dB +dU +es +eS +fn +fO +Bk +hf +hz +hN +ic +il +iA +gD +hz +hz +hz +hz +Yz +Qr +Qh +Ov +SA +zq +jy +jy +QN +nX +oo +mT +ab +ab +ab +ab +ab +ab +ab +ab +"} +(27,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +at +aM +dv +dC +dV +et +eT +fo +fO +Bk +hg +hz +hz +hz +hz +iB +rL +Cx +Bd +Bd +Vb +bf +jy +jy +jy +jy +jy +jy +mX +vz +aQ +mT +mT +ab +ab +ab +ab +ab +ab +ab +aa +"} +(28,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +at +cA +dw +dC +dX +eu +eU +fn +fH +Bk +he +hA +hz +id +im +iC +Nm +hz +hz +hz +hz +Bp +Vb +Vb +Vb +Bd +Bd +IX +uW +ys +nZ +mT +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(29,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +at +cG +dx +dE +dY +ev +eV +fp +fH +ca +he +hz +hz +hz +hz +rc +iW +jh +jo +jC +hz +MG +ks +kP +kQ +kQ +kQ +kQ +kT +KZ +sk +kQ +kQ +ab +ab +ab +ab +ab +ab +ab +ab +"} +(30,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +as +as +as +dI +dZ +ew +as +as +as +Ep +hh +hz +hP +ic +in +iE +iX +hz +jq +jA +hz +BG +kt +kQ +kQ +lG +md +mA +mZ +vx +oa +or +kQ +ab +ab +ab +ab +ab +ab +ab +ab +"} +(31,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ac +as +as +as +as +as +fq +dy +qC +he +hz +hQ +ie +hz +iF +iY +hz +hO +hz +hz +Fz +ha +kQ +lm +lH +me +mB +na +Gq +ob +al +kQ +ab +ab +ab +ab +ab +ab +ab +ab +"} +(32,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ac +dy +dK +ea +Ls +NL +Hu +Pi +fm +he +hz +hz +hz +hz +hz +hz +hz +jr +jD +jR +ca +ku +kR +ln +lI +lI +mC +lI +Bl +oc +kQ +kQ +ac +ab +ab +ab +ab +ab +ab +ab +"} +(33,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +dy +dL +eb +qJ +eX +fs +fa +gM +hi +hB +hB +hB +ag +iG +SX +Mo +BP +wA +Ya +RM +kv +kS +ln +lJ +mf +mD +lI +nB +kQ +kQ +ac +ab +ab +ab +ab +ab +ab +ab +ab +"} +(34,1,1) = {" +aa +aa +aa +ab +ab +ab +ab +ab +ab +dy +dM +ec +bv +eY +ft +dP +gN +hj +hj +hR +af +ip +iH +ja +jj +jj +ca +Qv +kj +kw +kT +lo +lK +kQ +mE +nb +nC +kQ +ac +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(35,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +dy +dy +ed +Dk +eZ +dy +dy +gO +hk +hC +dy +ha +iq +iI +iq +ha +ha +dO +jT +ju +gn +IJ +IJ +IJ +kU +IJ +IJ +IJ +uB +ju +ju +ju +ab +ab +ab +ab +ab +ab +ab +"} +(36,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ac +dy +dy +Pk +fa +dy +La +gP +gQ +hl +hS +ha +ir +iJ +jb +ha +Xd +ye +jU +ju +Lz +kV +Ve +lL +mg +mF +nc +Lp +od +Lp +oz +ju +ju +nf +ab +ab +ab +ab +aa +"} +(37,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +ee +cV +fb +fu +gb +gQ +hl +gQ +hT +ha +is +iK +jc +ha +jv +dn +jV +ju +Kx +kW +Zj +WD +bd +XR +Nw +Fy +bM +NB +en +cK +oG +oH +ab +ab +ab +ab +ab +"} +(38,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +Ym +VE +fc +fv +fv +gR +gQ +hl +hU +ha +it +pQ +jd +ha +jw +pY +nv +HG +Nj +kX +lr +lN +mi +mH +ne +nE +of +nE +oB +ju +ju +nf +ab +ab +ab +ab +ab +"} +(39,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +eg +eD +fd +fw +gc +gS +hn +gQ +hV +ha +Wt +DF +DF +DF +kl +kl +kl +kl +so +kY +ls +lO +mj +mI +RV +tW +RE +ju +oC +nf +ab +ab +ab +ab +ab +ab +ab +"} +(40,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +dy +eE +fe +dy +gd +dy +ho +hD +dy +dy +wi +ac +ac +ju +ld +kE +rF +HX +cJ +kZ +Ng +lt +mk +mJ +ng +TG +Ec +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(41,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +jK +jK +dy +gf +dy +jK +jK +dy +ab +ab +ab +ab +ju +ZN +BC +IH +Ed +kC +la +lu +lP +ml +mK +JB +RK +og +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(42,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +gg +dy +ab +ab +ab +ab +ab +ab +ab +ju +ju +ju +ju +ju +kD +aR +ju +kD +lb +ju +vX +IH +ju +ju +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(43,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fx +gh +fx +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ju +ZU +lc +ju +lQ +mm +ju +ta +rg +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(44,1,1) = {" +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +Je +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ju +kF +pJ +ju +lR +yg +ju +cP +Rq +ju +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(45,1,1) = {" +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ju +ju +ju +ju +ju +ju +ju +ju +ju +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(46,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(47,1,1) = {" +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(48,1,1) = {" +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +"} +(49,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +"} +(50,1,1) = {" +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +ab +ab +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +ab +ab +aa +aa +aa +aa +ab +ab +aa +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/shuttles/misc/infiltrator_advanced.dmm b/_maps/deprecated/Ships/infiltrator_advanced.dmm similarity index 100% rename from _maps/shuttles/misc/infiltrator_advanced.dmm rename to _maps/deprecated/Ships/infiltrator_advanced.dmm diff --git a/_maps/deprecated/deprecated_datums.dm b/_maps/deprecated/deprecated_datums.dm index c9cd175d81a9..b1128719e113 100644 --- a/_maps/deprecated/deprecated_datums.dm +++ b/_maps/deprecated/deprecated_datums.dm @@ -98,3 +98,18 @@ id = "tumblr-sexyman" description = "After a logging incident gone wrong, the Syndicate invade this factory to stop the beast." suffix = "jungle_surface_tumblr_sexyman.dmm" + +/datum/map_template/ruin/lavaland/biodome/beach + name = "Biodome Beach" + id = "biodome-beach" + description = "Seemingly plucked from a tropical destination, this beach is calm and cool, with the salty waves roaring softly in the background. \ + Comes with a rustic wooden bar and suicidal bartender." + suffix = "lavaland_biodome_beach.dmm" + +/datum/map_template/ruin/lavaland/syndicate_base + name = "Syndicate Lava Base" + id = "lava-base" + description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." + suffix = "lavaland_surface_syndicate_base1.dmm" + cost = 20 + allow_duplicates = FALSE diff --git a/_maps/outpost/hangar/test_20x20.dmm b/_maps/outpost/hangar/test_20x20.dmm index c4301d8bceea..118bb8afa821 100644 --- a/_maps/outpost/hangar/test_20x20.dmm +++ b/_maps/outpost/hangar/test_20x20.dmm @@ -51,7 +51,7 @@ /turf/open/floor/plasteel, /area/hangar) "r" = ( -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general, /turf/closed/indestructible/reinforced, /area/hangar) "s" = ( diff --git a/_maps/outpost/hangar/test_2_20x20.dmm b/_maps/outpost/hangar/test_2_20x20.dmm index e9b8744419eb..544771691347 100644 --- a/_maps/outpost/hangar/test_2_20x20.dmm +++ b/_maps/outpost/hangar/test_2_20x20.dmm @@ -1,22 +1,18 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ar" = ( -/obj/machinery/door/airlock/highsecurity, -/turf/open/floor/plasteel/dark, -/area/hangar) -"aE" = ( +"af" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning/corner, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/item/pipe/binary{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 }, /turf/open/floor/plating{ icon_state = "panelscorched" }, /area/hangar) +"ar" = ( +/obj/machinery/door/airlock/highsecurity, +/turf/open/floor/plasteel/dark, +/area/hangar) "bg" = ( /obj/effect/decal/cleanable/garbage{ pixel_x = -12; @@ -55,15 +51,6 @@ }, /turf/open/floor/plasteel/tech, /area/hangar) -"de" = ( -/obj/effect/turf_decal/steeldecal/steel_decals_central2{ - pixel_y = 2 - }, -/obj/item/pipe/binary{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/hangar) "dU" = ( /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, @@ -174,17 +161,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/concrete/slab_1, /area/hangar) -"fZ" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/item/pipe/binary, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/hangar) "gf" = ( /turf/open/floor/plasteel/patterned/cargo_one, /area/hangar) @@ -220,15 +196,6 @@ }, /turf/open/floor/plasteel/dark, /area/hangar) -"gX" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/item/pipe/binary{ - dir = 5 - }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/hangar) "ha" = ( /obj/effect/turf_decal/industrial/loading, /turf/open/floor/plasteel/dark, @@ -255,13 +222,6 @@ "iZ" = ( /turf/closed/indestructible/reinforced, /area/hangar) -"ja" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - req_access_txt = "109" - }, -/obj/item/pipe/binary, -/turf/open/floor/plating, -/area/hangar) "jc" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, @@ -318,15 +278,6 @@ /obj/effect/landmark/outpost/hangar_dock, /turf/open/floor/plating, /area/hangar) -"ki" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/blood/old, -/obj/item/pipe/binary, -/turf/open/floor/plating, -/area/hangar) "kA" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -349,6 +300,15 @@ /obj/effect/landmark/outpost/elevator, /turf/open/floor/plasteel/elevatorshaft, /area/hangar) +"ln" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/hangar) "lF" = ( /obj/effect/turf_decal/techfloor{ dir = 8 @@ -440,20 +400,30 @@ icon_state = "panelscorched" }, /area/hangar) -"pB" = ( -/obj/effect/decal/cleanable/dirt, +"pX" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) +"qe" = ( /obj/effect/turf_decal/steeldecal/steel_decals_central2{ pixel_y = 2 }, -/obj/item/pipe/binary{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/hangar) -"pX" = ( +"qk" = ( /obj/structure/catwalk/over/plated_catwalk, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning/corner, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 10 }, /turf/open/floor/plating{ icon_state = "panelscorched" @@ -542,6 +512,13 @@ color = "#808080" }, /area/hangar) +"sr" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + req_access_txt = "109" + }, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating, +/area/hangar) "sv" = ( /obj/effect/decal/fakelattice{ color = "#808080" @@ -641,6 +618,20 @@ "uq" = ( /turf/open/floor/plating, /area/hangar) +"uM" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "uU" = ( /obj/structure/marker_beacon{ picked_color = "Teal" @@ -654,6 +645,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/hangar) +"vo" = ( +/obj/effect/turf_decal/steeldecal/steel_decals_central2{ + pixel_y = 2 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/hangar) "vE" = ( /obj/machinery/door/poddoor/multi_tile/four_tile_ver, /turf/closed/indestructible/reinforced, @@ -669,19 +669,12 @@ /obj/machinery/light/floor/hangar, /turf/open/floor/plasteel/dark, /area/hangar) -"vS" = ( +"vT" = ( /obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/general{ dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/item/pipe/binary, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, +/turf/open/floor/plating, /area/hangar) "we" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/arrow_cw{ @@ -807,9 +800,35 @@ /obj/effect/turf_decal/steeldecal/steel_decals6, /turf/open/floor/plasteel/dark, /area/hangar) +"Az" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 6 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/hangar) "AK" = ( /turf/open/floor/plating/asteroid/icerock/smooth, /area/hangar) +"Bg" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, +/obj/machinery/fax, +/turf/open/floor/plasteel/dark, +/area/hangar) +"Bo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/steeldecal/steel_decals_central2{ + pixel_y = 2 + }, +/turf/open/floor/plasteel/dark, +/area/hangar) "BQ" = ( /obj/effect/decal/fakelattice{ color = "#808080" @@ -827,19 +846,6 @@ color = "#808080" }, /area/hangar) -"BV" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning{ - dir = 10 - }, -/obj/item/pipe/binary{ - dir = 4 - }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/hangar) "BZ" = ( /obj/machinery/vending/cigarette, /turf/open/floor/concrete/reinforced, @@ -1042,6 +1048,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/hangar) +"Hy" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "HT" = ( /turf/open/floor/plating/catwalk_floor, /area/hangar) @@ -1138,6 +1155,19 @@ icon_state = "foam_plating" }, /area/hangar) +"LI" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "LM" = ( /obj/effect/turf_decal/techfloor{ dir = 9 @@ -1199,38 +1229,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/hangar) -"NV" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/hangar) "Od" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/arrow_ccw, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/hangar) -"Os" = ( -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/hangar) -"Ot" = ( -/obj/effect/turf_decal/techfloor{ - dir = 6 - }, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, -/obj/machinery/fax, -/turf/open/floor/plasteel/dark, -/area/hangar) "OF" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning, /turf/open/floor/plasteel/dark, /area/hangar) +"OV" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 5 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "Pc" = ( /obj/effect/turf_decal/steeldecal/steel_decals2, /turf/open/floor/plasteel/dark, @@ -1244,6 +1260,20 @@ icon_state = "panelscorched" }, /area/hangar) +"Pz" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 9 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "PE" = ( /obj/effect/turf_decal/industrial/hatch/yellow, /obj/structure/fermenting_barrel{ @@ -1261,24 +1291,6 @@ }, /turf/open/floor/plasteel/dark, /area/hangar) -"PL" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/item/pipe/binary, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/hangar) -"Qk" = ( -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/hangar) "Qn" = ( /obj/structure/mopbucket, /obj/item/mop{ @@ -1469,6 +1481,15 @@ "Xg" = ( /turf/open/floor/plasteel/tech, /area/hangar) +"Xx" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating, +/area/hangar) "XA" = ( /obj/effect/decal/fakelattice{ color = "#808080" @@ -1522,15 +1543,6 @@ /obj/structure/grille, /turf/open/floor/plating, /area/hangar) -"Ya" = ( -/obj/effect/turf_decal/steeldecal/steel_decals_central2{ - pixel_y = 2 - }, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/hangar) "Yr" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 8 @@ -1841,8 +1853,8 @@ iZ iZ oV mR -Os -Ya +Az +vo Od uq uq @@ -1877,13 +1889,13 @@ iZ mY iZ Pt -gX +OV iZ GX Lb Ug -dU -pB +vT +Bo cF uq uq @@ -1923,8 +1935,8 @@ iZ Tb HT tN -Qk -pB +ln +Bo DT uq uq @@ -1959,13 +1971,13 @@ iZ iZ Gk Gk -BV +LI iZ iZ sI ft -NV -pB +af +Bo Od uq uq @@ -2000,13 +2012,13 @@ iZ iZ Gk Gk -aE -vS -ja -ki -fZ -PL -de +qk +uM +sr +Xx +Hy +Pz +qe Od uU uq @@ -2837,7 +2849,7 @@ ri GC Zy GD -Ot +Bg iZ Gk Gk diff --git a/_maps/outpost/hangar/test_2_40x20.dmm b/_maps/outpost/hangar/test_2_40x20.dmm index 6a724f987ee6..7520321a6d23 100644 --- a/_maps/outpost/hangar/test_2_40x20.dmm +++ b/_maps/outpost/hangar/test_2_40x20.dmm @@ -25,6 +25,17 @@ }, /turf/open/floor/plasteel/tech, /area/hangar) +"bL" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating, +/area/hangar) "bQ" = ( /obj/item/banner, /turf/open/floor/plasteel/dark, @@ -46,20 +57,6 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/hangar) -"cJ" = ( -/obj/item/pipe/binary{ - dir = 9 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hangar) "cR" = ( /obj/structure/table/reinforced{ color = "#c1b6a5" @@ -75,12 +72,18 @@ }, /turf/open/floor/plasteel/dark, /area/hangar) -"dg" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/item/pipe/binary, -/turf/open/floor/plating{ - icon_state = "panelscorched" +"cX" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -6 }, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plasteel/tech/techmaint, /area/hangar) "dk" = ( /obj/machinery/computer/communications{ @@ -123,6 +126,15 @@ }, /turf/open/floor/plasteel/tech, /area/hangar) +"dv" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/hangar) "dD" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/catwalk_floor, @@ -197,14 +209,6 @@ /obj/machinery/light/floor/hangar, /turf/open/floor/plasteel/dark, /area/hangar) -"fm" = ( -/obj/item/pipe/binary{ - dir = 8 - }, -/turf/open/floor/plasteel/stairs{ - dir = 4 - }, -/area/hangar) "fs" = ( /obj/effect/turf_decal/techfloor, /obj/effect/decal/cleanable/dirt, @@ -274,15 +278,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/hangar) -"gW" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/item/pipe/binary{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/hangar) "gY" = ( /obj/effect/turf_decal/techfloor{ dir = 6 @@ -375,16 +370,6 @@ }, /turf/open/floor/plasteel/dark, /area/hangar) -"jx" = ( -/obj/item/pipe/binary{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hangar) "jS" = ( /obj/structure/flora/rock/icy, /turf/open/water/beach/deep, @@ -422,6 +407,13 @@ icon_state = "panelscorched" }, /area/hangar) +"kZ" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "lf" = ( /obj/effect/turf_decal/arrows, /turf/open/floor/plasteel/tech, @@ -439,23 +431,6 @@ /obj/machinery/light/floor/hangar, /turf/open/floor/plasteel/dark, /area/hangar) -"lP" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/pipe/binary{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/hangar) -"mh" = ( -/obj/item/pipe/binary, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hangar) "mu" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/arrow_cw, /obj/machinery/light/floor/hangar, @@ -469,10 +444,7 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech, /area/hangar) -"mZ" = ( -/obj/item/pipe/binary{ - dir = 9 - }, +"nb" = ( /obj/item/kirbyplants{ icon_state = "plant-25"; pixel_x = 5 @@ -481,6 +453,9 @@ /obj/effect/decal/cleanable/robot_debris{ pixel_x = 8 }, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 9 + }, /turf/open/floor/plasteel/tech/techmaint, /area/hangar) "nq" = ( @@ -505,6 +480,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/hangar) +"oy" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating, +/area/hangar) "oE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/patterned/cargo_one, @@ -559,17 +544,6 @@ }, /turf/open/floor/wood/walnut, /area/hangar) -"qN" = ( -/obj/structure/railing{ - layer = 3.1 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/turf_decal/spline/fancy/opaque/black, -/obj/item/pipe/binary, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/hangar) "qO" = ( /obj/structure/girder/displaced, /obj/effect/turf_decal/techfloor{ @@ -615,12 +589,6 @@ /obj/effect/turf_decal/spline/fancy/opaque/black, /turf/open/floor/plasteel/tech, /area/hangar) -"ry" = ( -/obj/item/pipe/binary, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hangar) "rK" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/structure/easel, @@ -663,6 +631,16 @@ /obj/effect/decal/cleanable/plastic, /turf/open/floor/plasteel/dark, /area/hangar) +"tH" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/hangar) "tR" = ( /obj/effect/turf_decal/techfloor{ dir = 8 @@ -683,6 +661,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech, /area/hangar) +"tY" = ( +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 4 + }, +/area/hangar) "ue" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -786,15 +772,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/wood/walnut, /area/hangar) -"vL" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - req_access_txt = "109" - }, -/obj/item/pipe/binary, -/obj/structure/catwalk/over/plated_catwalk, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/hangar) "vO" = ( /obj/machinery/door/poddoor/multi_tile/four_tile_ver, /turf/closed/indestructible/reinforced, @@ -848,6 +825,13 @@ /obj/structure/girder, /turf/open/floor/plating, /area/hangar) +"wO" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating, +/area/hangar) "xd" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -919,6 +903,14 @@ "zA" = ( /turf/open/floor/plating/ice/smooth, /area/hangar) +"zI" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 6 + }, +/turf/open/floor/plating, +/area/hangar) "zR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/opaque/yellow/filled/arrow_cw, @@ -945,6 +937,15 @@ /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel/tech/grid, /area/hangar) +"AH" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating, +/area/hangar) "AN" = ( /obj/structure/table/reinforced, /obj/item/stack/packageWrap{ @@ -1013,6 +1014,17 @@ /obj/effect/turf_decal/trimline/opaque/yellow/filled/arrow_cw, /turf/open/floor/plasteel/dark, /area/hangar) +"EG" = ( +/obj/structure/railing{ + layer = 3.1 + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/hangar) "ET" = ( /turf/open/floor/plasteel/stairs/wood, /area/hangar) @@ -1052,6 +1064,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/patterned/cargo_one, /area/hangar) +"GT" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/hangar) "GU" = ( /obj/structure/railing/corner{ dir = 1 @@ -1094,6 +1114,13 @@ icon_state = "wood-broken7" }, /area/hangar) +"Hy" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating, +/area/hangar) "HC" = ( /obj/item/kirbyplants{ icon_state = "plant-09" @@ -1163,20 +1190,10 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/hangar) -"Kn" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/item/pipe/binary, -/obj/machinery/light/directional/east, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/hangar) -"KM" = ( -/obj/item/pipe/binary{ - dir = 6 - }, +"KA" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general, /turf/open/floor/plating, /area/hangar) "KV" = ( @@ -1215,13 +1232,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/hangar) -"Ma" = ( +"Mi" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/sign/poster/contraband/energy_swords{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/hangar) +"MG" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/item/pipe/binary{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 }, /turf/open/floor/plasteel/dark, /area/hangar) @@ -1234,18 +1261,15 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/hangar) -"Ni" = ( -/obj/item/pipe/binary, -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/stack/sheet/mineral/wood{ - pixel_x = -6 +"Ne" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 4 }, -/obj/item/stack/sheet/mineral/wood{ - pixel_x = 10; - pixel_y = 7 +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, /area/hangar) "NF" = ( /obj/structure/filingcabinet/chestdrawer, @@ -1385,16 +1409,6 @@ }, /turf/open/floor/plasteel/dark, /area/hangar) -"Tb" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/item/pipe/binary{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/hangar) "Tc" = ( /obj/machinery/door/airlock/highsecurity, /obj/effect/turf_decal/techfloor{ @@ -1416,6 +1430,16 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/hangar) +"TG" = ( +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, +/obj/machinery/fax, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/hangar) "TM" = ( /obj/machinery/light/floor/hangar, /turf/open/floor/plasteel/tech, @@ -1432,6 +1456,20 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/hangar) +"TU" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 9 + }, +/turf/open/floor/plating, +/area/hangar) "Ud" = ( /obj/effect/turf_decal/techfloor, /obj/structure/railing{ @@ -1440,28 +1478,11 @@ }, /turf/open/floor/plasteel/dark, /area/hangar) -"Uz" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/item/pipe/binary{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/hangar) "UG" = ( /obj/machinery/door/airlock, /obj/effect/landmark/outpost/elevator_machine, /turf/open/floor/plasteel, /area/hangar) -"UI" = ( -/obj/item/pipe/binary{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/hangar) "UJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ @@ -1493,6 +1514,15 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/wood/walnut, /area/hangar) +"Vp" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + req_access_txt = "109" + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/barricade/wooden/crude, +/obj/machinery/atmospherics/pipe/simple/general, +/turf/open/floor/plating, +/area/hangar) "Wb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/outpost/hangar_numbers, @@ -1501,36 +1531,6 @@ "Wk" = ( /turf/open/floor/plasteel/patterned/cargo_one, /area/hangar) -"Wq" = ( -/obj/item/pipe/binary{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hangar) -"WI" = ( -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, -/obj/machinery/fax, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/hangar) -"WJ" = ( -/obj/item/pipe/binary{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hangar) "WP" = ( /obj/machinery/atmospherics/components/binary/pump/on, /obj/structure/catwalk/over/plated_catwalk, @@ -1580,6 +1580,16 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel/patterned/cargo_one, /area/hangar) +"XV" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/general{ + dir = 6 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/hangar) "Yb" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 4 @@ -1604,16 +1614,6 @@ /obj/effect/turf_decal/industrial/loading, /turf/open/floor/plasteel/dark, /area/hangar) -"YT" = ( -/obj/structure/catwalk/over/plated_catwalk, -/obj/item/pipe/binary{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/energy_swords{ - pixel_y = -32 - }, -/turf/open/floor/plating/rust, -/area/hangar) "Zc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -2127,11 +2127,11 @@ au au wv dQ -Uz -Kn -dg -qN -gW +XV +GT +kZ +EG +dv Cm ye ye @@ -2171,11 +2171,11 @@ ie ie bZ uw -Tb +Ne ie yV zp -Ma +MG Cm ye ye @@ -2215,11 +2215,11 @@ bb ie AN Pz -YT +Mi ie Yb Sk -lP +tH Cm ye ye @@ -2259,7 +2259,7 @@ bb ie ie xu -fm +tY he Hm Oq @@ -2297,13 +2297,13 @@ gu gu gu ie -KM -mh -ry -ry -vL -Ni -mZ +zI +wO +KA +KA +Vp +cX +nb he Hm Oq @@ -2341,7 +2341,7 @@ ie gu gu ie -jx +oy mx qQ ie @@ -2385,7 +2385,7 @@ ie gu gu ie -Wq +AH ie ie ie @@ -2429,7 +2429,7 @@ ie gu ie ie -UI +Hy ie au au @@ -2473,7 +2473,7 @@ ie ie ie au -WJ +bL ie au zA @@ -2517,7 +2517,7 @@ ie ie Yd WP -cJ +TU KV wc pb @@ -3814,7 +3814,7 @@ ie ie NF iW -WI +TG cR gY Tc diff --git a/_maps/outpost/hangar/test_2_40x40.dmm b/_maps/outpost/hangar/test_2_40x40.dmm index ada742d9f557..d5f4c069a61c 100644 --- a/_maps/outpost/hangar/test_2_40x40.dmm +++ b/_maps/outpost/hangar/test_2_40x40.dmm @@ -3,7 +3,7 @@ /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "109" }, -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/open/floor/concrete/slab_3, /area/hangar) "ah" = ( @@ -748,7 +748,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/open/floor/concrete/slab_3, /area/hangar) "FY" = ( @@ -778,7 +778,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/open/floor/concrete/slab_3, /area/hangar) "Hg" = ( diff --git a/_maps/outpost/hangar/test_40x20.dmm b/_maps/outpost/hangar/test_40x20.dmm index c50c8573660c..66b1a7d24b6f 100644 --- a/_maps/outpost/hangar/test_40x20.dmm +++ b/_maps/outpost/hangar/test_40x20.dmm @@ -34,7 +34,7 @@ /turf/open/floor/plasteel, /area/hangar) "n" = ( -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general, /turf/closed/indestructible/reinforced, /area/hangar) "o" = ( diff --git a/_maps/outpost/hangar/test_40x40.dmm b/_maps/outpost/hangar/test_40x40.dmm index 0bae3295e4e0..d38fcbb3d75d 100644 --- a/_maps/outpost/hangar/test_40x40.dmm +++ b/_maps/outpost/hangar/test_40x40.dmm @@ -46,7 +46,7 @@ /turf/closed/indestructible/reinforced, /area/hangar) "q" = ( -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general, /turf/closed/indestructible/reinforced, /area/hangar) "r" = ( diff --git a/_maps/outpost/hangar/test_56x20.dmm b/_maps/outpost/hangar/test_56x20.dmm index be5afd91fa78..143bbd3ef8d1 100644 --- a/_maps/outpost/hangar/test_56x20.dmm +++ b/_maps/outpost/hangar/test_56x20.dmm @@ -22,7 +22,7 @@ /turf/closed/indestructible/reinforced, /area/hangar) "h" = ( -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general, /turf/closed/indestructible/reinforced, /area/hangar) "k" = ( diff --git a/_maps/outpost/hangar/test_56x40.dmm b/_maps/outpost/hangar/test_56x40.dmm index 6ca87ef8e48a..80ba17bd26b6 100644 --- a/_maps/outpost/hangar/test_56x40.dmm +++ b/_maps/outpost/hangar/test_56x40.dmm @@ -49,7 +49,7 @@ /turf/open/floor/plasteel/tech, /area/hangar) "q" = ( -/obj/item/pipe/binary, +/obj/machinery/atmospherics/pipe/simple/general, /turf/closed/indestructible/reinforced, /area/hangar) "s" = ( diff --git a/_maps/outpost/outpost_test_1.dmm b/_maps/outpost/outpost_test_1.dmm index 009668fb5676..af5f62da3a98 100644 --- a/_maps/outpost/outpost_test_1.dmm +++ b/_maps/outpost/outpost_test_1.dmm @@ -1526,7 +1526,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, /turf/open/floor/plasteel/grimy, /area/outpost/crew/dorm) "ob" = ( @@ -3612,6 +3614,9 @@ /obj/effect/turf_decal/corner/opaque/bottlegreen{ dir = 5 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, /turf/open/floor/plasteel, /area/outpost/crew/dorm) "Gp" = ( diff --git a/_maps/outpost/outpost_test_2.dmm b/_maps/outpost/outpost_test_2.dmm index 5884b870792c..3dab58add4c0 100644 --- a/_maps/outpost/outpost_test_2.dmm +++ b/_maps/outpost/outpost_test_2.dmm @@ -1036,22 +1036,6 @@ }, /turf/open/floor/plasteel/dark, /area/outpost/cargo) -"ej" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/rockvault, -/area/outpost/operations) "en" = ( /obj/structure/closet/firecloset/full{ anchored = 1; @@ -2093,6 +2077,24 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel/tech/techmaint, /area/outpost/engineering/atmospherics) +"ij" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/rockvault, +/area/outpost/operations) "il" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -2807,16 +2809,6 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/outpost/vacant_rooms) -"kP" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/spline/fancy/opaque/black{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/dark, -/area/outpost/operations) "kR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -3466,11 +3458,6 @@ }, /turf/open/floor/wood, /area/outpost/crew/library) -"mZ" = ( -/obj/structure/table/wood, -/obj/machinery/fax, -/turf/open/floor/plasteel, -/area/outpost/crew/canteen) "na" = ( /obj/structure/flora/rock/pile/largejungle{ pixel_x = 3; @@ -3597,6 +3584,11 @@ }, /turf/open/floor/grass, /area/outpost/crew/lounge) +"nB" = ( +/obj/structure/table/wood, +/obj/machinery/fax, +/turf/open/floor/plasteel, +/area/outpost/crew/canteen) "nC" = ( /obj/structure/table/wood, /obj/item/phone{ @@ -10834,14 +10826,6 @@ /obj/structure/flora/stump, /turf/open/floor/grass/snow/safe, /area/outpost/hallway/starboard) -"Mn" = ( -/obj/machinery/photocopier/nt{ - pixel_y = 3 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/hatch/yellow, -/turf/open/floor/plasteel/dark, -/area/outpost/security) "Mo" = ( /obj/structure/bed, /obj/structure/curtain/cloth/grey, @@ -12691,6 +12675,14 @@ icon_state = "panelscorched" }, /area/outpost/maintenance/fore) +"SO" = ( +/obj/machinery/photocopier{ + pixel_y = 3 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plasteel/dark, +/area/outpost/security) "SP" = ( /obj/effect/turf_decal/techfloor/corner{ dir = 1 @@ -13547,6 +13539,18 @@ "VN" = ( /turf/open/floor/engine, /area/outpost/crew/cryo) +"VQ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/outpost/operations) "VT" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -17850,7 +17854,7 @@ sR gP ua sI -mZ +nB IJ IJ gP @@ -18265,7 +18269,7 @@ vo tr jL Mt -Mn +SO zf rv ki @@ -18986,7 +18990,7 @@ JO BE Cv UO -ej +ij Sw Lo jR @@ -19053,7 +19057,7 @@ sx uK DV wT -kP +VQ HD gd Rg diff --git a/_maps/shuttles/shiptest/independent_junker.dmm b/_maps/shuttles/shiptest/independent_junker.dmm index d740a30838a9..006a74a2e3fb 100644 --- a/_maps/shuttles/shiptest/independent_junker.dmm +++ b/_maps/shuttles/shiptest/independent_junker.dmm @@ -98,16 +98,6 @@ /obj/item/cutting_board, /turf/open/floor/plastic, /area/ship/crew/canteen/kitchen) -"aX" = ( -/obj/structure/cable{ - icon_state = "6-10" - }, -/obj/machinery/computer/helm/retro, -/obj/item/paper/construction{ - default_raw_text = "Yeah, just so you know, I left the fuel and air pumps OFF when I dropped this thing of for you, you're gonna have to go outside and turn em on to start up the engines

The pumps are outside on the tank things to the left and right on the back of the ship, there's also one in each engine room you'll need to get going." - }, -/turf/open/floor/plating, -/area/ship/bridge) "bc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -217,6 +207,15 @@ icon_state = "wood-broken3" }, /area/ship/maintenance/starboard) +"cX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage/eva) "dm" = ( /turf/closed/wall/mineral/titanium/survival, /area/ship/cargo) @@ -355,17 +354,6 @@ /obj/structure/girder/reinforced, /turf/open/floor/plating, /area/ship/bridge) -"gh" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/warning/dust, -/obj/machinery/airalarm/directional/east, -/obj/item/paper/construction{ - default_raw_text = "

Airlock Instructions


Because none of you numbnuts can remember them


1: Bolt the door behind you so you dont bump into it and lose all our air.
Bolt is the LEFT BUTTON
2: Go to the air alarm, set it to siphon
3: When at least most of the gas is out, turn OFF siphon
4: You can now open the shutters
I shouldnt have to tell you this, but theyre the RIGHT button

To go back IN


1: Close the shutters behind you
2: Set the air alarm to SIPHON again
3: When all of the dangerous gas is out, set the air alarm to FILL
3: Once the pressure is at least 50 kpa, you can set the air alarm back to normal, and unbolt the door

I still can't fucking believe I have to write this." - }, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, -/area/ship/cargo) "go" = ( /obj/machinery/atmospherics/pipe/simple/purple/hidden, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -1388,6 +1376,16 @@ }, /turf/open/floor/pod/dark, /area/ship/crew/canteen) +"yf" = ( +/obj/structure/cable{ + icon_state = "6-10" + }, +/obj/machinery/computer/helm/retro, +/obj/item/paper/construction{ + default_raw_text = "Yeah, just so you know, I left the fuel and air pumps OFF when I dropped this thing of for you, you're gonna have to go outside and turn em on to start up the engines

The pumps are outside on the tank things to the left and right on the back of the ship, there's also one in each engine room you'll need to get going." + }, +/turf/open/floor/plating, +/area/ship/bridge) "yp" = ( /turf/closed/wall/rust, /area/ship/engineering/electrical) @@ -2097,12 +2095,17 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/ship/crew/canteen/kitchen) -"Mu" = ( -/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{ - dir = 8 +"Mz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning/dust, +/obj/machinery/airalarm/directional/east, +/obj/item/paper/construction{ + default_raw_text = "

Airlock Instructions


Because none of you numbnuts can remember them


1: Bolt the door behind you so you dont bump into it and lose all our air.
Bolt is the LEFT BUTTON
2: Go to the air alarm, set it to siphon
3: When at least most of the gas is out, turn OFF siphon
4: You can now open the shutters
I shouldnt have to tell you this, but theyre the RIGHT button

To go back IN


1: Close the shutters behind you
2: Set the air alarm to SIPHON again
3: When all of the dangerous gas is out, set the air alarm to FILL
3: Once the pressure is at least 50 kpa, you can set the air alarm back to normal, and unbolt the door

I still can't fucking believe I have to write this." }, -/turf/open/floor/engine/hull, -/area/template_noop) +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/ship/cargo) "MW" = ( /obj/docking_port/stationary{ dwidth = 15; @@ -2151,40 +2154,6 @@ }, /turf/open/floor/pod/dark, /area/ship/maintenance/starboard) -"Og" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/stack/cable_coil/cut/red{ - pixel_x = -15; - pixel_y = -8 - }, -/obj/item/paper/crumpled{ - pixel_y = 4; - pixel_x = -23; - default_raw_text = "Attempt 301. Longitudinal traction was applied to the upper protruding flesh appendage. Muffled screaming (possibly Jeff?) was observed. Spontaneous amputation occurred and the screaming ceased. Duct tape applied.

Results: Reployer remains unfunctioning." - }, -/obj/item/paper/crumpled{ - pixel_y = -12; - pixel_x = -3; - default_raw_text = "Attempt 1180. Salt circle was established with regular rituals. 30mL of blood was dripped directly onto the reployer, and chanting begun 1 minute after the beginning of the attempt. Despite using only lighting from tallow candles, soapbucket scrying was ineffective in troubleshooting the problem.

Results: Reployer remains unfunctioning." - }, -/obj/effect/decal/cleanable/greenglow/filled, -/obj/item/screwdriver/old{ - pixel_y = -2; - pixel_x = -15 - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/light/small/directional/east, -/obj/item/trash/candle{ - pixel_y = 17; - pixel_x = -10 - }, -/obj/item/trash/candle{ - pixel_y = 17; - pixel_x = 10 - }, -/obj/structure/salvageable/protolathe/reployer, -/turf/open/floor/pod/dark, -/area/ship/crew/office) "Ol" = ( /turf/closed/wall/mineral/titanium/survival/nodiagonal, /area/ship/crew/canteen) @@ -2455,6 +2424,40 @@ /obj/effect/decal/cleanable/blood/footprints, /turf/open/floor/plating/rust, /area/ship/maintenance/starboard) +"VR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/cable_coil/cut/red{ + pixel_x = -15; + pixel_y = -8 + }, +/obj/item/paper/crumpled{ + pixel_y = 4; + pixel_x = -23; + default_raw_text = "Attempt 301. Longitudinal traction was applied to the upper protruding flesh appendage. Muffled screaming (possibly Jeff?) was observed. Spontaneous amputation occurred and the screaming ceased. Duct tape applied.

Results: Reployer remains unfunctioning." + }, +/obj/item/paper/crumpled{ + pixel_y = -12; + pixel_x = -3; + default_raw_text = "Attempt 1180. Salt circle was established with regular rituals. 30mL of blood was dripped directly onto the reployer, and chanting begun 1 minute after the beginning of the attempt. Despite using only lighting from tallow candles, soapbucket scrying was ineffective in troubleshooting the problem.

Results: Reployer remains unfunctioning." + }, +/obj/effect/decal/cleanable/greenglow/filled, +/obj/item/screwdriver/old{ + pixel_y = -2; + pixel_x = -15 + }, +/obj/effect/decal/cleanable/blood, +/obj/machinery/light/small/directional/east, +/obj/item/trash/candle{ + pixel_y = 17; + pixel_x = -10 + }, +/obj/item/trash/candle{ + pixel_y = 17; + pixel_x = 10 + }, +/obj/structure/salvageable/protolathe/reployer, +/turf/open/floor/pod/dark, +/area/ship/crew/office) "VY" = ( /obj/machinery/atmospherics/pipe/simple/purple/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -2571,6 +2574,12 @@ }, /turf/closed/wall/mineral/wood, /area/ship/maintenance/central) +"Xu" = ( +/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{ + dir = 8 + }, +/turf/open/floor/engine/hull, +/area/ship/external) "XF" = ( /obj/structure/cable{ icon_state = "1-8" @@ -2592,15 +2601,6 @@ "XS" = ( /turf/closed/wall/mineral/titanium/survival/nodiagonal, /area/ship/storage/eva) -"XT" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/ship/storage/eva) "XV" = ( /obj/structure/cable{ icon_state = "5-10" @@ -3067,7 +3067,7 @@ bF bt HB YK -Og +VR JQ xx sh @@ -3180,7 +3180,7 @@ By mN qR Ye -gh +Mz Yr BZ BZ @@ -3272,7 +3272,7 @@ PE "} (19,1,1) = {" YB -aX +yf PR yD EG @@ -3288,7 +3288,7 @@ ay Wh Eb GI -XT +cX zz tB EZ @@ -3344,7 +3344,7 @@ IR hq ZK vd -Mu +Xu BZ Jn BZ diff --git a/_maps/shuttles/shiptest/independent_meta.dmm b/_maps/shuttles/shiptest/independent_meta.dmm index 8a640e7e64a4..8adc2aeb86a5 100644 --- a/_maps/shuttles/shiptest/independent_meta.dmm +++ b/_maps/shuttles/shiptest/independent_meta.dmm @@ -343,28 +343,6 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"aP" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) "aQ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/door/airlock/external{ @@ -400,18 +378,6 @@ }, /turf/template_noop, /area/template_noop) -"bg" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 1; - piping_layer = 2 - }, -/obj/machinery/light/small/built/directional/south, -/turf/open/floor/plating, -/area/ship/engineering) "bh" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/outline/yellow, @@ -426,15 +392,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/plating, /area/ship/engineering) -"bi" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plating, -/area/ship/engineering) "bj" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ @@ -619,51 +576,6 @@ /obj/machinery/light/small/built/directional/west, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"bN" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/trash/plate{ - pixel_x = -6; - pixel_y = -2 - }, -/obj/item/trash/plate{ - pixel_x = -6 - }, -/obj/item/trash/plate{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/trash/plate{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/trash/plate{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/kitchen/fork{ - pixel_x = 12; - pixel_y = 3 - }, -/obj/item/kitchen/fork{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/turf_decal/corner/transparent/bar, -/obj/effect/turf_decal/corner/transparent/bar{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light_switch{ - pixel_x = -13; - pixel_y = 22 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) "bO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ @@ -1043,42 +955,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"cD" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/paper_bin{ - pixel_x = -4 - }, -/obj/item/pen{ - pixel_x = -4 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/item/camera{ - pixel_x = 12; - pixel_y = 6 - }, -/obj/item/storage/photo_album{ - pixel_x = 14 - }, -/obj/item/spacecash/bundle/c1000{ - pixel_x = 7 - }, -/obj/item/spacecash/bundle/c1000{ - pixel_x = 7 - }, -/obj/item/spacecash/bundle/c1000{ - pixel_x = 7 - }, -/obj/machinery/light/small/built/directional/west, -/obj/machinery/light_switch{ - pixel_x = -13; - pixel_y = 22 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) "cE" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt/dust, @@ -1174,19 +1050,6 @@ /obj/machinery/computer/helm/viewscreen/directional/south, /turf/open/floor/plasteel/dark, /area/ship/engineering) -"cJ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light_switch{ - dir = 4; - pixel_y = 10; - pixel_x = -20 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "cK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -1534,29 +1397,6 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"dJ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable, -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass{ - amount = 10 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 10 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 11; - pixel_y = -16 - }, -/turf/open/floor/plating, -/area/ship/engineering) "dK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -1867,28 +1707,6 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"gr" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/corner/opaque/blue/diagonal{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/white/diagonal, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = -12; - pixel_y = -16 - }, -/turf/open/floor/plasteel, -/area/ship/crew) "hq" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/ntspaceworks_big/one{ @@ -2034,12 +1852,29 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"mL" = ( -/obj/machinery/porta_turret/ship/weak{ +"mk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 10 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 11; + pixel_y = -16 + }, +/turf/open/floor/plating, +/area/ship/engineering) "nK" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -2277,6 +2112,25 @@ }, /turf/open/floor/plasteel, /area/ship/crew) +"uB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering) "ve" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/ntspaceworks_big/eight{ @@ -2377,6 +2231,28 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"zw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/corner/opaque/blue/diagonal{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white/diagonal, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -12; + pixel_y = -16 + }, +/turf/open/floor/plasteel, +/area/ship/crew) "zC" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/ntspaceworks_big/four{ @@ -2384,18 +2260,42 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"zJ" = ( +"Ac" = ( +/obj/structure/table, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper_bin{ + pixel_x = -4 + }, +/obj/item/pen{ + pixel_x = -4 + }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/light/small/built/directional/east, -/turf/open/floor/plating, -/area/ship/engineering) +/obj/item/camera{ + pixel_x = 12; + pixel_y = 6 + }, +/obj/item/storage/photo_album{ + pixel_x = 14 + }, +/obj/item/spacecash/bundle/c1000{ + pixel_x = 7 + }, +/obj/item/spacecash/bundle/c1000{ + pixel_x = 7 + }, +/obj/item/spacecash/bundle/c1000{ + pixel_x = 7 + }, +/obj/machinery/light/small/built/directional/west, +/obj/machinery/light_switch{ + pixel_x = -13; + pixel_y = 22 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "Ag" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/corner/transparent/neutral/full, @@ -2437,6 +2337,15 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plasteel/dark, /area/ship/crew) +"AY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating, +/area/ship/engineering) "By" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood, @@ -2466,6 +2375,51 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"EX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/trash/plate{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/item/trash/plate{ + pixel_x = -6 + }, +/obj/item/trash/plate{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/trash/plate{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/trash/plate{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/kitchen/fork{ + pixel_x = 12; + pixel_y = 3 + }, +/obj/item/kitchen/fork{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/corner/transparent/bar, +/obj/effect/turf_decal/corner/transparent/bar{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -13; + pixel_y = 22 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) "Fb" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -2588,6 +2542,12 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"Lo" = ( +/obj/machinery/porta_turret/ship/weak{ + dir = 1 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/bridge) "Lq" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ @@ -2602,6 +2562,12 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"LF" = ( +/obj/machinery/porta_turret/ship/weak{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/bridge) "LK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/north, @@ -2620,6 +2586,19 @@ }, /turf/open/floor/plasteel, /area/ship/crew) +"Mf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_y = 10; + pixel_x = -20 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "MC" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -2901,12 +2880,18 @@ /obj/machinery/light/small/built/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew) -"VT" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 4 +"Ws" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/small/built/directional/east, +/turf/open/floor/plating, +/area/ship/engineering) "Xs" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/ntspaceworks_big/two{ @@ -2940,6 +2925,18 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/crew) +"ZB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 1; + piping_layer = 2 + }, +/obj/machinery/light/small/built/directional/south, +/turf/open/floor/plating, +/area/ship/engineering) "ZR" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ @@ -3001,7 +2998,7 @@ ac ak az aM -bg +ZB ac aa ab @@ -3039,11 +3036,11 @@ aa "} (5,1,1) = {" aa -mL +Lo ac aB aO -bi +AY ac bH ac @@ -3053,7 +3050,7 @@ cH ac cZ JR -dJ +mk ac jJ aa @@ -3063,8 +3060,8 @@ aa aa am aC -aP -zJ +uB +Ws by dR rF @@ -3133,7 +3130,7 @@ tU Fb Ag cy -cJ +Mf cP db On @@ -3276,7 +3273,7 @@ aH Zf bq bD -bN +EX ca co cA @@ -3291,7 +3288,7 @@ aa "} (17,1,1) = {" aa -mL +Lo ai ai rU @@ -3361,7 +3358,7 @@ uw ai bF bQ -cD +Ac yZ cO bQ @@ -3421,7 +3418,7 @@ aj OX ku MM -gr +zw ai bQ cg @@ -3481,10 +3478,10 @@ aa (26,1,1) = {" aa aa -VT +LF ai ai -VT +LF aa aa aa @@ -3492,10 +3489,10 @@ aa aa aa aa -VT +LF bD bD -VT +LF aa aa "} diff --git a/_maps/shuttles/shiptest/independent_rigger.dmm b/_maps/shuttles/shiptest/independent_rigger.dmm index 6ebe28fedadc..fb969897dce3 100644 --- a/_maps/shuttles/shiptest/independent_rigger.dmm +++ b/_maps/shuttles/shiptest/independent_rigger.dmm @@ -231,6 +231,13 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) +"dH" = ( +/obj/structure/table/reinforced, +/obj/machinery/firealarm/directional/west, +/obj/machinery/fax, +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/blue, +/area/ship/bridge) "dJ" = ( /obj/effect/turf_decal/industrial/outline/yellow, /obj/structure/closet/firecloset, @@ -972,6 +979,22 @@ }, /turf/open/floor/plasteel/grimy, /area/ship/security) +"mD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/closet/emcloset/wall{ + pixel_y = 28 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) "mH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -1604,13 +1627,6 @@ /obj/item/clothing/head/hardhat/dblue, /turf/open/floor/plating, /area/ship/engineering) -"un" = ( -/obj/structure/table/reinforced, -/obj/machinery/firealarm/directional/west, -/obj/machinery/fax, -/obj/machinery/light/directional/south, -/turf/open/floor/carpet/blue, -/area/ship/bridge) "uy" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2274,31 +2290,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"AC" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/engineering) -"AH" = ( -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/obj/structure/curtain/bounty, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) "AQ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2847,15 +2838,6 @@ /obj/machinery/atmospherics/components/unary/portables_connector/layer4, /turf/open/floor/plating, /area/ship/engineering/atmospherics) -"Hn" = ( -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/obj/structure/curtain/bounty, -/obj/structure/sign/poster/contraband/random{ - pixel_x = -32 - }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) "Ht" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2907,6 +2889,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plasteel/grimy, /area/ship/security) +"HN" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/bounty, +/obj/structure/sign/poster/contraband/random{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "HR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -3287,6 +3278,12 @@ }, /turf/open/floor/plasteel/dark, /area/ship/medical) +"Ne" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/bounty, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "Nh" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -4534,9 +4531,9 @@ bC FO cc Ce -Hn -AH -AH +HN +Ne +Ne Ry gc Fu @@ -4811,7 +4808,7 @@ pt JK cl ax -un +dH qd Vt QQ @@ -4992,7 +4989,7 @@ fh lx tx Tq -AC +mD cR CG jx diff --git a/_maps/shuttles/shiptest/independent_shepherd.dmm b/_maps/shuttles/shiptest/independent_shepherd.dmm index 611beb40135b..f9c1fd853ecd 100644 --- a/_maps/shuttles/shiptest/independent_shepherd.dmm +++ b/_maps/shuttles/shiptest/independent_shepherd.dmm @@ -48,16 +48,6 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/wood, /area/ship/crew/library) -"at" = ( -/obj/item/paper/natural{ - icon_state = "paper_words"; - default_raw_text = "

Trappist Recipe


By Pater Noster

Servings: 2 Prep Time: 10 mins Cook Time: 1-2 hrs Difficulty: Easy
Trappist beer is a rich and pleasant beer traditionally brewed by monks.

Ingredients


Ale:
Ale! The core of any good drink. Easily obtainable by fermenting oats in a barrel for a while. This will be the basis of our brew, giving it it's fruity taste and color!
Holy water:
This is what a makes a trappist a trappist and not a trapisst, the religion! Real easy to get if you are reading this where you are supposed to be reading this! If the chaplain can't bothered it's also easily harvestable from holymelons as long as you bother to separate it.
Sugar:
Sugar is what's gonna make it all come together sweetening the brew and mixing well with the ale from earlier. It's easy to obtain from grinding sugarcanes. Feel free to add liberally.

Preparation


1. Mix the ale and holy water together.
2. Add some sugar to the mix as you keep stirring it for 1 minute.
3. At this point you're free to just use it as is! But feel free to experiment by adding new flavours and really making it your own!

Closing statement


And that's it! Hopefully this guide has been somewhat helpful. A final tip I have is to drink it with bread and cheese, really finishes of the package."; - name = "paper - Trappist Recipe"; - pixel_x = 2; - pixel_y = 4 - }, -/turf/open/floor/wood/ebony, -/area/ship/crew/canteen) "av" = ( /obj/structure/table/wood, /obj/item/flashlight/lantern, @@ -1612,6 +1602,16 @@ /obj/item/reagent_containers/glass/bucket/wooden, /turf/open/floor/wood/ebony, /area/ship/crew/canteen) +"ok" = ( +/obj/item/paper/natural{ + icon_state = "paper_words"; + default_raw_text = "

Trappist Recipe


By Pater Noster

Servings: 2 Prep Time: 10 mins Cook Time: 1-2 hrs Difficulty: Easy
Trappist beer is a rich and pleasant beer traditionally brewed by monks.

Ingredients


Ale:
Ale! The core of any good drink. Easily obtainable by fermenting oats in a barrel for a while. This will be the basis of our brew, giving it it's fruity taste and color!
Holy water:
This is what a makes a trappist a trappist and not a trapisst, the religion! Real easy to get if you are reading this where you are supposed to be reading this! If the chaplain can't bothered it's also easily harvestable from holymelons as long as you bother to separate it.
Sugar:
Sugar is what's gonna make it all come together sweetening the brew and mixing well with the ale from earlier. It's easy to obtain from grinding sugarcanes. Feel free to add liberally.

Preparation


1. Mix the ale and holy water together.
2. Add some sugar to the mix as you keep stirring it for 1 minute.
3. At this point you're free to just use it as is! But feel free to experiment by adding new flavours and really making it your own!

Closing statement


And that's it! Hopefully this guide has been somewhat helpful. A final tip I have is to drink it with bread and cheese, really finishes of the package."; + name = "paper - Trappist Recipe"; + pixel_x = 2; + pixel_y = 4 + }, +/turf/open/floor/wood/ebony, +/area/ship/crew/canteen) "on" = ( /turf/open/floor/plasteel/stairs/right{ dir = 4 @@ -1807,6 +1807,14 @@ }, /turf/open/floor/wood, /area/ship/hallway/starboard) +"pN" = ( +/obj/structure/window/reinforced/spawner/west, +/obj/effect/turf_decal/corner/opaque/lightgrey/mono, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/ship/engineering/atmospherics) "pO" = ( /turf/closed/wall, /area/ship/crew/canteen) @@ -4998,15 +5006,6 @@ }, /turf/open/floor/plating, /area/ship/crew/chapel) -"Sa" = ( -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ - dir = 8; - piping_layer = 2 - }, -/obj/effect/turf_decal/corner/opaque/lightgrey/mono, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) "Sb" = ( /obj/effect/turf_decal/siding/wood{ color = "#332521"; @@ -6810,7 +6809,7 @@ xj xj Uf Gi -Sa +pN uq ti dM @@ -7457,7 +7456,7 @@ ZG ZG pO OO -at +ok uY QC ZG diff --git a/_maps/shuttles/shiptest/independent_tranquility.dmm b/_maps/shuttles/shiptest/independent_tranquility.dmm index 242267392e9b..a43c627176e4 100644 --- a/_maps/shuttles/shiptest/independent_tranquility.dmm +++ b/_maps/shuttles/shiptest/independent_tranquility.dmm @@ -27,6 +27,27 @@ }, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) +"aE" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 11; + pixel_y = -17 + }, +/turf/open/floor/carpet/nanoweave/beige, +/area/ship/hallway/starboard) "aF" = ( /obj/structure/window/reinforced{ dir = 1 @@ -967,28 +988,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/crew/cryo) -"hk" = ( -/obj/structure/closet/wall/orange{ - pixel_y = 32 - }, -/obj/item/clothing/suit/fire/atmos, -/obj/item/clothing/mask/gas/atmos, -/obj/item/clothing/head/hardhat/atmos, -/obj/item/storage/belt/utility/atmostech, -/obj/item/clothing/head/beret/atmos, -/obj/item/circuitboard/machine/shieldwallgen/atmos, -/obj/item/circuitboard/machine/shieldwallgen/atmos, -/obj/item/stack/tape/industrial, -/obj/item/stack/tape/industrial, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/item/extinguisher/advanced, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ - dir = 4 - }, -/obj/item/clothing/head/beret/atmos, -/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering/engine) "hn" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Workshop" @@ -1448,6 +1447,35 @@ }, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/port) +"kC" = ( +/obj/structure/chair/comfy/brown, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/closet/wall{ + dir = 4; + name = "Wardrobe"; + pixel_x = -28 + }, +/obj/item/clothing/head/wig/random, +/obj/item/clothing/under/color/jumpskirt/random, +/obj/item/clothing/under/color/random, +/obj/item/clothing/under/rank/command/captain/skirt, +/obj/item/clothing/under/rank/command/captain/suit, +/obj/item/pen/fountain/captain, +/obj/item/radio/headset/heads/captain, +/obj/item/storage/backpack/duffelbag/captain, +/obj/item/clothing/suit/hooded/wintercoat/captain, +/obj/item/clothing/suit/armor/vest/capcarapace/duster, +/obj/item/clothing/head/caphat/cowboy, +/obj/item/clothing/shoes/cowboy/fancy, +/obj/item/clothing/under/pants/camo, +/obj/item/clothing/suit/hooded/wintercoat/captain, +/turf/open/floor/wood, +/area/ship/crew/dorm/dormfive) "kK" = ( /obj/effect/spawner/structure/window/shuttle, /obj/machinery/door/poddoor/shutters/preopen{ @@ -1570,21 +1598,6 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/engine) -"mb" = ( -/obj/effect/turf_decal/techfloor/orange{ - dir = 9 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/suit_storage_unit/independent/engineering, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - pixel_y = 21; - pixel_x = -12 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/electrical) "mc" = ( /obj/effect/turf_decal/techfloor{ dir = 6 @@ -1612,18 +1625,6 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/wood/birch, /area/ship/crew/crewfive) -"mv" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom/wideband/table{ - dir = 1 - }, -/obj/item/toy/plush/knight{ - name = "The Navigator"; - pixel_x = -9; - pixel_y = 5 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) "mz" = ( /obj/effect/spawner/structure/window/shuttle, /obj/machinery/door/poddoor/shutters/preopen{ @@ -1752,6 +1753,19 @@ }, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/starboard) +"nz" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light_switch{ + pixel_x = 20; + dir = 8; + pixel_y = -12 + }, +/turf/open/floor/grass, +/area/ship/crew/hydroponics) "nN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -1828,26 +1842,6 @@ }, /turf/open/floor/carpet, /area/ship/crew/crewfive) -"oN" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Personal Effects"; - pixel_x = -32 - }, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/item/clothing/under/misc/pj/red, -/obj/item/clothing/under/pants/black, -/obj/item/clothing/under/dress/blacktango, -/obj/item/clothing/suit/apron/overalls, -/obj/item/clothing/suit/gothcoat, -/obj/item/clothing/suit/ianshirt, -/obj/item/clothing/suit/nerdshirt, -/obj/item/clothing/head/beret/eng/hazard, -/obj/item/radio/headset/headset_eng, -/obj/item/cartridge/lawyer, -/turf/open/floor/carpet/nanoweave/red, -/area/ship/crew/dorm/dormfour) "oS" = ( /obj/structure/cable{ icon_state = "2-8" @@ -2006,6 +2000,31 @@ color = "#4c535b" }, /area/ship/hallway/port) +"pT" = ( +/obj/effect/turf_decal/techfloor/orange, +/obj/structure/closet/wall/orange{ + dir = 1; + pixel_y = -32 + }, +/obj/item/stack/tape/industrial/electrical, +/obj/item/stack/tape/industrial, +/obj/item/holosign_creator/engineering, +/obj/item/storage/backpack/duffelbag/engineering, +/obj/item/storage/belt/utility/full/engi, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/rcl/pre_loaded, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/geiger_counter, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass/twenty, +/obj/item/circuitboard/machine/cell_charger, +/obj/item/clothing/head/beret/eng, +/obj/item/clothing/head/beret/eng/hazard, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) "qa" = ( /turf/template_noop, /area/template_noop) @@ -2062,6 +2081,26 @@ }, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/port) +"qV" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/closet/wall{ + dir = 1; + name = "Wardrobe"; + pixel_y = -28 + }, +/obj/item/clothing/head/wig/random, +/obj/item/storage/box/syndie_kit/chameleon, +/obj/item/paper_bin/bundlenatural, +/obj/item/clothing/under/color/jumpskirt/random, +/obj/item/clothing/under/color/random, +/obj/item/clothing/suit/jacket/letterman, +/obj/item/clothing/suit/toggle/lawyer/brown, +/obj/item/clothing/under/suit/burgundy, +/obj/item/clothing/under/pants/red, +/obj/item/clothing/suit/nerdshirt, +/obj/item/storage/bag/books, +/turf/open/floor/wood, +/area/ship/crew/dorm/dormfive) "rc" = ( /obj/structure/bookcase/random/religion, /obj/effect/turf_decal/siding/wood{ @@ -2402,6 +2441,23 @@ }, /turf/open/floor/plating, /area/ship/medical/surgery) +"tU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{ + dir = 10 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/item/storage/overmap_ship/electric/directional/west, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 11; + pixel_y = -17 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) "tX" = ( /obj/docking_port/stationary{ dwidth = 10; @@ -2568,14 +2624,6 @@ /obj/machinery/vending/boozeomat, /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/canteen) -"vv" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 26; - pixel_y = 6 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/hallway/port) "vx" = ( /turf/open/floor/wood/ebony, /area/ship/crew/canteen) @@ -2871,6 +2919,28 @@ /obj/structure/cable, /turf/open/floor/carpet/nanoweave/red, /area/ship/crew/dorm/dormfour) +"xW" = ( +/obj/structure/closet/wall/orange{ + pixel_y = 32 + }, +/obj/item/clothing/suit/fire/atmos, +/obj/item/clothing/mask/gas/atmos, +/obj/item/clothing/head/hardhat/atmos, +/obj/item/storage/belt/utility/atmostech, +/obj/item/clothing/head/beret/atmos, +/obj/item/circuitboard/machine/shieldwallgen/atmos, +/obj/item/circuitboard/machine/shieldwallgen/atmos, +/obj/item/stack/tape/industrial, +/obj/item/stack/tape/industrial, +/obj/item/storage/backpack/duffelbag/engineering, +/obj/item/extinguisher/advanced, +/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ + dir = 4 + }, +/obj/item/clothing/head/beret/atmos, +/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/engine) "yg" = ( /obj/machinery/light/directional/north, /obj/structure/chair/sofa/corner, @@ -2915,23 +2985,6 @@ /obj/machinery/light/dim/directional/north, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/crewfour) -"yz" = ( -/obj/effect/turf_decal/techfloor{ - dir = 10 - }, -/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{ - dir = 10 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/item/storage/overmap_ship/electric/directional/west, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 11; - pixel_y = -17 - }, -/turf/open/floor/plasteel/tech, -/area/ship/bridge) "yE" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3201,31 +3254,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/port) -"Aq" = ( -/obj/effect/turf_decal/techfloor/orange, -/obj/structure/closet/wall/orange{ - dir = 1; - pixel_y = -32 - }, -/obj/item/stack/tape/industrial/electrical, -/obj/item/stack/tape/industrial, -/obj/item/holosign_creator/engineering, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/item/storage/belt/utility/full/engi, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/rcl/pre_loaded, -/obj/item/clothing/suit/radiation, -/obj/item/clothing/head/radiation, -/obj/item/geiger_counter, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass/twenty, -/obj/item/circuitboard/machine/cell_charger, -/obj/item/clothing/head/beret/eng, -/obj/item/clothing/head/beret/eng/hazard, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/electrical) "Ay" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/dorm/dormfour) @@ -3341,11 +3369,6 @@ }, /turf/open/floor/wood, /area/ship/crew/dorm/dormfive) -"BJ" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/grass, -/area/ship/crew/hydroponics) "BK" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -3366,25 +3389,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/starboard) -"BS" = ( -/obj/machinery/light/dim/directional/west, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ - dir = 5 - }, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - pixel_y = 21; - pixel_x = -12 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical/surgery) "BV" = ( /obj/structure/table, /obj/structure/window/reinforced/spawner{ @@ -3617,35 +3621,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/electrical) -"Dp" = ( -/obj/structure/chair/comfy/brown, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/structure/closet/wall{ - dir = 4; - name = "Wardrobe"; - pixel_x = -28 - }, -/obj/item/clothing/head/wig/random, -/obj/item/clothing/under/color/jumpskirt/random, -/obj/item/clothing/under/color/random, -/obj/item/clothing/under/rank/command/captain/skirt, -/obj/item/clothing/under/rank/command/captain/suit, -/obj/item/pen/fountain/captain, -/obj/item/radio/headset/heads/captain, -/obj/item/storage/backpack/duffelbag/captain, -/obj/item/clothing/suit/hooded/wintercoat/captain, -/obj/item/clothing/suit/armor/vest/capcarapace/duster, -/obj/item/clothing/head/caphat/cowboy, -/obj/item/clothing/shoes/cowboy/fancy, -/obj/item/clothing/under/pants/camo, -/obj/item/clothing/suit/hooded/wintercoat/captain, -/turf/open/floor/wood, -/area/ship/crew/dorm/dormfive) "Du" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3789,17 +3764,6 @@ }, /turf/open/floor/plating, /area/ship/crew/crewfour) -"En" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_y = 21; - pixel_x = -12 - }, -/turf/open/floor/plasteel/tech, -/area/ship/storage) "Eo" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable{ @@ -3935,28 +3899,17 @@ }, /turf/open/floor/plasteel/tech, /area/ship/security/armory) -"FW" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/power/apc/auto_name/directional/east, +"FR" = ( +/obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "0-2" }, /obj/machinery/light_switch{ - pixel_x = 20; - dir = 8; - pixel_y = -12 - }, -/turf/open/floor/grass, -/area/ship/crew/hydroponics) -"Ga" = ( -/obj/structure/chair/comfy/black{ - dir = 8 - }, -/mob/living/simple_animal/parrot/Poly{ - name = "Polyphema" + pixel_y = 21; + pixel_x = -12 }, /turf/open/floor/plasteel/tech, -/area/ship/crew/crewfour) +/area/ship/storage) "Gb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/layer2{ dir = 4 @@ -4061,6 +4014,18 @@ }, /turf/open/floor/carpet, /area/ship/crew/crewfive) +"GN" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/wideband/table{ + dir = 1 + }, +/obj/item/toy/plush/knight{ + name = "The Navigator"; + pixel_x = -9; + pixel_y = 5 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) "GO" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck/tarot{ @@ -4097,26 +4062,6 @@ }, /turf/open/floor/plating, /area/ship/crew/cryo) -"GW" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/closet/wall{ - dir = 1; - name = "Wardrobe"; - pixel_y = -28 - }, -/obj/item/clothing/head/wig/random, -/obj/item/storage/box/syndie_kit/chameleon, -/obj/item/paper_bin/bundlenatural, -/obj/item/clothing/under/color/jumpskirt/random, -/obj/item/clothing/under/color/random, -/obj/item/clothing/suit/jacket/letterman, -/obj/item/clothing/suit/toggle/lawyer/brown, -/obj/item/clothing/under/suit/burgundy, -/obj/item/clothing/under/pants/red, -/obj/item/clothing/suit/nerdshirt, -/obj/item/storage/bag/books, -/turf/open/floor/wood, -/area/ship/crew/dorm/dormfive) "GZ" = ( /obj/structure/window/reinforced, /obj/structure/sink/puddle, @@ -4278,6 +4223,21 @@ }, /turf/open/floor/wood/birch, /area/ship/crew/crewtwo) +"Ib" = ( +/obj/effect/turf_decal/techfloor/orange{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/suit_storage_unit/independent/engineering, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = -12 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) "If" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -4358,20 +4318,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/crewfour) -"IF" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - color = "#792f27"; - dir = 9 - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -20; - pixel_y = 12 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "IJ" = ( /obj/item/kirbyplants/random, /turf/open/floor/carpet/nanoweave/beige, @@ -4940,6 +4886,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/starboard) +"Nd" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 26; + pixel_y = 6 + }, +/turf/open/floor/carpet/nanoweave/beige, +/area/ship/hallway/port) "Ng" = ( /obj/structure/cable{ icon_state = "1-8" @@ -4976,6 +4930,40 @@ }, /turf/open/floor/wood, /area/ship/crew/canteen) +"Nl" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/suit_storage_unit/independent/engineering, +/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ + dir = 6 + }, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = -12 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/engine) +"Nv" = ( +/obj/machinery/light/dim/directional/west, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = -12 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical/surgery) "Ny" = ( /obj/structure/cable{ icon_state = "1-8" @@ -5041,6 +5029,20 @@ }, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) +"NX" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + color = "#792f27"; + dir = 9 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "Of" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/mug{ @@ -5060,20 +5062,14 @@ /turf/open/floor/plasteel, /area/ship/crew/cryo) "Om" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/suit_storage_unit/independent/engineering, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ - dir = 6 +/obj/structure/chair/comfy/black{ + dir = 8 }, -/obj/machinery/light_switch{ - pixel_y = 21; - pixel_x = -12 +/mob/living/simple_animal/parrot/Polly{ + name = "Pollyphema" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering/engine) +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewfour) "Oz" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, @@ -5156,27 +5152,6 @@ /obj/machinery/vending/clothing, /turf/open/floor/plasteel/tech, /area/ship/crew/cryo) -"OV" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 11; - pixel_y = -17 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/hallway/starboard) "Pg" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable{ @@ -5402,6 +5377,11 @@ }, /turf/open/floor/wood, /area/ship/crew/dorm/dormfive) +"QH" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/grass, +/area/ship/crew/hydroponics) "QO" = ( /obj/machinery/door/airlock/external, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -5856,6 +5836,26 @@ "TC" = ( /turf/closed/wall/mineral/titanium, /area/ship/storage) +"TI" = ( +/obj/structure/closet/wall/blue{ + dir = 4; + name = "Personal Effects"; + pixel_x = -32 + }, +/obj/item/storage/belt/utility/full, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/item/clothing/under/misc/pj/red, +/obj/item/clothing/under/pants/black, +/obj/item/clothing/under/dress/blacktango, +/obj/item/clothing/suit/apron/overalls, +/obj/item/clothing/suit/gothcoat, +/obj/item/clothing/suit/ianshirt, +/obj/item/clothing/suit/nerdshirt, +/obj/item/clothing/head/beret/eng/hazard, +/obj/item/radio/headset/headset_eng, +/obj/item/cartridge/lawyer, +/turf/open/floor/carpet/nanoweave/red, +/area/ship/crew/dorm/dormfour) "TJ" = ( /obj/structure/closet/wall{ dir = 8; @@ -6923,8 +6923,8 @@ Aa lW fu Qb -BJ -FW +QH +nz Pr GZ Uy @@ -6970,9 +6970,9 @@ Uy Uy Uy Uy -mb +Ib Vn -Aq +pT aO Sp aq @@ -7032,7 +7032,7 @@ wf RI zI Pg -vv +Nd tY tY tY @@ -7134,7 +7134,7 @@ UU vx Ch oS -IF +NX cI Qe vj @@ -7167,7 +7167,7 @@ mA Io UI zF -yz +tU mA fY Fq @@ -7225,7 +7225,7 @@ MJ dD mV Fq -Om +Nl xs Sp aq @@ -7247,7 +7247,7 @@ qa qa qa kR -mv +GN fF ey IU @@ -7267,7 +7267,7 @@ xp rB Dx Fq -hk +xW JX Jq Gs @@ -7379,7 +7379,7 @@ Bm yY mc mA -OV +aE Fq Wk Nj @@ -7633,17 +7633,17 @@ qB bP QW xV -oN +TI Ay eC Lb jp pJ sb -BS +Nv Fl QQ -En +FR SC Ug aq @@ -7878,7 +7878,7 @@ iK QA AL uW -Dp +kC rt iK yr @@ -7921,10 +7921,10 @@ tA Gf XH pK -GW +qV iK XP -Ga +Om ZK mB ID diff --git a/_maps/shuttles/shiptest/inteq_talos.dmm b/_maps/shuttles/shiptest/inteq_talos.dmm index 92187aee8641..3bd00f00ed9a 100644 --- a/_maps/shuttles/shiptest/inteq_talos.dmm +++ b/_maps/shuttles/shiptest/inteq_talos.dmm @@ -553,6 +553,17 @@ /obj/effect/landmark/start/head_of_security, /turf/open/floor/plasteel/dark, /area/ship/bridge) +"dW" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) "dZ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -783,26 +794,6 @@ /obj/item/cigbutt, /turf/open/floor/plating/airless, /area/ship/maintenance/port) -"ft" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/fireaxecabinet{ - dir = 1; - pixel_y = -32 - }, -/obj/item/paper/fluff{ - default_raw_text = "Artificer team: The AAC is finicky and has a habit of malfunctioning over time. If this happens, remember how to reset it. Swipe your ID card on the control unit and make sure all settings are correct. One airlock should be set to internal, one to external. Once this is done, cycle the airlock to re-enable automatic mode and lift any stuck bolts. If you aren't an artificer, don't mess with it. You shouldn't have access anyway." - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering) "fC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/opaque/yellow/warning{ @@ -1167,6 +1158,29 @@ }, /turf/open/floor/plasteel/elevatorshaft, /area/ship/hallway/central) +"hK" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax, +/obj/machinery/button/door{ + id = "talos_bridge"; + name = "Bridge Shutters"; + pixel_x = 6; + pixel_y = 23 + }, +/obj/machinery/button/door{ + id = "talos_windows"; + name = "Window Lockdown"; + pixel_x = -6; + pixel_y = 23 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "hL" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ dir = 4 @@ -1178,18 +1192,6 @@ /obj/effect/decal/cleanable/oil/streak, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"hO" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/engineering) "hQ" = ( /obj/structure/table/reinforced, /obj/item/storage/box/drinkingglasses{ @@ -1248,6 +1250,18 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) +"im" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) "iu" = ( /obj/machinery/door/airlock/hatch{ dir = 4 @@ -1299,6 +1313,22 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) +"iD" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/item/analyzer{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "iE" = ( /obj/item/storage/backpack/industrial, /obj/item/clothing/suit/hazardvest, @@ -2093,6 +2123,26 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) +"ny" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/fireaxecabinet{ + dir = 1; + pixel_y = -32 + }, +/obj/item/paper/fluff{ + default_raw_text = "Artificer team: The AAC is finicky and has a habit of malfunctioning over time. If this happens, remember how to reset it. Swipe your ID card on the control unit and make sure all settings are correct. One airlock should be set to internal, one to external. Once this is done, cycle the airlock to re-enable automatic mode and lift any stuck bolts. If you aren't an artificer, don't mess with it. You shouldn't have access anyway." + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) "nz" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3177,20 +3227,6 @@ /obj/item/trash/popcorn, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/port) -"tb" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 5 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering) "te" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ dir = 8 @@ -4999,19 +5035,6 @@ /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"Fu" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/item/analyzer{ - pixel_x = 6; - pixel_y = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/engineering) "Fx" = ( /obj/structure/chair{ dir = 8 @@ -5712,18 +5735,6 @@ dir = 4 }, /area/ship/cargo) -"KI" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering) "KQ" = ( /obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/airlock/hatch{ @@ -6230,6 +6241,18 @@ "OF" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/engineering) +"OG" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/plating, +/area/ship/engineering) "OK" = ( /obj/machinery/cryopod{ dir = 8 @@ -6253,29 +6276,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/security) -"ON" = ( -/obj/structure/table/reinforced, -/obj/machinery/fax, -/obj/machinery/button/door{ - id = "talos_bridge"; - name = "Bridge Shutters"; - pixel_x = 6; - pixel_y = 23 - }, -/obj/machinery/button/door{ - id = "talos_windows"; - name = "Window Lockdown"; - pixel_x = -6; - pixel_y = 23 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) "OP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -6455,19 +6455,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"Qt" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "burn chamber input pump" - }, -/obj/machinery/atmospherics/pipe/simple/dark/visible/layer1{ - dir = 5 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/engine) "Qu" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -7324,6 +7311,22 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/airless, /area/ship/cargo/port) +"We" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "burn chamber input pump" + }, +/obj/machinery/atmospherics/pipe/simple/dark/visible/layer1{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) "Wf" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/structure/cable, @@ -7877,8 +7880,8 @@ bM UG UM lO -tb -KI +dW +im cn pU pU @@ -7887,7 +7890,7 @@ pU pU pU Vk -Qt +We dl pm iA @@ -7911,8 +7914,8 @@ OF jf ak Uc -hO -Fu +OG +iD Lo dw ge @@ -8185,7 +8188,7 @@ Xg Ps sW eT -ft +ny xI Oq kD @@ -8624,7 +8627,7 @@ lC wE qW mX -ON +hK qM cf Lc diff --git a/_maps/shuttles/shiptest/inteq_vaquero.dmm b/_maps/shuttles/shiptest/inteq_vaquero.dmm index 4019964cc483..2e8d626d4e5a 100644 --- a/_maps/shuttles/shiptest/inteq_vaquero.dmm +++ b/_maps/shuttles/shiptest/inteq_vaquero.dmm @@ -1677,7 +1677,6 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/office) "Ax" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 }, diff --git a/_maps/shuttles/shiptest/solgov_chronicle.dmm b/_maps/shuttles/shiptest/solgov_chronicle.dmm index a501fcd211f5..56b5e7d3df8a 100644 --- a/_maps/shuttles/shiptest/solgov_chronicle.dmm +++ b/_maps/shuttles/shiptest/solgov_chronicle.dmm @@ -175,8 +175,7 @@ /area/ship/cargo) "bs" = ( /obj/machinery/telecomms/broadcaster/preset_left{ - network = "SolNet"; - pixel_y = 0 + network = "SolNet" }, /obj/machinery/door/window/brigdoor/northright{ dir = 2; @@ -676,7 +675,6 @@ /area/ship/cargo) "gi" = ( /obj/effect/turf_decal/siding/wood{ - dir = 2; color = "#543C30" }, /obj/structure/railing/wood{ @@ -759,7 +757,6 @@ "hp" = ( /obj/structure/table/wood, /obj/structure/railing/wood{ - dir = 2; color = "#792f27" }, /obj/item/reagent_containers/food/snacks/grown/cabbage{ @@ -1833,7 +1830,6 @@ /area/ship/cargo) "sq" = ( /obj/effect/turf_decal/siding/wood{ - dir = 2; color = "#543C30" }, /obj/structure/cable{ @@ -1875,7 +1871,6 @@ /area/ship/security/armory) "sz" = ( /obj/effect/turf_decal/siding/wood{ - dir = 2; color = "#543C30" }, /obj/structure/railing/wood{ @@ -2001,7 +1996,6 @@ req_one_access = list(61,11) }, /obj/machinery/telecomms/message_server{ - pixel_y = 0; autolinkers = list("solgovPDA"); network = "SolNet"; calibrating = 0 @@ -2087,7 +2081,6 @@ /area/ship/engineering) "uK" = ( /obj/effect/turf_decal/siding/wood{ - dir = 2; color = "#543C30" }, /obj/structure/cable{ @@ -2240,7 +2233,6 @@ /obj/item/kirbyplants{ icon_state = "plant-11"; pixel_x = 10; - pixel_y = 0; layer = 2.89 }, /obj/structure/table/wood/fancy/purple, @@ -2571,9 +2563,6 @@ /obj/effect/turf_decal/atmos/oxygen{ layer = 2.04 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -2581,6 +2570,9 @@ dir = 1 }, /obj/effect/turf_decal/techfloor/orange, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engine) "zs" = ( @@ -2804,7 +2796,6 @@ /obj/machinery/telecomms/processor{ autolinkers = list("processor7"); network = "SolNet"; - pixel_y = 0; id = "Processor" }, /obj/structure/window/reinforced, @@ -3026,7 +3017,6 @@ /area/ship/crew/office) "Ds" = ( /obj/effect/turf_decal/siding/wood{ - dir = 2; color = "#543C30" }, /obj/structure/cable{ @@ -3070,7 +3060,6 @@ }, /obj/machinery/firealarm/directional/north, /obj/machinery/light_switch{ - dir = 2; pixel_y = 22; pixel_x = -12 }, @@ -3220,7 +3209,6 @@ icon_state = "0-8" }, /obj/machinery/light_switch{ - dir = 2; pixel_y = 22; pixel_x = -12 }, @@ -3544,8 +3532,7 @@ "IH" = ( /obj/machinery/telecomms/server/presets/solgov{ autolinkers = list("solgov","sproingle"); - network = "SolNet"; - pixel_y = 0 + network = "SolNet" }, /obj/machinery/door/window/brigdoor/northleft{ dir = 2; @@ -3722,7 +3709,6 @@ /area/ship/engineering) "Kc" = ( /obj/effect/turf_decal/siding/wood{ - dir = 2; color = "#543C30" }, /obj/structure/cable{ @@ -3746,9 +3732,7 @@ /obj/effect/turf_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/turf_decal/siding/wood/end{ - dir = 2 - }, +/obj/effect/turf_decal/siding/wood/end, /obj/structure/fluff/hedge, /turf/open/floor/wood/walnut, /area/ship/crew/crewtwo) @@ -4016,7 +4000,6 @@ "Nu" = ( /obj/structure/table/wood, /obj/structure/railing/wood{ - dir = 2; color = "#792f27" }, /obj/machinery/light/small/directional/west, @@ -4117,8 +4100,7 @@ pixel_y = -1 }, /obj/item/folder/solgov{ - pixel_x = 4; - pixel_y = 0 + pixel_x = 4 }, /obj/item/pen/solgov{ pixel_x = 2 @@ -4493,7 +4475,6 @@ dir = 8 }, /obj/machinery/light_switch{ - dir = 2; pixel_y = 22; pixel_x = -12 }, @@ -4560,7 +4541,6 @@ "SJ" = ( /obj/machinery/telecomms/receiver/preset_left{ network = "SolNet"; - pixel_y = 0; id = "Receiver" }, /obj/structure/window/reinforced{ @@ -4585,8 +4565,7 @@ pixel_y = -1 }, /obj/item/folder/solgov{ - pixel_x = 4; - pixel_y = 0 + pixel_x = 4 }, /obj/item/pen/solgov{ pixel_x = 2 @@ -5157,7 +5136,6 @@ dir = 8 }, /obj/machinery/light_switch{ - dir = 2; pixel_y = 22; pixel_x = -12 }, diff --git a/_maps/shuttles/shiptest/syndicate_aegis.dmm b/_maps/shuttles/shiptest/syndicate_aegis.dmm index 6f807bf52bd3..94ce81e53d3d 100644 --- a/_maps/shuttles/shiptest/syndicate_aegis.dmm +++ b/_maps/shuttles/shiptest/syndicate_aegis.dmm @@ -499,6 +499,28 @@ }, /turf/open/floor/wood/walnut, /area/ship/bridge) +"dB" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/closet/firecloset/wall{ + pixel_y = 29 + }, +/obj/structure/catwalk/over, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering) "dH" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -709,25 +731,6 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) -"fH" = ( -/obj/structure/table/wood/reinforced, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = 11; - pixel_y = 9 - }, -/obj/item/radio/intercom/wideband/directional/north, -/obj/machinery/fax, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium/red{ - icon_state = "plastitanium" - }, -/area/ship/bridge) "fJ" = ( /obj/structure/closet/wall/orange{ name = "fuel locker"; @@ -2313,6 +2316,11 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) +"up" = ( +/obj/machinery/light/directional/north, +/obj/structure/chair/sofa/left, +/turf/open/floor/carpet/red, +/area/ship/crew/canteen) "uA" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -2711,31 +2719,6 @@ /obj/item/storage/toolbox/mechanical, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) -"yu" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 29 - }, -/obj/structure/catwalk/over, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering) "yA" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -3196,14 +3179,6 @@ }, /turf/open/floor/carpet/red, /area/ship/crew/canteen) -"Ez" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/structure/chair/sofa/left, -/turf/open/floor/carpet/red, -/area/ship/crew/canteen) "EJ" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 1 @@ -4264,6 +4239,25 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) +"OW" = ( +/obj/structure/table/wood/reinforced, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = 11; + pixel_y = 9 + }, +/obj/item/radio/intercom/wideband/directional/north, +/obj/machinery/fax, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/mineral/plastitanium/red{ + icon_state = "plastitanium" + }, +/area/ship/bridge) "Pc" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5585,7 +5579,7 @@ xO go qM hl -Ez +up iO Ee aP @@ -5925,7 +5919,7 @@ wk wk gq uM -fH +OW jW kI uM @@ -6077,7 +6071,7 @@ Xr XY Dt It -yu +dB ZJ FS gx diff --git a/_maps/shuttles/shiptest/syndicate_luxembourg.dmm b/_maps/shuttles/shiptest/syndicate_luxembourg.dmm index 2248c1f12c6b..1f8f1132f0d7 100644 --- a/_maps/shuttles/shiptest/syndicate_luxembourg.dmm +++ b/_maps/shuttles/shiptest/syndicate_luxembourg.dmm @@ -441,16 +441,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plasteel/tech/techmaint, /area/ship/crew/dorm) -"in" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) "it" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/shieldwallgen/atmos{ @@ -509,6 +499,22 @@ /obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plating, /area/ship/engineering) +"iZ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/structure/catwalk/over/plated_catwalk/white, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering) "jr" = ( /turf/open/floor/carpet/red_gold, /area/ship/hallway/central) @@ -541,17 +547,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/mono/dark, /area/ship/storage) -"kp" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/rack, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) "ks" = ( /obj/structure/closet/crate, /obj/item/gun_voucher, @@ -714,19 +709,6 @@ /obj/item/radio/headset, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) -"nG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) "ow" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor/shutters{ @@ -967,29 +949,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"tc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/paper{ - desc = "A piece of paper depicting a extremely pissed up upper manager"; - default_raw_text = "YOU ARENT SUPPOSED TO BE MINING, HEAR ME!?!! YOU'RE SUPPOSED TO BE SELLING SHIT TO THE CONSUMERS YOU HEAR!! AS PUNISHMENT FOR THE LAST SHIFT, I HAVE REMOVED ALLL OF YOUR MINING TOOLS!! NOW GET BACK TO WORK!!"; - name = "angry letter from upper management" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) "tx" = ( /obj/machinery/power/port_gen/pacman, /obj/structure/cable/yellow{ @@ -1498,6 +1457,14 @@ /obj/machinery/vending/dinnerware, /turf/open/floor/plasteel/mono/dark, /area/ship/crew/canteen) +"DE" = ( +/obj/structure/rack, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/neutral/mono, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/central) "DG" = ( /obj/machinery/light/directional/south, /obj/structure/rack, @@ -1587,6 +1554,19 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) +"Fj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/item/paper{ + desc = "A piece of paper depicting a extremely pissed up upper manager"; + default_raw_text = "YOU DAMNNED FOOLS! YOU ARENT SUPPOSED TO USE YOUR STOCK, YOU'RE SUPPOSED TO SELL THEM!! WE AREN'T WASTING MY MONEY ARE WE!?! NOW GET BACK TO WORK!!!"; + name = "angry letter from upper management" + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/storage) "Fq" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1923,6 +1903,29 @@ }, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) +"Lr" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/paper{ + desc = "A piece of paper depicting a extremely pissed up upper manager"; + default_raw_text = "YOU ARENT SUPPOSED TO BE MINING, HEAR ME!?!! YOU'RE SUPPOSED TO BE SELLING SHIT TO THE CONSUMERS YOU HEAR!! AS PUNISHMENT FOR THE LAST SHIFT, I HAVE REMOVED ALLL OF YOUR MINING TOOLS!! NOW GET BACK TO WORK!!"; + name = "angry letter from upper management" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/canteen) "Lu" = ( /obj/structure/chair/plastic{ dir = 1 @@ -2671,19 +2674,6 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/storage) -"YX" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/item/paper{ - desc = "A piece of paper depicting a extremely pissed up upper manager"; - default_raw_text = "YOU DAMNNED FOOLS! YOU ARENT SUPPOSED TO USE YOUR STOCK, YOU'RE SUPPOSED TO SELL THEM!! WE AREN'T WASTING MY MONEY ARE WE!?! NOW GET BACK TO WORK!!!"; - name = "angry letter from upper management" - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) "YZ" = ( /obj/structure/closet/secure{ icon_state = "eng_secure"; @@ -2728,6 +2718,19 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/engineering) +"ZV" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering) (1,1,1) = {" Nr @@ -2890,7 +2893,7 @@ JU Ka JO iO -YX +Fj YO YK ks @@ -2926,7 +2929,7 @@ hm rU Ro uo -in +ZV mK vp pt @@ -3060,7 +3063,7 @@ dH Sn TP TP -kp +DE Jr PO vp @@ -3143,7 +3146,7 @@ YI YI qf HZ -tc +Lr Dw rq YI @@ -3157,7 +3160,7 @@ Ai FV Wh eL -nG +iZ bt CT vp diff --git a/_maps/shuttles/shiptest/syndicate_twinkleshine.dmm b/_maps/shuttles/shiptest/syndicate_twinkleshine.dmm index 3a7d800a4f22..6390f43501cd 100644 --- a/_maps/shuttles/shiptest/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/shiptest/syndicate_twinkleshine.dmm @@ -881,21 +881,6 @@ /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line, /turf/open/floor/plasteel/dark, /area/ship/medical) -"fU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) "fV" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics"; @@ -5561,6 +5546,18 @@ /obj/structure/mecha_wreckage/ripley/deathripley, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) +"GW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "GZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -6602,14 +6599,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/ship/security) -"Nm" = ( -/obj/structure/table/reinforced, -/obj/machinery/fax, -/obj/effect/turf_decal/corner/opaque/syndiered/half{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) "No" = ( /obj/effect/turf_decal/corner/transparent/bar/diagonal, /obj/machinery/holopad/emergency, @@ -8281,6 +8270,14 @@ /obj/effect/turf_decal/corner/opaque/syndiered, /turf/open/floor/mineral/plastitanium, /area/ship/bridge) +"Xc" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax, +/obj/effect/turf_decal/corner/opaque/syndiered/half{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) "Xf" = ( /obj/structure/rack, /obj/effect/turf_decal/box/white/corners{ @@ -9973,7 +9970,7 @@ IV Ya Sb RW -fU +GW pO je KI @@ -10008,7 +10005,7 @@ IV ql Yj RW -fU +GW kf je hb @@ -10119,7 +10116,7 @@ nb Pv pp nb -Nm +Xc Kk KB zp diff --git a/_maps/shuttles/subshuttles/independent_superpill.dmm b/_maps/shuttles/subshuttles/independent_superpill.dmm index 9677aeafed5e..fc0dacddc501 100644 --- a/_maps/shuttles/subshuttles/independent_superpill.dmm +++ b/_maps/shuttles/subshuttles/independent_superpill.dmm @@ -52,9 +52,6 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2, /obj/machinery/atmospherics/pipe/simple/general/visible/layer4, /obj/machinery/atmospherics/pipe/simple/general/visible, @@ -182,10 +179,6 @@ /obj/machinery/door/window{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 5 - }, /obj/structure/window/reinforced/tinted{ dir = 4 }, @@ -206,6 +199,9 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/clothing/head/helmet/space/orange, /obj/item/tank/internals/plasma/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/storage) diff --git a/check_regex.yaml b/check_regex.yaml index 7e5269c30a78..9f7232c04d0b 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -44,7 +44,7 @@ standards: ] - exactly: [0, "incorrect indentations", '^(?: +)(?!\*)'] - exactly: [0, "superflous whitespace", '[ \t]+$'] - - exactly: [8, "mixed indentation", '^( +\t+|\t+ +)'] + - exactly: [0, "mixed indentation", '^( +\t+|\t+ +)'] - exactly: [21, 'padding inside parentheses', '\(([\t ]+([^)"\n\\]*)|([^("\n]+)[\t ]+)\)'] - no_more: diff --git a/code/__DEFINES/atoms.dm b/code/__DEFINES/atoms.dm new file mode 100644 index 000000000000..3c7b67070f88 --- /dev/null +++ b/code/__DEFINES/atoms.dm @@ -0,0 +1,4 @@ +#define BAD_INIT_QDEL_BEFORE 1 +#define BAD_INIT_DIDNT_INIT 2 +#define BAD_INIT_SLEPT 4 +#define BAD_INIT_NO_HINT 8 diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index ae027233c9e7..8f1f667a79f7 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -62,7 +62,7 @@ #define COOLDOWN_DECLARE(cd_index) var/##cd_index = 0 -#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time) +#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + (cd_time)) //Returns true if the cooldown has run its course, false otherwise #define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index bb0510ea91ca..e0ac4b177001 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -138,6 +138,10 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define INDESTRUCTIBLE (1<<6) /// can't be frozen #define FREEZE_PROOF (1<<7) +/// Should this object not be destroyed when a shuttle lands on it? +#define LANDING_PROOF (1<<8) +/// Should this object be able to be in hyperspace without being deleted? +#define HYPERSPACE_PROOF (1<<9) //tesla_zap #define ZAP_MACHINE_EXPLOSIVE (1<<0) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e4f600dcea6a..99cff793a761 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -430,3 +430,6 @@ #define THROW_MODE_DISABLED 0 #define THROW_MODE_TOGGLE 1 #define THROW_MODE_HOLD 2 + +//Saves a proc call, life is suffering. If who has no targets_from var, we assume it's just who +#define GET_TARGETS_FROM(who) (who.targets_from ? who.get_targets_from() : who) diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index dfecc6f8af6b..570edb76d8c4 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -2,18 +2,19 @@ #define EMAGGED (1<<0) -#define IN_USE (1<<1) // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! -#define CAN_BE_HIT (1<<2) //can this be bludgeoned by items? -#define BEING_SHOCKED (1<<3) // Whether this thing is currently (already) being shocked by a tesla -#define DANGEROUS_POSSESSION (1<<4) //Admin possession yes/no -#define ON_BLUEPRINTS (1<<5) //Are we visible on the station blueprints at roundstart? -#define UNIQUE_RENAME (1<<6) // can you customize the description/name of the thing? -#define USES_TGUI (1<<7) //put on things that use tgui on ui_interact instead of custom/old UI. +#define IN_USE (1<<1) //! If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! +#define CAN_BE_HIT (1<<2) //! can this be bludgeoned by items? +#define BEING_SHOCKED (1<<3) //! Whether this thing is currently (already) being shocked by a tesla +#define DANGEROUS_POSSESSION (1<<4) //! Admin possession yes/no +#define ON_BLUEPRINTS (1<<5) //! Are we visible on the station blueprints at roundstart? +#define UNIQUE_RENAME (1<<6) //! can you customize the description/name of the thing? +#define USES_TGUI (1<<7) //! put on things that use tgui on ui_interact instead of custom/old UI. #define FROZEN (1<<8) -#define BLOCK_Z_OUT_DOWN (1<<9) // Should this object block z falling from loc? -#define BLOCK_Z_OUT_UP (1<<10) // Should this object block z uprise from loc? -#define BLOCK_Z_IN_DOWN (1<<11) // Should this object block z falling from above? -#define BLOCK_Z_IN_UP (1<<12) // Should this object block z uprise from below? +#define BLOCK_Z_OUT_DOWN (1<<9) //! Should this object block z falling from loc? +#define BLOCK_Z_OUT_UP (1<<10) //! Should this object block z uprise from loc? +#define BLOCK_Z_IN_DOWN (1<<11) //! Should this object block z falling from above? +#define BLOCK_Z_IN_UP (1<<12) //! Should this object block z uprise from below? + // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/__DEFINES/qdel.dm b/code/__DEFINES/qdel.dm index d6a08b3174f8..86c3ad465250 100644 --- a/code/__DEFINES/qdel.dm +++ b/code/__DEFINES/qdel.dm @@ -30,6 +30,13 @@ #define GC_QUEUE_HARDDELETE 3 //! short queue for things that hard delete instead of going thru the gc subsystem, this is purely so if they *can* softdelete, they will soft delete rather then wasting time with a hard delete. #define GC_QUEUE_COUNT 3 //! Number of queues, used for allocating the nested lists. Don't forget to increase this if you add a new queue stage + +// Defines for the ssgarbage queue items +#define GC_QUEUE_ITEM_QUEUE_TIME 1 //! Time this item entered the queue +#define GC_QUEUE_ITEM_REF 2 //! Ref to the item +#define GC_QUEUE_ITEM_GCD_DESTROYED 3 //! Item's gc_destroyed var value. Used to detect ref reuse. +#define GC_QUEUE_ITEM_INDEX_COUNT 3 //! Number of item indexes, used for allocating the nested lists. Don't forget to increase this if you add a new queue item index + // Defines for the time an item has to get its reference cleaned before it fails the queue and moves to the next. #define GC_FILTER_QUEUE 1 SECONDS #define GC_CHECK_QUEUE 5 MINUTES diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 184f7e754103..5fd64af432cf 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -87,6 +87,9 @@ ///Call qdel on the atom after intialization #define INITIALIZE_HINT_QDEL 2 +///Call qdel with a force of TRUE after initialization +#define INITIALIZE_HINT_QDEL_FORCE 3 + ///type and all subtypes should always immediately call Initialize in New() #define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){ \ ..(); \ @@ -162,7 +165,6 @@ #define FIRE_PRIORITY_PROCESS 25 #define FIRE_PRIORITY_THROWING 25 #define FIRE_PRIORITY_SPACEDRIFT 30 -#define FIRE_PRIORITY_FIELDS 30 #define FIRE_PRIOTITY_SMOOTHING 35 #define FIRE_PRIORITY_NETWORKS 40 #define FIRE_PRIORITY_OBJ 40 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 529274a50b39..ea51a1c96113 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -216,6 +216,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NOMOBSWAP "no-mob-swap" #define TRAIT_XRAY_VISION "xray_vision" #define TRAIT_THERMAL_VISION "thermal_vision" +/// We have some form of forced gravity acting on us +#define TRAIT_FORCED_GRAVITY "forced_gravity" #define TRAIT_ABDUCTOR_TRAINING "abductor-training" #define TRAIT_ABDUCTOR_SCIENTIST_TRAINING "abductor-scientist-training" #define TRAIT_SURGEON "surgeon" @@ -423,3 +425,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FISH_SAFE_STORAGE "fish_case" /// Stuff that can go inside fish cases #define TRAIT_FISH_CASE_COMPATIBILE "fish_case_compatibile" + +/// Trait granted by [mob/living/silicon/ai] +/// Applied when the ai anchors itself +#define AI_ANCHOR_TRAIT "ai_anchor" diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 314549a4f464..df8a952c05b5 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -35,6 +35,18 @@ SEND_TEXT(world.log, text) #endif +#if defined(REFERENCE_DOING_IT_LIVE) +#define log_reftracker(msg) log_harddel("## REF SEARCH [msg]") + +/proc/log_harddel(text) + WRITE_LOG(GLOB.harddel_log, text) + +#elif defined(REFERENCE_TRACKING) // Doing it locally +#define log_reftracker(msg) log_world("## REF SEARCH [msg]") + +#else //Not tracking at all +#define log_reftracker(msg) +#endif /* Items with ADMINPRIVATE prefixed are stripped from public logs. */ /proc/log_admin(text) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 1a3c6526150a..2b3f3e41e444 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -40,12 +40,23 @@ block( \ if(istype(T)) return T +///Returns a list with all the adjacent open turfs. /proc/get_adjacent_open_turfs(atom/center) - . = list(get_open_turf_in_dir(center, NORTH), - get_open_turf_in_dir(center, SOUTH), - get_open_turf_in_dir(center, EAST), - get_open_turf_in_dir(center, WEST)) - listclearnulls(.) + var/list/hand_back = list() + // Inlined get_open_turf_in_dir, just to be fast + var/turf/open/new_turf = get_step(center, NORTH) + if(istype(new_turf)) + hand_back += new_turf + new_turf = get_step(center, SOUTH) + if(istype(new_turf)) + hand_back += new_turf + new_turf = get_step(center, EAST) + if(istype(new_turf)) + hand_back += new_turf + new_turf = get_step(center, WEST) + if(istype(new_turf)) + hand_back += new_turf + return hand_back /proc/get_adjacent_open_areas(atom/center) . = list() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9ca24f24cb7e..ea9ceee0f417 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -379,16 +379,16 @@ Turf and target are separate in case you want to teleport some distance from a t break return turf_to_check -//Returns a list of all locations (except the area) the movable is within. -/proc/get_nested_locs(atom/movable/AM, include_turf = FALSE) +///Returns a list of all locations (except the area) the movable is within. +/proc/get_nested_locs(atom/movable/atom_on_location, include_turf = FALSE) . = list() - var/atom/location = AM.loc - var/turf/turf = get_turf(AM) - while(location && location != turf) + var/atom/location = atom_on_location.loc + var/turf/our_turf = get_turf(atom_on_location) + while(location && location != our_turf) . += location location = location.loc - if(location && include_turf) //At this point, only the turf is left, provided it exists. - . += location + if(our_turf && include_turf) //At this point, only the turf is left, provided it exists. + . += our_turf // returns the turf located at the map edge in the specified direction relative to A // used for mass driver diff --git a/code/__HELPERS/virtual_z_level.dm b/code/__HELPERS/virtual_z_level.dm index a218539de4b0..b00c77b80b83 100644 --- a/code/__HELPERS/virtual_z_level.dm +++ b/code/__HELPERS/virtual_z_level.dm @@ -24,6 +24,7 @@ return my_turf.virtual_z /atom/proc/get_virtual_level() + RETURN_TYPE(/datum/virtual_level) return /atom/movable/get_virtual_level() @@ -45,3 +46,7 @@ var/datum/virtual_level/vlevel = get_virtual_level() if(vlevel) return vlevel.parent_map_zone + +/atom/proc/get_relative_location() + var/datum/virtual_level/vlevel = get_virtual_level() + return vlevel?.get_relative_coords(src) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 4b661c80e6e7..0b73aa7172c3 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -15,9 +15,14 @@ //#define REFERENCE_TRACKING #ifdef REFERENCE_TRACKING +///Used for doing dry runs of the reference finder, to test for feature completeness +///Slightly slower, higher in memory. Just not optimal +//#define REFERENCE_TRACKING_DEBUG + ///Run a lookup on things hard deleting by default. //#define GC_FAILURE_HARD_LOOKUP #ifdef GC_FAILURE_HARD_LOOKUP +///Don't stop when searching, go till you're totally done #define FIND_REF_NO_CHECK_TICK #endif //ifdef GC_FAILURE_HARD_LOOKUP @@ -26,6 +31,16 @@ //#define VISUALIZE_ACTIVE_TURFS //Highlights atmos active turfs in green #endif //ifdef TESTING +/// If this is uncommented, we set up the ref tracker to be used in a live environment +/// And to log events to [log_dir]/harddels.log +//#define REFERENCE_DOING_IT_LIVE +#ifdef REFERENCE_DOING_IT_LIVE +// compile the backend +#define REFERENCE_TRACKING +// actually look for refs +#define GC_FAILURE_HARD_LOOKUP +#endif // REFERENCE_DOING_IT_LIVE + //#define UNIT_TESTS //Enables unit tests via TEST_RUN_PARAMETER #ifndef PRELOAD_RSC //set to: @@ -72,6 +87,14 @@ #define TESTING #endif +#ifdef UNIT_TESTS +//Hard del testing defines +#define REFERENCE_TRACKING +#define REFERENCE_TRACKING_DEBUG +#define FIND_REF_NO_CHECK_TICK +#define GC_FAILURE_HARD_LOOKUP +#endif + // A reasonable number of maximum overlays an object needs // If you think you need more, rethink it #define MAX_ATOM_OVERLAYS 100 diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 905fd5039ca5..406f0bb0b101 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -202,6 +202,11 @@ DEFINE_BITFIELD(obj_flags, list( "ON_BLUEPRINTS" = ON_BLUEPRINTS, "UNIQUE_RENAME" = UNIQUE_RENAME, "USES_TGUI" = USES_TGUI, + "FROZEN" = FROZEN, + "BLOCK_Z_OUT_DOWN" = BLOCK_Z_OUT_DOWN, + "BLOCK_Z_OUT_UP" = BLOCK_Z_OUT_UP, + "BLOCK_Z_IN_DOWN" = BLOCK_Z_IN_DOWN, + "BLOCK_Z_IN_UP" = BLOCK_Z_IN_UP, )) DEFINE_BITFIELD(pass_flags, list( @@ -222,7 +227,9 @@ DEFINE_BITFIELD(resistance_flags, list( "UNACIDABLE" = UNACIDABLE, "ACID_PROOF" = ACID_PROOF, "INDESTRUCTIBLE" = INDESTRUCTIBLE, - "FREEZE_PROOF" = FREEZE_PROOF + "FREEZE_PROOF" = FREEZE_PROOF, + "LANDING_PROOF" = LANDING_PROOF, + "HYPERSPACE_PROOF" = HYPERSPACE_PROOF, )) DEFINE_BITFIELD(sight, list( diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index e83b4bfca48e..181752707d4d 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -49,6 +49,11 @@ GLOBAL_PROTECT(perf_log) GLOBAL_VAR(demo_log) GLOBAL_PROTECT(demo_log) +#ifdef REFERENCE_DOING_IT_LIVE +GLOBAL_VAR(harddel_log) +GLOBAL_PROTECT(harddel_log) +#endif + GLOBAL_LIST_EMPTY(bombers) GLOBAL_PROTECT(bombers) GLOBAL_LIST_EMPTY(admin_log) diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index 2528c246dcf4..944847959158 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -104,7 +104,7 @@ */ /turf/proc/ClickCross(target_dir, border_only, target_atom = null, atom/movable/mover = null) for(var/obj/O in src) - if((mover && O.CanPass(mover,get_step(src,target_dir))) || (!mover && !O.density)) + if((mover && O.CanPass(mover, target_dir)) || (!mover && !O.density)) continue if(O == target_atom || O == mover || (O.pass_flags_self & LETPASSTHROW)) //check if there's a dense object present on the turf continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 8071bec684b7..e8e6daccf45b 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -657,12 +657,13 @@ so as to remain in compliance with the most up-to-date laws." desc = "A body was created. You can enter it." icon_state = "template" timeout = 300 - var/atom/target = null + var/datum/weakref/target_ref var/action = NOTIFY_JUMP /atom/movable/screen/alert/notify_action/Click() if(!usr || !usr.client || usr != owner) return + var/atom/target = target_ref?.resolve() if(!target) return var/mob/dead/observer/G = usr diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm index 603754d2c093..01e4cd1de1f4 100644 --- a/code/_onclick/hud/credits.dm +++ b/code/_onclick/hud/credits.dm @@ -63,11 +63,15 @@ GLOBAL_LIST_INIT(patrons, world.file2list("[global.config.directory]/patrons.txt QDEL_IN(src, CREDIT_ROLL_SPEED) /atom/movable/screen/credit/proc/add_to_clients() - for(var/client/C in GLOB.clients) - if(C.prefs.show_credits) + for(var/client/C as anything in GLOB.clients) + if(C?.prefs.show_credits) C.screen += src /atom/movable/screen/credit/Destroy() + for(var/client/C as anything in GLOB.clients) + if(!C) + continue + C.screen -= src screen_loc = null return ..() diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index ccdc23d552f9..457a7ad5a599 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -283,6 +283,12 @@ icon_state = "[base_icon_state]_[robot?.lamp_enabled ? "on" : "off"]" return ..() +/atom/movable/screen/robot/lamp/Destroy() + if(robot) + robot.lampButton = null + robot = null + return ..() + /atom/movable/screen/robot/modPC name = "Modular Interface" icon_state = "template" @@ -294,6 +300,12 @@ return robot.modularInterface?.interact(robot) +/atom/movable/screen/robot/modPC/Destroy() + if(robot) + robot.interfaceButton = null + robot = null + return ..() + /atom/movable/screen/robot/alerts name = "Alert Panel" icon = 'icons/hud/screen_ai.dmi' diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 7266013b35a8..557096d83c82 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -684,6 +684,8 @@ /atom/movable/screen/splash/New(client/C, visible, use_previous_title) //TODO: Make this use INITIALIZE_IMMEDIATE, except its not easy . = ..() + if(!istype(C)) + return holder = C diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 6f55532aed39..a7cf982a8865 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -673,8 +673,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new /datum/controller/master/StartLoadingMap() //disallow more than one map to load at once, multithreading it will just cause race conditions - while(map_loading) - stoplag() + UNTIL(!map_loading) for(var/S in subsystems) var/datum/controller/subsystem/SS = S SS.StartLoadingMap() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 4351ad863ea9..56b50beee9ce 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -33,8 +33,17 @@ SUBSYSTEM_DEF(air) var/list/expansion_queue = list() var/list/deferred_airs = list() var/max_deferred_airs = 0 + + ///List of all currently processing atmos machinery that doesn't interact with the air around it var/list/obj/machinery/atmos_machinery = list() + ///List of all currently processing atmos machinery that interacts with its loc's air var/list/obj/machinery/atmos_air_machinery = list() + + ///Atmos machinery that will be added to atmos_machinery once maploading is finished + var/list/obj/machinery/deferred_atmos_machinery = list() + ///Air atmos machinery that will be added to atmos_air_machinery once maploading is finished + var/list/obj/machinery/deferred_atmos_air_machinery = list() + var/list/pipe_init_dirs_cache = list() //atmos singletons @@ -67,8 +76,6 @@ SUBSYSTEM_DEF(air) var/excited_group_pressure_goal = 1 - var/is_test_loading = FALSE - /datum/controller/subsystem/air/stat_entry(msg) msg += "C:{" msg += "HP:[round(cost_highpressure,1)]|" @@ -111,13 +118,13 @@ SUBSYSTEM_DEF(air) /datum/controller/subsystem/air/proc/auxtools_update_reactions() /proc/reset_all_air() - SSair.can_fire = 0 + SSair.can_fire = FALSE message_admins("Air reset begun.") for(var/turf/open/T in world) T.Initalize_Atmos(0) CHECK_TICK message_admins("Air reset done.") - SSair.can_fire = 1 + SSair.can_fire = TRUE /datum/controller/subsystem/air/proc/thread_running() return FALSE @@ -159,8 +166,7 @@ SUBSYSTEM_DEF(air) // This is only machinery like filters, mixers that don't interact with air if(currentpart == SSAIR_ATMOSMACHINERY) timer = TICK_USAGE_REAL - if(!is_test_loading) - process_atmos_machinery(resumed) + process_atmos_machinery(resumed) cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return @@ -197,8 +203,7 @@ SUBSYSTEM_DEF(air) currentpart = SSAIR_ATMOSMACHINERY_AIR if(currentpart == SSAIR_ATMOSMACHINERY_AIR) timer = TICK_USAGE_REAL - if(!is_test_loading) - process_atmos_air_machinery(resumed) + process_atmos_air_machinery(resumed) cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return @@ -284,14 +289,20 @@ SUBSYSTEM_DEF(air) * Arguments: * * machine - The machine to start processing. Can be any /obj/machinery. */ -/datum/controller/subsystem/air/proc/start_processing_machine(obj/machinery/machine) +/datum/controller/subsystem/air/proc/start_processing_machine(obj/machinery/machine, mapload) if(machine.atmos_processing) return machine.atmos_processing = TRUE if(machine.interacts_with_air) - atmos_air_machinery += machine + if(mapload) + deferred_atmos_air_machinery += machine + else + atmos_air_machinery += machine else - atmos_machinery += machine + if(mapload) + deferred_atmos_machinery += machine + else + atmos_machinery += machine /** * Removes a given machine to the processing system for SSAIR_ATMOSMACHINERY processing. @@ -305,8 +316,10 @@ SUBSYSTEM_DEF(air) machine.atmos_processing = FALSE if(machine.interacts_with_air) atmos_air_machinery -= machine + deferred_atmos_air_machinery -= machine else atmos_machinery -= machine + deferred_atmos_machinery -= machine // If we're currently processing atmos machines, there's a chance this machine is in // the currentrun list, which is a cache of atmos_machinery. Remove it from that list @@ -396,12 +409,8 @@ SUBSYSTEM_DEF(air) if(item in net.members) continue if(item.parent) - var/static/pipenetwarnings = 10 - if(pipenetwarnings > 0) - log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].") - pipenetwarnings-- - if(pipenetwarnings == 0) - log_mapping("build_pipeline(): further messages about pipenets will be suppressed") + log_mapping("Doubled atmosmachine found at [AREACOORD(item)] with other contents: [json_encode(item.loc.contents)]") + item.stack_trace("Possible doubled atmosmachine") net.members += item border += item @@ -469,7 +478,7 @@ SUBSYSTEM_DEF(air) if(!M) atmos_air_machinery -= M if(M.process_atmos(seconds) == PROCESS_KILL) - atmos_air_machinery.Remove(M) + stop_processing_machine(M) if(MC_TICK_CHECK) return @@ -570,6 +579,14 @@ SUBSYSTEM_DEF(air) /datum/controller/subsystem/air/StopLoadingMap() map_loading = FALSE + if(length(deferred_atmos_machinery)) + atmos_machinery += deferred_atmos_machinery + deferred_atmos_machinery.Cut() + + if(length(deferred_atmos_air_machinery)) + atmos_air_machinery += deferred_atmos_air_machinery + deferred_atmos_air_machinery.Cut() + /datum/controller/subsystem/air/proc/setup_allturfs() var/list/turfs_to_init = block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz)) var/times_fired = ++src.times_fired diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index fe73d2d60b1d..ee629f41fac1 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -1,8 +1,3 @@ -#define BAD_INIT_QDEL_BEFORE 1 -#define BAD_INIT_DIDNT_INIT 2 -#define BAD_INIT_SLEPT 4 -#define BAD_INIT_NO_HINT 8 - SUBSYSTEM_DEF(atoms) name = "Atoms" init_order = INIT_ORDER_ATOMS @@ -96,6 +91,9 @@ SUBSYSTEM_DEF(atoms) if(INITIALIZE_HINT_QDEL) qdel(A) qdeleted = TRUE + if(INITIALIZE_HINT_QDEL_FORCE) + qdel(A, force = TRUE) + qdeleted = TRUE else BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT @@ -166,8 +164,3 @@ SUBSYSTEM_DEF(atoms) var/initlog = InitLog() if(initlog) text2file(initlog, "[GLOB.log_directory]/initialize.log") - -#undef BAD_INIT_QDEL_BEFORE -#undef BAD_INIT_DIDNT_INIT -#undef BAD_INIT_SLEPT -#undef BAD_INIT_NO_HINT diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 94cf90aad7d2..895a8c1685fc 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -171,18 +171,19 @@ SUBSYSTEM_DEF(garbage) //Normally this isn't expensive, but the gc queue can grow to 40k items, and that gets costly/causes overrun. for (var/i in 1 to length(queue)) var/list/L = queue[i] - if (length(L) < 2) + if (length(L) < GC_QUEUE_ITEM_INDEX_COUNT) count++ if (MC_TICK_CHECK) return continue - var/GCd_at_time = L[1] - if(GCd_at_time > cut_off_time) + var/queued_at_time = L[GC_QUEUE_ITEM_QUEUE_TIME] + var/GCd_at_time = L[GC_QUEUE_ITEM_GCD_DESTROYED] + if(queued_at_time > cut_off_time) break // Everything else is newer, skip them count++ - var/refID = L[2] + var/refID = L[GC_QUEUE_ITEM_REF] var/datum/D D = locate(refID) @@ -230,12 +231,6 @@ SUBSYSTEM_DEF(garbage) #endif I.failures++ - if (I.qdel_flags & QDEL_ITEM_SUSPENDED_FOR_LAG) - #ifdef REFERENCE_TRACKING - if(ref_searching) - return //ref searching intentionally cancels all further fires while running so things that hold references don't end up getting deleted, so we want to return here instead of continue - #endif - continue if (GC_QUEUE_HARDDELETE) HardDelete(D) if (MC_TICK_CHECK) @@ -259,28 +254,33 @@ SUBSYSTEM_DEF(garbage) if (isnull(D)) return if (level > GC_QUEUE_COUNT) - HardDelete(D) + HardDelete(D, TRUE) return - var/gctime = world.time + var/queue_time = world.time + var/refid = "\ref[D]" + if (D.gc_destroyed <= 0) + D.gc_destroyed = queue_time - D.gc_destroyed = gctime var/list/queue = queues[level] - queue[++queue.len] = list(gctime, refid) // not += for byond reasons + queue[++queue.len] = list(queue_time, refid, D.gc_destroyed) // not += for byond reasons //this is mainly to separate things profile wise. -/datum/controller/subsystem/garbage/proc/HardDelete(datum/D) +/datum/controller/subsystem/garbage/proc/HardDelete(datum/D, force) ++delslasttick ++totaldels var/type = D.type var/refID = "\ref[D]" + var/datum/qdel_item/I = items[type] + + if (!force && I.qdel_flags & QDEL_ITEM_SUSPENDED_FOR_LAG) + return var/tick_usage = TICK_USAGE del(D) tick_usage = TICK_USAGE_TO_MS(tick_usage) - var/datum/qdel_item/I = items[type] I.hard_deletes++ I.hard_delete_time += tick_usage if (tick_usage > I.hard_delete_max) @@ -382,11 +382,11 @@ SUBSYSTEM_DEF(garbage) if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete SSgarbage.Queue(D, GC_QUEUE_HARDDELETE) if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - SSgarbage.HardDelete(D) + SSgarbage.HardDelete(D, TRUE) #ifdef REFERENCE_TRACKING if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. SSgarbage.Queue(D) - D.find_references() //This breaks ci. Consider it insurance against somehow pring reftracking on accident + D.find_references() if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. SSgarbage.Queue(D) SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index bce3f2ced7c2..5c8bb49ab765 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(idlenpcpool) runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() - var/list/idle_mobs_by_virtual_level = list() + var/list/list/idle_mobs_by_virtual_level = list() /datum/controller/subsystem/idlenpcpool/stat_entry(msg) var/list/idlelist = GLOB.simple_animals[AI_IDLE] diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 05b07967e58d..28ab56d05211 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -260,6 +260,7 @@ SUBSYSTEM_DEF(mapping) S.space_spawn = TRUE shuttle_templates[S.file_name] = S + map_templates[S.file_name] = S #undef CHECK_STRING_EXISTS #undef CHECK_LIST_EXISTS diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index b80649a82490..ad8bad1e1d9b 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(persistence) var/list/paintings = list() /datum/controller/subsystem/persistence/Initialize() - LoadPoly() + LoadPolly() LoadTrophies() LoadRecentModes() LoadPhotoPersistence() @@ -22,8 +22,8 @@ SUBSYSTEM_DEF(persistence) LoadPanicBunker() return ..() -/datum/controller/subsystem/persistence/proc/LoadPoly() - for(var/mob/living/simple_animal/parrot/Poly/P in GLOB.alive_mob_list) +/datum/controller/subsystem/persistence/proc/LoadPolly() + for(var/mob/living/simple_animal/parrot/Polly/P in GLOB.alive_mob_list) twitterize(P.speech_buffer, "polytalk") break //Who's been duping the bird?! diff --git a/code/controllers/subsystem/processing/fields.dm b/code/controllers/subsystem/processing/fields.dm deleted file mode 100644 index a4c58b883a8a..000000000000 --- a/code/controllers/subsystem/processing/fields.dm +++ /dev/null @@ -1,6 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(fields) - name = "Fields" - wait = 2 - priority = FIRE_PRIORITY_FIELDS - flags = SS_KEEP_TIMING | SS_NO_INIT - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index e62e5bd30e3f..b5b8113384df 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -8,11 +8,11 @@ PROCESSING_SUBSYSTEM_DEF(quirks) wait = 10 runlevels = RUNLEVEL_GAME - var/list/quirks = list() //Assoc. list of all roundstart quirk datum types; "name" = /path/ - var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad - var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process - var/list/quirk_blacklist = list() //A list a list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4) - var/list/quirk_instances = list() //Assoc. list with instances of all roundstart quirk datum types; "name" = /path/ + var/list/quirks = list() //Assoc. list of all roundstart quirk datum types; "name" = /path/ + var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad + var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process + var/list/quirk_blacklist = list() //A list a list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4) + var/list/species_blacklist = list() //A list of quirks and the species they can't be used by /datum/controller/subsystem/processing/quirks/Initialize(timeofday) if(!quirks.len) @@ -25,6 +25,9 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Alcohol Tolerance","Light Drinker"), \ list("Clown Fan","Mime Fan"), \ list("Bad Touch", "Friendly")) + + species_blacklist = list("Blood Deficiency" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE)) + for(var/client/client in GLOB.clients) client?.prefs.check_quirk_compatibility() return ..() @@ -37,7 +40,6 @@ PROCESSING_SUBSYSTEM_DEF(quirks) var/datum/quirk/T = V quirks[initial(T.name)] = T quirk_points[initial(T.name)] = initial(T.value) - quirk_instances[initial(T.name)] = new T /datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects) var/badquirk = FALSE diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index e306da3ee4c2..9ec1ce5125b2 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -255,7 +255,7 @@ SUBSYSTEM_DEF(shuttle) var/result = new_shuttle.canDock(destination_port) if((result != SHUTTLE_CAN_DOCK)) WARNING("Template shuttle [new_shuttle] cannot dock at [destination_port] ([result]).") - new_shuttle.jumpToNullSpace() + qdel(new_shuttle, TRUE) return new_shuttle.initiate_docking(destination_port) return new_shuttle @@ -279,7 +279,7 @@ SUBSYSTEM_DEF(shuttle) if((result != SHUTTLE_CAN_DOCK) && (result != SHUTTLE_SOMEONE_ELSE_DOCKED)) //Someone else /IS/ docked, the old shuttle! WARNING("Template shuttle [new_shuttle] cannot dock at [old_shuttle_location] ([result]).") - new_shuttle.jumpToNullSpace() + qdel(new_shuttle, TRUE) return new_shuttle.timer = to_replace.timer //Copy some vars from the old shuttle @@ -291,7 +291,7 @@ SUBSYSTEM_DEF(shuttle) to_replace.assigned_transit = null new_shuttle.assigned_transit = old_shuttle_location - to_replace.jumpToNullSpace() //This will destroy the old shuttle + qdel(to_replace, TRUE) new_shuttle.initiate_docking(old_shuttle_location) //This will spawn the new shuttle return new_shuttle @@ -327,8 +327,8 @@ SUBSYSTEM_DEF(shuttle) for(var/obj/docking_port/P in T) if(istype(P, /obj/docking_port/mobile)) if(new_shuttle) + stack_trace("Map warning: Shuttle Template [template.mappath] has multiple mobile docking ports.") qdel(P, TRUE) - log_world("Map warning: Shuttle Template [template.mappath] has multiple mobile docking ports.") else new_shuttle = P if(istype(P, /obj/docking_port/stationary)) @@ -340,8 +340,7 @@ SUBSYSTEM_DEF(shuttle) T0.empty() message_admins(msg) - WARNING(msg) - return + CRASH(msg) new_shuttle.docking_points = stationary_ports new_shuttle.current_ship = parent //for any ships that spawn on top of us @@ -353,13 +352,13 @@ SUBSYSTEM_DEF(shuttle) var/obj/docking_port/mobile/transit_dock = generate_transit_dock(new_shuttle) if(!transit_dock) + qdel(src, TRUE) CRASH("No dock found/could be created for shuttle ([template.name]), aborting.") var/result = new_shuttle.canDock(transit_dock) if((result != SHUTTLE_CAN_DOCK)) - WARNING("Template shuttle [new_shuttle] cannot dock at [transit_dock] ([result]).") - new_shuttle.jumpToNullSpace() - return + qdel(src, TRUE) + CRASH("Template shuttle [new_shuttle] cannot dock at [transit_dock] ([result]).") new_shuttle.initiate_docking(transit_dock) new_shuttle.linkup(transit_dock, parent) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 5e499069e71d..a37f7e1c0896 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -588,7 +588,7 @@ SUBSYSTEM_DEF(timer) if (callback.object != GLOBAL_PROC && QDELETED(callback.object) && !QDESTROYING(callback.object)) stack_trace("addtimer called with a callback assigned to a qdeleted object. In the future such timers will not \ - be supported and may refuse to run or run with a 0 wait - proc: [callback.delegate], args: [json_encode(callback.arguments)] , usr: [callback.user.resolve()]") + be supported and may refuse to run or run with a 0 wait - proc: [callback.delegate], args: [json_encode(callback.arguments)] , usr: [callback.user?.resolve()]") wait = max(CEILING(wait, world.tick_lag), world.tick_lag) diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm index 39feb5629428..a4b0fccae437 100644 --- a/code/controllers/subsystem/vis_overlays.dm +++ b/code/controllers/subsystem/vis_overlays.dm @@ -5,12 +5,10 @@ SUBSYSTEM_DEF(vis_overlays) init_order = INIT_ORDER_VIS var/list/vis_overlay_cache - var/list/unique_vis_overlays var/list/currentrun /datum/controller/subsystem/vis_overlays/Initialize() vis_overlay_cache = list() - unique_vis_overlays = list() return ..() /datum/controller/subsystem/vis_overlays/fire(resumed = FALSE) @@ -45,7 +43,6 @@ SUBSYSTEM_DEF(vis_overlays) overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) overlay.cache_expiration = -1 var/cache_id = "\ref[overlay]@{[world.time]}" - unique_vis_overlays += overlay vis_overlay_cache[cache_id] = overlay . = overlay if(overlay == null) @@ -58,7 +55,6 @@ SUBSYSTEM_DEF(vis_overlays) if(!thing.managed_vis_overlays) thing.managed_vis_overlays = list(overlay) - RegisterSignal(thing, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_vis_overlay) else thing.managed_vis_overlays += overlay @@ -81,23 +77,3 @@ SUBSYSTEM_DEF(vis_overlays) thing.managed_vis_overlays -= overlays if(!length(thing.managed_vis_overlays)) thing.managed_vis_overlays = null - UnregisterSignal(thing, COMSIG_ATOM_DIR_CHANGE) - -/datum/controller/subsystem/vis_overlays/proc/rotate_vis_overlay(atom/thing, old_dir, new_dir) - SIGNAL_HANDLER - - if(old_dir == new_dir) - return - var/rotation = dir2angle(old_dir) - dir2angle(new_dir) - var/list/overlays_to_remove = list() - for(var/i in thing.managed_vis_overlays - unique_vis_overlays) - var/obj/effect/overlay/vis/overlay = i - if(overlay == null) - message_debug("Somehow someway we are processing a null vis_overlay! ([thing.type])") - else - add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation), overlay.alpha, overlay.appearance_flags) - overlays_to_remove += overlay - for(var/i in thing.managed_vis_overlays & unique_vis_overlays) - var/obj/effect/overlay/vis/overlay = i - overlay.dir = turn(overlay.dir, rotation) - remove_vis_overlay(thing, overlays_to_remove) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 8066c548896f..d2b499de92ed 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -18,6 +18,12 @@ var/list/devillaws = list() var/id = DEFAULT_AI_LAWID +/datum/ai_laws/Destroy(force, ...) + if(!QDELETED(owner)) + CRASH("AI lawset destroyed even though owner AI is not being destroyed.") + owner = null + return ..() + /datum/ai_laws/proc/lawid_to_type(lawid) var/all_ai_laws = subtypesof(/datum/ai_laws) for(var/al in all_ai_laws) diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 8ff67bfb54fb..6e3ce4bb48ae 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -90,7 +90,8 @@ /datum/beam/Destroy() QDEL_LIST(elements) - QDEL_NULL(visuals) + if(visuals) + QDEL_NULL(visuals) UnregisterSignal(origin, COMSIG_MOVABLE_MOVED) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) target = null @@ -162,6 +163,9 @@ segment.pixel_x = origin_px + Pixel_x segment.pixel_y = origin_py + Pixel_y + //This var might hold onto references, and we might be qdeleted during the check_tick... so yeah. + //It doesn't really matter, because this whole proc counts as a ref for src, but still. + segment = null CHECK_TICK /obj/effect/ebeam diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 2526c4bc9766..7a9e61500de6 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -89,6 +89,9 @@ to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.") /mob/camera/imaginary_friend/Initialize(mapload, _trauma) + if(!_trauma) + stack_trace("Imaginary friend created without trauma, wtf") + return INITIALIZE_HINT_QDEL . = ..() trauma = _trauma @@ -131,7 +134,7 @@ client.images |= current_image /mob/camera/imaginary_friend/Destroy() - if(owner.client) + if(owner?.client) owner.client.images.Remove(human_image) if(client) client.images.Remove(human_image) diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 2300e308a35f..c6d98adb0c0d 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -4,7 +4,7 @@ var/window_id // window_id is used as the window name for browse and onclose var/width = 0 var/height = 0 - var/atom/ref = null + var/datum/weakref/ref = null var/window_options = "can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id var/stylesheets[0] var/scripts[0] @@ -16,8 +16,8 @@ /datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/nref = null) - user = nuser + RegisterSignal(user, COMSIG_PARENT_QDELETING, .proc/user_deleted) window_id = nwindow_id if (ntitle) title = format_text(ntitle) @@ -26,7 +26,11 @@ if (nheight) height = nheight if (nref) - ref = nref + ref = WEAKREF(nref) + +/datum/browser/proc/user_deleted(datum/source) + SIGNAL_HANDLER + user = null /datum/browser/proc/add_head_content(nhead_content) head_content = nhead_content @@ -113,8 +117,13 @@ /datum/browser/proc/setup_onclose() set waitfor = 0 //winexists sleeps, so we don't need to. for (var/i in 1 to 10) - if (user && winexists(user, window_id)) - onclose(user, window_id, ref) + if (user?.client && winexists(user, window_id)) + var/atom/send_ref + if(ref) + send_ref = ref.resolve() + if(!send_ref) + ref = null + onclose(user, window_id, send_ref) break /datum/browser/proc/close() diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index 2a2cc55d2a22..aac5f65a3956 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -111,3 +111,5 @@ /datum/component/caltrop/UnregisterFromParent() if(ismovable(parent)) qdel(GetComponent(/datum/component/connect_loc_behalf)) + else + UnregisterSignal(get_turf(parent), list(COMSIG_ATOM_ENTERED)) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 9188e89ae734..dfb3bafbfb0e 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -4,7 +4,8 @@ var/fall_message = "GAH! Ah... where are you?" var/oblivion_message = "You stumble and stare into the abyss before you. It stares back, and you fall into the enveloping dark." - var/static/list/falling_atoms = list() // Atoms currently falling into chasms + /// List of refs to falling objects -> how many levels deep we've fallen + var/static/list/falling_atoms = list() var/static/list/forbidden_types = typecacheof(list( /obj/singularity, /obj/docking_port, @@ -20,7 +21,9 @@ /obj/effect/light_emitter/tendril, /obj/effect/collapse, /obj/effect/particle_effect/ion_trails, - /obj/effect/dummy/phased_mob + /obj/effect/dummy/phased_mob, + /obj/effect/mapping_helpers, + /obj/effect/wisp, )) /datum/component/chasm/Initialize(turf/target) @@ -28,11 +31,11 @@ target_turf = target START_PROCESSING(SSobj, src) // process on create, in case stuff is still there -/datum/component/chasm/proc/Entered(datum/source, atom/movable/AM, atom/old_loc, list/atom/old_locs) +/datum/component/chasm/proc/Entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER START_PROCESSING(SSobj, src) - drop_stuff(AM) + drop_stuff(arrived) /datum/component/chasm/process() if (!drop_stuff()) @@ -50,7 +53,6 @@ return LAZYLEN(found_safeties) /datum/component/chasm/proc/drop_stuff(AM) - . = 0 if (is_safe()) return FALSE @@ -58,57 +60,58 @@ var/to_check = AM ? list(AM) : parent.contents for (var/thing in to_check) if (droppable(thing)) - . = 1 + . = TRUE INVOKE_ASYNC(src, .proc/drop, thing) /datum/component/chasm/proc/droppable(atom/movable/AM) + var/datum/weakref/falling_ref = WEAKREF(AM) // avoid an infinite loop, but allow falling a large distance - if(falling_atoms[AM] && falling_atoms[AM] > 30) + if(falling_atoms[falling_ref] && falling_atoms[falling_ref] > 30) return FALSE if(!isliving(AM) && !isobj(AM)) return FALSE - if(is_type_in_typecache(AM, forbidden_types) || AM.throwing || (AM.movement_type & FLOATING)) + if(is_type_in_typecache(AM, forbidden_types) || AM.throwing || (AM.movement_type & (FLOATING|FLYING))) return FALSE //Flies right over the chasm if(ismob(AM)) var/mob/M = AM - if(M.buckled) //middle statement to prevent infinite loops just in case! + if(M.buckled) //middle statement to prevent infinite loops just in case! var/mob/buckled_to = M.buckled if((!ismob(M.buckled) || (buckled_to.buckled != M)) && !droppable(M.buckled)) return FALSE - if(M.is_flying()) - return FALSE if(ishuman(AM)) var/mob/living/carbon/human/H = AM if(istype(H.belt, /obj/item/wormhole_jaunter)) var/obj/item/wormhole_jaunter/J = H.belt //To freak out any bystanders - H.visible_message("[H] falls into [parent]!") + H.visible_message(span_boldwarning("[H] falls into [parent]!")) J.chasm_react(H) return FALSE return TRUE /datum/component/chasm/proc/drop(atom/movable/AM) + var/datum/weakref/falling_ref = WEAKREF(AM) //Make sure the item is still there after our sleep - if(!AM || QDELETED(AM)) + if(!AM || !falling_ref?.resolve()) + falling_atoms -= falling_ref return - falling_atoms[AM] = (falling_atoms[AM] || 0) + 1 + falling_atoms[falling_ref] = (falling_atoms[falling_ref] || 0) + 1 var/turf/T = target_turf if(T) // send to the turf below - AM.visible_message("[AM] falls into [parent]!", "[fall_message]") - T.visible_message("[AM] falls from above!") + AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[fall_message]")) + T.visible_message(span_boldwarning("[AM] falls from above!")) AM.forceMove(T) if(isliving(AM)) var/mob/living/L = AM L.Paralyze(100) L.adjustBruteLoss(30) - falling_atoms -= AM + falling_atoms -= falling_ref else // send to oblivion - AM.visible_message("[AM] falls into [parent]!", "[oblivion_message]") + AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[oblivion_message]")) if (isliving(AM)) var/mob/living/L = AM L.notransform = TRUE @@ -132,12 +135,16 @@ if(iscyborg(AM)) var/mob/living/silicon/robot/S = AM qdel(S.mmi) + if(isliving(AM)) + var/mob/living/L = AM + if(L.stat != DEAD) + L.death(TRUE) - falling_atoms -= AM + falling_atoms -= falling_ref qdel(AM) - if(AM && !QDELETED(AM)) //It's indestructible + if(AM && !QDELETED(AM)) //It's indestructible var/atom/parent = src.parent - parent.visible_message("[parent] spits out [AM]!") + parent.visible_message(span_boldwarning("[parent] spits out [AM]!")) AM.alpha = oldalpha AM.color = oldcolor AM.transform = oldtransform diff --git a/code/datums/components/connect_containers.dm b/code/datums/components/connect_containers.dm new file mode 100644 index 000000000000..d8a3ac8fbd3e --- /dev/null +++ b/code/datums/components/connect_containers.dm @@ -0,0 +1,68 @@ +/// This component behaves similar to connect_loc_behalf, but it's nested and hooks a signal onto all MOVABLES containing this atom. +/datum/component/connect_containers + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + + /// An assoc list of signal -> procpath to register to the loc this object is on. + var/list/connections + /** + * The atom the component is tracking. The component will delete itself if the tracked is deleted. + * Signals will also be updated whenever it moves. + */ + var/atom/movable/tracked + +/datum/component/connect_containers/Initialize(atom/movable/tracked, list/connections) + . = ..() + if (!ismovable(tracked)) + return COMPONENT_INCOMPATIBLE + + src.connections = connections + set_tracked(tracked) + +/datum/component/connect_containers/Destroy() + set_tracked(null) + return ..() + +/datum/component/connect_containers/InheritComponent(datum/component/component, original, atom/movable/tracked, list/connections) + // Not equivalent. Checks if they are not the same list via shallow comparison. + if(!compare_list(src.connections, connections)) + stack_trace("connect_containers component attached to [parent] tried to inherit another connect_containers component with different connections") + return + if(src.tracked != tracked) + set_tracked(tracked) + +/datum/component/connect_containers/proc/set_tracked(atom/movable/new_tracked) + if(tracked) + UnregisterSignal(tracked, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) + unregister_signals(tracked.loc) + tracked = new_tracked + if(!tracked) + return + RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, .proc/on_moved) + RegisterSignal(tracked, COMSIG_PARENT_QDELETING, .proc/handle_tracked_qdel) + update_signals(tracked) + +/datum/component/connect_containers/proc/handle_tracked_qdel() + SIGNAL_HANDLER + qdel(src) + +/datum/component/connect_containers/proc/update_signals(atom/movable/listener) + if(!ismovable(listener.loc)) + return + + for(var/atom/movable/container as anything in get_nested_locs(listener)) + RegisterSignal(container, COMSIG_MOVABLE_MOVED, .proc/on_moved) + for(var/signal in connections) + parent.RegisterSignal(container, signal, connections[signal]) + +/datum/component/connect_containers/proc/unregister_signals(atom/movable/location) + if(!ismovable(location)) + return + + for(var/atom/movable/target as anything in (get_nested_locs(location) + location)) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + parent.UnregisterSignal(target, connections) + +/datum/component/connect_containers/proc/on_moved(atom/movable/listener, atom/old_loc) + SIGNAL_HANDLER + unregister_signals(old_loc) + update_signals(listener) diff --git a/code/datums/components/connect_range.dm b/code/datums/components/connect_range.dm new file mode 100644 index 000000000000..5642b2ed4e2d --- /dev/null +++ b/code/datums/components/connect_range.dm @@ -0,0 +1,107 @@ +/** + * This component behaves similar to connect_loc_behalf but for all turfs in range, hooking into a signal on each of them. + * Just like connect_loc_behalf, It can react to that signal on behalf of a seperate listener. + * Good for components, though it carries some overhead. Can't be an element as that may lead to bugs. + */ +/datum/component/connect_range + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + + /// An assoc list of signal -> procpath to register to the loc this object is on. + var/list/connections + /** + * The atom the component is tracking. The component will delete itself if the tracked is deleted. + * Signals will also be updated whenever it moves (if it's a movable). + */ + var/atom/tracked + + /// The component will hook into signals only on turfs not farther from tracked than this. + var/range + /// Whether the component works when the movable isn't directly located on a turf. + var/works_in_containers + +/datum/component/connect_range/Initialize(atom/tracked, list/connections, range, works_in_containers = TRUE) + if(!isatom(tracked) || isarea(tracked) || range < 0) + return COMPONENT_INCOMPATIBLE + src.connections = connections + src.range = range + set_tracked(tracked) + src.works_in_containers = works_in_containers + +/datum/component/connect_range/Destroy() + set_tracked(null) + return ..() + +/datum/component/connect_range/InheritComponent(datum/component/component, original, atom/tracked, list/connections, range, works_in_containers) + // Not equivalent. Checks if they are not the same list via shallow comparison. + if(!compare_list(src.connections, connections)) + stack_trace("connect_range component attached to [parent] tried to inherit another connect_range component with different connections") + return + if(src.tracked != tracked) + set_tracked(tracked) + if(src.range == range && src.works_in_containers == works_in_containers) + return + //Unregister the signals with the old settings. + unregister_signals(isturf(tracked) ? tracked : tracked.loc) + src.range = range + src.works_in_containers = works_in_containers + //Re-register the signals with the new settings. + update_signals(src.tracked) + +/datum/component/connect_range/proc/set_tracked(atom/new_tracked) + if(tracked) //Unregister the signals from the old tracked and its surroundings + unregister_signals(isturf(tracked) ? tracked : tracked.loc) + UnregisterSignal(tracked, list( + COMSIG_MOVABLE_MOVED, + COMSIG_PARENT_QDELETING, + )) + tracked = new_tracked + if(!tracked) + return + //Register signals on the new tracked atom and its surroundings. + RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, .proc/on_moved) + RegisterSignal(tracked, COMSIG_PARENT_QDELETING, .proc/handle_tracked_qdel) + update_signals(tracked) + +/datum/component/connect_range/proc/handle_tracked_qdel() + SIGNAL_HANDLER + qdel(src) + +/datum/component/connect_range/proc/update_signals(atom/target, atom/old_loc, forced = FALSE) + var/turf/current_turf = get_turf(target) + var/on_same_turf = current_turf == get_turf(old_loc) //Only register/unregister turf signals if it's moved to a new turf. + unregister_signals(old_loc, on_same_turf) + + if(isnull(current_turf)) + return + + if(ismovable(target.loc)) + if(!works_in_containers) + return + //Keep track of possible movement of all movables the target is in. + for(var/atom/movable/container as anything in get_nested_locs(target)) + RegisterSignal(container, COMSIG_MOVABLE_MOVED, .proc/on_moved) + + if(on_same_turf && !forced) + return + for(var/turf/target_turf in RANGE_TURFS(range, current_turf)) + for(var/signal in connections) + parent.RegisterSignal(target_turf, signal, connections[signal]) + +/datum/component/connect_range/proc/unregister_signals(atom/location, on_same_turf = FALSE) + //The location is null or is a container and the component shouldn't have register signals on it + if(isnull(location) || (!works_in_containers && !isturf(location))) + return + + if(ismovable(location)) + for(var/atom/movable/target as anything in (get_nested_locs(location) + location)) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + + if(on_same_turf) + return + var/turf/previous_turf = get_turf(location) + for(var/turf/target_turf in RANGE_TURFS(range, previous_turf)) + parent.UnregisterSignal(target_turf, connections) + +/datum/component/connect_range/proc/on_moved(atom/movable/movable, atom/old_loc) + SIGNAL_HANDLER + update_signals(movable, old_loc) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 5daa79d0ff7e..96a013df406a 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -871,9 +871,9 @@ /datum/crafting_recipe/ipickaxe name = "Improvised Pickaxe" reqs = list( - /obj/item/crowbar = 1, - /obj/item/kitchen/knife = 1, - /obj/item/stack/tape = 1) + /obj/item/crowbar = 1, + /obj/item/kitchen/knife = 1, + /obj/item/stack/tape = 1) result = /obj/item/pickaxe/improvised category = CAT_MISC diff --git a/code/datums/components/fantasy/_fantasy.dm b/code/datums/components/fantasy/_fantasy.dm index a203264fae0a..92bd0868a746 100644 --- a/code/datums/components/fantasy/_fantasy.dm +++ b/code/datums/components/fantasy/_fantasy.dm @@ -116,8 +116,7 @@ for(var/i in affixes) var/datum/fantasy_affix/affix = i affix.remove(src) - for(var/i in appliedComponents) - qdel(i) + QDEL_LIST(appliedComponents) master.force = max(0, master.force - quality) master.throwforce = max(0, master.throwforce - quality) diff --git a/code/datums/components/mirv.dm b/code/datums/components/mirv.dm index 198a9336f246..b30ce2c05b7e 100644 --- a/code/datums/components/mirv.dm +++ b/code/datums/components/mirv.dm @@ -39,5 +39,5 @@ P.range = override_projectile_range P.preparePixelProjectile(shootat_turf, target) P.firer = firer // don't hit ourself that would be really annoying - P.impacted = list(target = TRUE) // don't hit the target we hit already with the flak + LAZYSET(P.impacted, target, TRUE) // don't hit the target we hit already with the flak P.fire() diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 623b24fb2c42..4e36391d3914 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -156,8 +156,7 @@ ///Clears the affected_turfs lazylist, removing from its contents the effects of being near the light. /datum/component/overlay_lighting/proc/clean_old_turfs() - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= lum_power affected_turfs = null @@ -167,9 +166,12 @@ if(!current_holder) return var/atom/movable/light_source = GET_LIGHT_SOURCE + . = list() for(var/turf/lit_turf in view(lumcount_range, get_turf(light_source))) lit_turf.dynamic_lumcount += lum_power - LAZYADD(affected_turfs, lit_turf) + . += lit_turf + if(length(.)) + affected_turfs = . ///Clears the old affected turfs and populates the new ones. @@ -407,8 +409,7 @@ . = lum_power lum_power = new_lum_power var/difference = . - lum_power - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= difference ///Here we append the behavior associated to changing lum_power. diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index b726489ad2a9..fc2ae4c058dc 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -159,7 +159,7 @@ pellet_delta += radius * self_harm_radius_mult for(var/i in 1 to radius * self_harm_radius_mult) pew(body) // free shrapnel if it goes off in your hand, and it doesn't even count towards the absorbed. fun! - else if(!(body in bodies)) + else if(!(LAZYISIN(bodies, body))) martyrs += body // promoted from a corpse to a hero for(var/M in martyrs) @@ -217,7 +217,7 @@ P.original = target P.fired_from = parent P.firer = parent // don't hit ourself that would be really annoying - P.impacted = list(parent = TRUE) // don't hit the target we hit already with the flak + LAZYSET(P.impacted, parent, TRUE) // don't hit the target we hit already with the flak P.suppressed = SUPPRESSED_VERY // set the projectiles to make no message so we can do our own aggregate message P.preparePixelProjectile(target, parent) RegisterSignal(P, COMSIG_PROJECTILE_SELF_ON_HIT, .proc/pellet_hit) @@ -269,13 +269,13 @@ /// Our grenade has moved, reset var/list/bodies so we're "on top" of any mobs currently on the tile /datum/component/pellet_cloud/proc/grenade_moved() LAZYCLEARLIST(bodies) - for(var/mob/living/L in get_turf(parent)) - RegisterSignal(L, COMSIG_PARENT_QDELETING, .proc/on_target_qdel, override=TRUE) - bodies += L + for(var/mob/living/new_mob in get_turf(parent)) + RegisterSignal(new_mob, COMSIG_PARENT_QDELETING, .proc/on_target_qdel, override=TRUE) + LAZYADD(bodies, new_mob) /// Someone who was originally "under" the grenade has moved off the tile and is now eligible for being a martyr and "covering" it /datum/component/pellet_cloud/proc/grenade_uncrossed(datum/source, atom/movable/AM, direction) - bodies -= AM + LAZYREMOVE(bodies, AM) /// Our grenade or landmine or caseless shell or whatever tried deleting itself, so we intervene and nullspace it until we're done here /datum/component/pellet_cloud/proc/nullspace_parent() @@ -288,5 +288,5 @@ /datum/component/pellet_cloud/proc/on_target_qdel(atom/target) UnregisterSignal(target, COMSIG_PARENT_QDELETING) targets_hit -= target - bodies -= target + LAZYREMOVE(target, bodies) purple_hearts -= target diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index e4f7fa4e8648..0b2794898e13 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -53,4 +53,5 @@ L.nest = src L.faction = src.faction P.visible_message("[L] [pick(spawn_text)] [P].") - playsound(P, pick(spawn_sound), 50, TRUE) + if(length(spawn_sound)) + playsound(P, pick(spawn_sound), 50, TRUE) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index af1c88c1f64c..f10332a3129a 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -406,20 +406,27 @@ M.client.screen |= boxes M.client.screen |= closer M.client.screen |= real_location.contents - M.active_storage = src + M.set_active_storage(src) LAZYOR(is_using, M) + RegisterSignal(M, COMSIG_PARENT_QDELETING, .proc/mob_deleted) return TRUE +/datum/component/storage/proc/mob_deleted(datum/source) + SIGNAL_HANDLER + hide_from(source) + /datum/component/storage/proc/hide_from(mob/M) + if(M.active_storage == src) + M.set_active_storage(null) + LAZYREMOVE(is_using, M) + + UnregisterSignal(M, COMSIG_PARENT_QDELETING) if(!M.client) return TRUE var/atom/real_location = real_location() M.client.screen -= boxes M.client.screen -= closer M.client.screen -= real_location.contents - if(M.active_storage == src) - M.active_storage = null - LAZYREMOVE(is_using, M) return TRUE /datum/component/storage/proc/close(mob/M) @@ -499,6 +506,7 @@ cansee |= M else LAZYREMOVE(is_using, M) + UnregisterSignal(M, COMSIG_PARENT_QDELETING) return cansee //Tries to dump content diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 0803102bc4f8..9edf16e0b634 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -30,7 +30,7 @@ ///Some gloves, generally ones that increase mobility, may have a minimum distance to fly. Rocket gloves are especially dangerous with this, be sure you'll hit your target or have a clear background if you miss, or else! var/min_distance ///The throwdatum we're currently dealing with, if we need it - var/datum/thrownthing/tackle + var/datum/weakref/tackle_ref /datum/component/tackler/Initialize(stamina_cost = 25, base_knockdown = 1 SECONDS, range = 4, speed = 1, skill_mod = 0, min_distance = min_distance) if(!iscarbon(parent)) @@ -51,7 +51,7 @@ /datum/component/tackler/Destroy() var/mob/P = parent to_chat(P, "You can no longer tackle.") - ..() + return ..() /datum/component/tackler/RegisterWithParent() RegisterSignal(parent, COMSIG_MOB_CLICKON, .proc/checkTackle) @@ -62,10 +62,11 @@ UnregisterSignal(parent, list(COMSIG_MOB_CLICKON, COMSIG_MOVABLE_IMPACT, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_POST_THROW)) ///Store the thrownthing datum for later use -/datum/component/tackler/proc/registerTackle(mob/living/carbon/user, datum/thrownthing/TT) +/datum/component/tackler/proc/registerTackle(mob/living/carbon/user, datum/thrownthing/tackle) SIGNAL_HANDLER - tackle = TT + tackle_ref = WEAKREF(tackle) + tackle.thrower = user ///See if we can tackle or not. If we can, leap! /datum/component/tackler/proc/checkTackle(mob/living/carbon/user, atom/A, params) @@ -145,7 +146,9 @@ /datum/component/tackler/proc/sack(mob/living/carbon/user, atom/hit) SIGNAL_HANDLER + var/datum/thrownthing/tackle = tackle_ref?.resolve() if(!tackling || !tackle) + tackle = null return if(!iscarbon(hit)) @@ -422,7 +425,7 @@ /datum/component/tackler/proc/resetTackle() tackling = FALSE - QDEL_NULL(tackle) + QDEL_NULL(tackle_ref) UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) ///A special case for splatting for handling windows @@ -508,8 +511,11 @@ I.throw_at(get_ranged_target_turf(I, pick(GLOB.alldirs), range = dist), range = dist, speed = sp) I.visible_message("[I] goes flying[sp > 3 ? " dangerously fast" : ""]!") // standard embed speed + var/datum/thrownthing/tackle = tackle_ref?.resolve() + playsound(owner, 'sound/weapons/smash.ogg', 70, TRUE) - tackle.finalize(hit=TRUE) + if(tackle) + tackle.finalize(hit=TRUE) resetTackle() #undef MAX_TABLE_MESSES diff --git a/code/datums/components/udder.dm b/code/datums/components/udder.dm index 886b2c1b12f7..f954559d9df2 100644 --- a/code/datums/components/udder.dm +++ b/code/datums/components/udder.dm @@ -72,6 +72,8 @@ ///type of reagent this udder will generate /obj/item/udder/Initialize(mapload, udder_mob, on_generate_callback, reagent_produced_typepath = /datum/reagent/consumable/milk) + if(!udder_mob) + return INITIALIZE_HINT_QDEL src.udder_mob = udder_mob src.on_generate_callback = on_generate_callback create_reagents(size) @@ -82,6 +84,7 @@ /obj/item/udder/Destroy() . = ..() STOP_PROCESSING(SSobj, src) + udder_mob = null /obj/item/udder/process(delta_time) if(udder_mob.stat != DEAD) @@ -138,8 +141,9 @@ RegisterSignal(udder_mob, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/on_mob_attacking) /obj/item/udder/gutlunch/Destroy() + if(udder_mob) + UnregisterSignal(udder_mob, COMSIG_HOSTILE_ATTACKINGTARGET) . = ..() - UnregisterSignal(udder_mob, COMSIG_HOSTILE_ATTACKINGTARGET) /obj/item/udder/gutlunch/process(delta_time) var/mob/living/simple_animal/hostile/asteroid/gutlunch/gutlunch = udder_mob diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm index 0e22a4f350f0..3f519fc49155 100644 --- a/code/datums/dash_weapon.dm +++ b/code/datums/dash_weapon.dm @@ -6,7 +6,6 @@ var/current_charges = 1 var/max_charges = 1 var/charge_rate = 250 - var/mob/living/carbon/human/holder var/obj/item/dashing_item var/dash_sound = 'sound/magic/blink.ogg' var/recharge_sound = 'sound/magic/charge.ogg' @@ -17,7 +16,10 @@ /datum/action/innate/dash/Grant(mob/user, obj/dasher) . = ..() dashing_item = dasher - holder = user + +/datum/action/innate/dash/Destroy() + dashing_item = null + return ..() /datum/action/innate/dash/IsAvailable() if(current_charges > 0) @@ -26,7 +28,7 @@ return FALSE /datum/action/innate/dash/Activate() - dashing_item.attack_self(holder) //Used to toggle dash behavior in the dashing item + dashing_item.attack_self(owner) //Used to toggle dash behavior in the dashing item /datum/action/innate/dash/proc/Teleport(mob/user, atom/target) if(!IsAvailable()) @@ -39,12 +41,12 @@ var/obj/spot2 = new phasein(get_turf(user), user.dir) spot1.Beam(spot2,beam_effect,time=20) current_charges-- - holder.update_action_buttons_icon() + owner.update_action_buttons_icon() addtimer(CALLBACK(src, .proc/charge), charge_rate) /datum/action/innate/dash/proc/charge() current_charges = clamp(current_charges + 1, 0, max_charges) - holder.update_action_buttons_icon() + owner.update_action_buttons_icon() if(recharge_sound) playsound(dashing_item, recharge_sound, 50, TRUE) - to_chat(holder, "[src] now has [current_charges]/[max_charges] charges.") + to_chat(owner, "[src] now has [current_charges]/[max_charges] charges.") diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 01fc5d6643e0..e2f478ba7834 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -43,9 +43,13 @@ /// A weak reference to another datum var/datum/weakref/weak_reference -#ifdef TESTING +#ifdef REFERENCE_TRACKING var/running_find_references var/last_find_references = 0 + #ifdef REFERENCE_TRACKING_DEBUG + ///Stores info about where refs are found, used for sanity checks and testing + var/list/found_refs + #endif #endif #ifdef DATUMVAR_DEBUGGING_MODE @@ -83,16 +87,21 @@ datum_flags &= ~DF_USE_TAG //In case something tries to REF us weak_reference = null //ensure prompt GCing of weakref. - var/list/timers = active_timers - active_timers = null - for(var/thing as anything in timers) - var/datum/timedevent/timer = thing - if (timer.spent && !(timer.flags & TIMER_DELETE_ME)) - continue - qdel(timer) + if(active_timers) + var/list/timers = active_timers + active_timers = null + for(var/datum/timedevent/timer as anything in timers) + if (timer.spent && !(timer.flags & TIMER_DELETE_ME)) + continue + qdel(timer) - //BEGIN: ECS SHIT + #ifdef REFERENCE_TRACKING + #ifdef REFERENCE_TRACKING_DEBUG + found_refs = null + #endif + #endif + //BEGIN: ECS SHIT var/list/dc = datum_components if(dc) var/all_components = dc[/datum/component] diff --git a/code/datums/diseases/parrotpossession.dm b/code/datums/diseases/parrotpossession.dm index 1a3346d5658d..2fb3a3645906 100644 --- a/code/datums/diseases/parrotpossession.dm +++ b/code/datums/diseases/parrotpossession.dm @@ -13,7 +13,7 @@ severity = DISEASE_SEVERITY_MEDIUM infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD|MOB_ROBOTIC|MOB_MINERAL bypasses_immunity = TRUE //2spook - var/mob/living/simple_animal/parrot/Poly/ghost/parrot + var/mob/living/simple_animal/parrot/Polly/ghost/parrot /datum/disease/parrot_possession/stage_act() ..() diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 60e74d97fb7d..5a1c2b3783d4 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -339,8 +339,8 @@ for(var/datum/quirk/quirk_instance as anything in roundstart_quirks) quirks_to_remove += quirk_instance.type for(var/quirk_name in quirks_resolved) - var/datum/quirk/quirk_instance = SSquirks.quirk_instances[quirk_name] - quirks_resolved += quirk_instance.type + var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] + quirks_resolved += quirk_type quirks_resolved -= quirk_name quirks_to_remove -= quirks_resolved for(var/quirk_type in quirks_to_remove) diff --git a/code/datums/elements/connect_loc.dm b/code/datums/elements/connect_loc.dm index fee9072f751d..cfadedd5980d 100644 --- a/code/datums/elements/connect_loc.dm +++ b/code/datums/elements/connect_loc.dm @@ -1,7 +1,7 @@ /// This element hooks a signal onto the loc the current object is on. /// When the object moves, it will unhook the signal and rehook it to the new object. /datum/element/connect_loc - element_flags = ELEMENT_BESPOKE + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH id_arg_index = 2 /// An assoc list of signal -> procpath to register to the loc this object is on. diff --git a/code/datums/elements/forced_gravity.dm b/code/datums/elements/forced_gravity.dm index b184aa989cb0..c567ff7b0961 100644 --- a/code/datums/elements/forced_gravity.dm +++ b/code/datums/elements/forced_gravity.dm @@ -9,6 +9,10 @@ if(!isatom(target)) return ELEMENT_INCOMPATIBLE + var/our_ref = REF(src) + if(HAS_TRAIT_FROM(target, TRAIT_FORCED_GRAVITY, our_ref)) + return + src.gravity = gravity src.ignore_space = ignore_space @@ -16,10 +20,13 @@ if(isturf(target)) RegisterSignal(target, COMSIG_TURF_HAS_GRAVITY, .proc/turf_gravity_check) + ADD_TRAIT(target, TRAIT_FORCED_GRAVITY, our_ref) + /datum/element/forced_gravity/Detach(datum/source, force) . = ..() var/static/list/signals_b_gone = list(COMSIG_ATOM_HAS_GRAVITY, COMSIG_TURF_HAS_GRAVITY) UnregisterSignal(source, signals_b_gone) + REMOVE_TRAIT(source, TRAIT_FORCED_GRAVITY, REF(src)) /datum/element/forced_gravity/proc/gravity_check(datum/source, turf/location, list/gravs) SIGNAL_HANDLER diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 68e1800d5c34..abc82ea6806e 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -47,16 +47,17 @@ GLOBAL_LIST_INIT(huds, list( /datum/atom_hud/Destroy() for(var/v in hudusers) - remove_hud_from(v, TRUE) + remove_hud_from(v) for(var/v in hudatoms) remove_from_hud(v) GLOB.all_huds -= src return ..() -/datum/atom_hud/proc/remove_hud_from(mob/M, force = FALSE) +/datum/atom_hud/proc/remove_hud_from(mob/M, absolute = FALSE) if(!M || !hudusers[M]) return - if (force || !--hudusers[M]) + if (absolute || !--hudusers[M]) + UnregisterSignal(M, COMSIG_PARENT_QDELETING) hudusers -= M if(next_time_allowed[M]) next_time_allowed -= M @@ -67,7 +68,7 @@ GLOBAL_LIST_INIT(huds, list( remove_from_single_hud(M, A) /datum/atom_hud/proc/remove_from_hud(atom/A) - if(!A || !(A in hudatoms)) + if(!A) return FALSE for(var/mob/M in hudusers) remove_from_single_hud(M, A) @@ -78,13 +79,14 @@ GLOBAL_LIST_INIT(huds, list( if(!M || !M.client || !A) return for(var/i in hud_icons) - M.client.images -= A.hud_list[i] + M.client.images -= A.hud_list?[i] /datum/atom_hud/proc/add_hud_to(mob/M) if(!M) return if(!hudusers[M]) hudusers[M] = 1 + RegisterSignal(M, COMSIG_PARENT_QDELETING, PROC_REF(unregister_mob)) if(next_time_allowed[M] > world.time) if(!queued_to_see[M]) addtimer(CALLBACK(src, .proc/show_hud_images_after_cooldown, M), next_time_allowed[M] - world.time) @@ -96,6 +98,11 @@ GLOBAL_LIST_INIT(huds, list( else hudusers[M]++ +/datum/atom_hud/proc/unregister_mob(datum/source, force) + SIGNAL_HANDLER + remove_hud_from(source, TRUE) + remove_from_hud(source) + /datum/atom_hud/proc/hide_single_atomhud_from(hud_user,hidden_atom) if(hudusers[hud_user]) remove_from_single_hud(hud_user,hidden_atom) @@ -135,7 +142,7 @@ GLOBAL_LIST_INIT(huds, list( //MOB PROCS /mob/proc/reload_huds() for(var/datum/atom_hud/hud in GLOB.all_huds) - if(hud && hud.hudusers[src]) + if(hud?.hudusers[src]) for(var/atom/A in hud.hudatoms) hud.add_to_single_hud(src, A) diff --git a/code/datums/map_zones.dm b/code/datums/map_zones.dm index a0f104c2fd91..b0f13fe19302 100644 --- a/code/datums/map_zones.dm +++ b/code/datums/map_zones.dm @@ -32,8 +32,7 @@ /datum/map_zone/Destroy() SSmapping.map_zones -= src QDEL_NULL(weather_controller) - for(var/datum/virtual_level/vlevel as anything in virtual_levels) - qdel(vlevel) + QDEL_LIST(virtual_levels) return ..() /// Clears all of what's inside the virtual levels managed by the mapzone. @@ -411,10 +410,17 @@ for(var/dir in crosslinked) if(crosslinked[dir]) //Because it could be linking with itself unlink(dir) - var/datum/space_level/level = SSmapping.z_list[z_value] - level.virtual_levels -= src + parent_level.virtual_levels -= src + parent_level = null + SSidlenpcpool.idle_mobs_by_virtual_level["[id]"] = null SSmapping.virtual_z_translation -= "[id]" parent_map_zone.remove_virtual_level(src) + if(up_linkage) + up_linkage.down_linkage = null + up_linkage = null + if(down_linkage) + down_linkage.up_linkage = null + down_linkage = null return ..() /datum/virtual_level/proc/mark_turfs() @@ -429,9 +435,14 @@ var/list/turf/block_turfs = get_block() + var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /atom/movable/lighting_object)) for(var/turf/turf as anything in block_turfs) // don't waste time trying to qdelete the lighting object - for(var/datum/thing in (turf.contents - turf.lighting_object)) + for(var/atom/movable/thing as anything in turf.contents) + //There's a dedicated macro for checking in a typecache, but it has unecessary checks + //And this needs to be fast + if(ignored_atoms[thing.type]) + continue qdel(thing) // DO NOT CHECK_TICK HERE. IT CAN CAUSE ITEMS TO GET LEFT BEHIND // THIS IS REALLY IMPORTANT FOR CONSISTENCY. SORRY ABOUT THE LAG SPIKE @@ -443,6 +454,7 @@ var/area/old_area = get_area(turf) space_area.contents += turf turf.change_area(old_area, space_area) + turf.virtual_z = 0 CHECK_TICK for(var/turf/turf as anything in block_turfs) diff --git a/code/datums/mapgen/_biome.dm b/code/datums/mapgen/_biome.dm index bf97734944f2..b5a35d953d3a 100644 --- a/code/datums/mapgen/_biome.dm +++ b/code/datums/mapgen/_biome.dm @@ -63,13 +63,13 @@ var/atom/spawned_mob //FLORA SPAWNING HERE - if(flora_spawn_list && prob(flora_spawn_chance) && (a_flags & FLORA_ALLOWED)) + if(length(flora_spawn_list) && prob(flora_spawn_chance) && (a_flags & FLORA_ALLOWED)) spawned_flora = pickweight(flora_spawn_list) spawned_flora = new spawned_flora(open_turf) open_turf.flags_1 |= NO_LAVA_GEN_1 //FEATURE SPAWNING HERE - if(feature_spawn_list && prob(feature_spawn_chance) && (a_flags & FLORA_ALLOWED)) //checks the same flag because lol dunno + if(length(feature_spawn_list) && prob(feature_spawn_chance) && (a_flags & FLORA_ALLOWED)) //checks the same flag because lol dunno var/atom/feature_type = pickweight(feature_spawn_list) var/can_spawn = TRUE @@ -85,7 +85,7 @@ open_turf.flags_1 |= NO_LAVA_GEN_1 //MOB SPAWNING HERE - if(mob_spawn_list && !spawned_flora && !spawned_feature && prob(mob_spawn_chance) && (a_flags & MOB_SPAWN_ALLOWED)) + if(length(mob_spawn_list) && !spawned_flora && !spawned_feature && prob(mob_spawn_chance) && (a_flags & MOB_SPAWN_ALLOWED)) var/atom/picked_mob = pickweight(mob_spawn_list) var/can_spawn = TRUE diff --git a/code/datums/mapgen/planetary/JungleGenerator.dm b/code/datums/mapgen/planetary/JungleGenerator.dm index 86c40769cd11..dd5635d4841f 100644 --- a/code/datums/mapgen/planetary/JungleGenerator.dm +++ b/code/datums/mapgen/planetary/JungleGenerator.dm @@ -175,7 +175,7 @@ mob_spawn_list = list( /mob/living/simple_animal/hostile/asteroid/wolf/random = 1, /mob/living/simple_animal/hostile/retaliate/bat = 1, - /mob/living/simple_animal/hostile/retaliate/poison/snake + /mob/living/simple_animal/hostile/retaliate/poison/snake = 1 ) feature_spawn_chance = 0.5 feature_spawn_list = list( @@ -230,7 +230,7 @@ mob_spawn_list = list( /mob/living/simple_animal/hostile/poison/bees/toxin = 1, /mob/living/simple_animal/hostile/mushroom = 1, - /mob/living/simple_animal/pet/dog/corgi/capybara + /mob/living/simple_animal/pet/dog/corgi/capybara = 1 ) /datum/biome/cave/lush/bright diff --git a/code/datums/mapgen/planetary/LavaGenerator.dm b/code/datums/mapgen/planetary/LavaGenerator.dm index d154063bdc17..6e6d4d898ac1 100644 --- a/code/datums/mapgen/planetary/LavaGenerator.dm +++ b/code/datums/mapgen/planetary/LavaGenerator.dm @@ -96,10 +96,10 @@ ) feature_spawn_chance = 0.3 feature_spawn_list = list( - /obj/structure/flora/rock/hell = 5, - /obj/structure/elite_tumor = 1, - /obj/structure/geyser/random = 1, - /obj/effect/spawner/lootdrop/anomaly/lava = 0.5 + /obj/structure/flora/rock/hell = 10, + /obj/structure/elite_tumor = 2, + /obj/structure/geyser/random = 2, + /obj/effect/spawner/lootdrop/anomaly/lava = 1, ) mob_spawn_chance = 4 diff --git a/code/datums/mapgen/planetary/RockGenerator.dm b/code/datums/mapgen/planetary/RockGenerator.dm index 83e3919ef154..61578c7a3ace 100644 --- a/code/datums/mapgen/planetary/RockGenerator.dm +++ b/code/datums/mapgen/planetary/RockGenerator.dm @@ -85,10 +85,10 @@ feature_spawn_chance = 0.25 feature_spawn_list = list( - /obj/structure/geyser/random = 8, - /obj/structure/elite_tumor = 4, - /obj/effect/spawner/lootdrop/anomaly/rock = 1, - /obj/effect/spawner/lootdrop/anomaly/big = 0.1 //get out of here stalker + /obj/structure/geyser/random = 80, + /obj/structure/elite_tumor = 40, + /obj/effect/spawner/lootdrop/anomaly/rock = 10, + /obj/effect/spawner/lootdrop/anomaly/big = 1 //get out of here stalker ) flora_spawn_chance = 5 diff --git a/code/datums/mapgen/planetary/SnowGenerator.dm b/code/datums/mapgen/planetary/SnowGenerator.dm index c021ecfce9bf..05661009b52d 100644 --- a/code/datums/mapgen/planetary/SnowGenerator.dm +++ b/code/datums/mapgen/planetary/SnowGenerator.dm @@ -207,12 +207,12 @@ ) feature_spawn_chance = 0.3 feature_spawn_list = list( - /obj/effect/spawner/lootdrop/anomaly/ice = 1, - /obj/effect/spawner/lootdrop/anomaly/big = 0.01, - /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 3, - /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 5, - /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 0.5, - /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 0.01 + /obj/effect/spawner/lootdrop/anomaly/ice = 100, + /obj/effect/spawner/lootdrop/anomaly/big = 1, + /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 300, + /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 500, + /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 50, + /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 1 ) @@ -260,13 +260,13 @@ ) feature_spawn_chance = 0.2 feature_spawn_list = list( - /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 3, - /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 5, - /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 0.6, - /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 0.2, - /obj/structure/spawner/ice_moon = 3, - /obj/structure/spawner/ice_moon/polarbear = 3, - /obj/effect/spawner/lootdrop/anomaly/ice/cave = 1 + /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 30, + /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 50, + /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 6, + /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 2, + /obj/structure/spawner/ice_moon = 30, + /obj/structure/spawner/ice_moon/polarbear = 30, + /obj/effect/spawner/lootdrop/anomaly/ice/cave = 10 ) /datum/biome/cave/snow/thawed diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index d3e81ad44615..8fdada12822e 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -96,36 +96,36 @@ flora_spawn_list = list( //mech spawners - /obj/effect/spawner/lootdrop/waste/mechwreck = 10, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 2, + /obj/effect/spawner/lootdrop/waste/mechwreck = 100, + /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 20, //decals and fluff structures - /obj/effect/spawner/lootdrop/waste/trash = 180, - /obj/effect/spawner/lootdrop/waste/radiation = 8, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 1, + /obj/effect/spawner/lootdrop/waste/trash = 1800, + /obj/effect/spawner/lootdrop/waste/radiation = 80, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 10, //stuff you can actually use - /obj/effect/spawner/lootdrop/waste/girder = 60, - /obj/structure/reagent_dispensers/fueltank = 10, - /obj/structure/reagent_dispensers/watertank = 20, - /obj/item/stack/cable_coil/cut = 50, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.1, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 20, - /obj/effect/spawner/lootdrop/maintenance = 20, - /obj/effect/spawner/lootdrop/maintenance/two = 10, - /obj/effect/spawner/lootdrop/maintenance/three = 5, - /obj/effect/spawner/lootdrop/maintenance/four = 2, + /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/structure/reagent_dispensers/fueltank = 100, + /obj/structure/reagent_dispensers/watertank = 200, + /obj/item/stack/cable_coil/cut = 500, + /obj/structure/closet/crate/secure/loot = 30, + /obj/effect/spawner/lootdrop/waste/atmos_can = 50, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 300, + /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, + /obj/effect/spawner/lootdrop/maintenance = 200, + /obj/effect/spawner/lootdrop/maintenance/two = 100, + /obj/effect/spawner/lootdrop/maintenance/three = 50, + /obj/effect/spawner/lootdrop/maintenance/four = 20, //plants - /obj/structure/flora/ash/garden/waste = 7, - /obj/structure/flora/ash/glowshroom = 20, //more common in caves + /obj/structure/flora/ash/garden/waste = 70, + /obj/structure/flora/ash/glowshroom = 200, //more common in caves //the illusive shrapnel plant - /obj/effect/mine/shrapnel/human_only = 1 + /obj/effect/mine/shrapnel/human_only = 10 ) feature_spawn_list = list( @@ -158,12 +158,12 @@ ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 8, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 1, - /obj/effect/spawner/lootdrop/waste/atmos_can = 18, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.5, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, + /obj/effect/spawner/lootdrop/waste/trash = 180, + /obj/effect/spawner/lootdrop/waste/radiation = 16, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 2, + /obj/effect/spawner/lootdrop/waste/atmos_can = 36, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 60, ) mob_spawn_chance = 1 @@ -183,26 +183,26 @@ /datum/biome/waste/clearing/mushroom flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 10, - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 30, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 12, - /obj/effect/spawner/lootdrop/waste/girder = 60, - /obj/structure/reagent_dispensers/fueltank = 10, - /obj/structure/reagent_dispensers/watertank = 20, - /obj/item/stack/cable_coil/cut = 50, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.1, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 20, - /obj/effect/spawner/lootdrop/maintenance = 20, - /obj/effect/spawner/lootdrop/maintenance/two = 10, - /obj/effect/spawner/lootdrop/maintenance/three = 5, - /obj/effect/spawner/lootdrop/maintenance/four = 2, - /obj/structure/flora/ash/garden/waste = 30, - /obj/structure/flora/ash/glowshroom = 180, - /obj/effect/mine/shrapnel/human_only = 1 + /obj/effect/spawner/lootdrop/waste/mechwreck = 100, + /obj/effect/spawner/lootdrop/waste/trash = 900, + /obj/effect/spawner/lootdrop/waste/radiation = 300, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 120, + /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/structure/reagent_dispensers/fueltank = 100, + /obj/structure/reagent_dispensers/watertank = 200, + /obj/item/stack/cable_coil/cut = 500, + /obj/structure/closet/crate/secure/loot = 30, + /obj/effect/spawner/lootdrop/waste/atmos_can = 50, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 300, + /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, + /obj/effect/spawner/lootdrop/maintenance = 200, + /obj/effect/spawner/lootdrop/maintenance/two = 100, + /obj/effect/spawner/lootdrop/maintenance/three = 50, + /obj/effect/spawner/lootdrop/maintenance/four = 20, + /obj/structure/flora/ash/garden/waste = 300, + /obj/structure/flora/ash/glowshroom = 1800, + /obj/effect/mine/shrapnel/human_only = 10 ) /datum/biome/waste/tar_bed //tar colorings @@ -225,28 +225,28 @@ ) flora_spawn_list = list( //there are no plants here - /obj/effect/spawner/lootdrop/waste/mechwreck = 20, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 5, - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 8, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 2, - /obj/effect/spawner/lootdrop/waste/girder = 60, - /obj/structure/reagent_dispensers/fueltank = 10, - /obj/structure/reagent_dispensers/watertank = 20, - /obj/item/stack/cable_coil/cut = 50, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.1, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 20, - /obj/effect/spawner/lootdrop/maintenance = 20, - /obj/effect/spawner/lootdrop/maintenance/two = 10, - /obj/effect/spawner/lootdrop/maintenance/three = 5, - /obj/effect/spawner/lootdrop/maintenance/four = 2, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 18, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.1, - /obj/effect/spawner/lootdrop/waste/salvageable = 30 + /obj/effect/spawner/lootdrop/waste/mechwreck = 200, + /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 50, + /obj/effect/spawner/lootdrop/waste/trash = 900, + /obj/effect/spawner/lootdrop/waste/radiation = 80, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 20, + /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/structure/reagent_dispensers/fueltank = 100, + /obj/structure/reagent_dispensers/watertank = 200, + /obj/item/stack/cable_coil/cut = 500, + /obj/structure/closet/crate/secure/loot = 30, + /obj/effect/spawner/lootdrop/waste/atmos_can = 50, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 300, + /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, + /obj/effect/spawner/lootdrop/maintenance = 200, + /obj/effect/spawner/lootdrop/maintenance/two = 100, + /obj/effect/spawner/lootdrop/maintenance/three = 50, + /obj/effect/spawner/lootdrop/maintenance/four = 20, + /obj/structure/closet/crate/secure/loot = 30, + /obj/effect/spawner/lootdrop/waste/atmos_can = 180, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 300 ) mob_spawn_list = list( //nor organics, more biased towards hivebots though /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, @@ -287,28 +287,28 @@ ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 10, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 2, - /obj/effect/spawner/lootdrop/waste/trash = 180, - /obj/effect/spawner/lootdrop/waste/radiation = 8, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 1, - /obj/effect/spawner/lootdrop/waste/girder = 60, - /obj/structure/reagent_dispensers/fueltank = 10, - /obj/structure/reagent_dispensers/watertank = 20, - /obj/item/stack/cable_coil/cut = 50, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.5, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 20, - /obj/effect/spawner/lootdrop/maintenance = 2, - /obj/effect/spawner/lootdrop/maintenance/two = 5, - /obj/effect/spawner/lootdrop/maintenance/three = 10, - /obj/effect/spawner/lootdrop/maintenance/four = 20, - /obj/effect/spawner/lootdrop/waste/salvageable = 40, - /obj/structure/flora/ash/garden/waste = 7, - /obj/structure/flora/ash/glowshroom = 40, //more common in caves - /obj/effect/mine/shrapnel/human_only = 1 + /obj/effect/spawner/lootdrop/waste/mechwreck = 100, + /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 20, + /obj/effect/spawner/lootdrop/waste/trash = 1800, + /obj/effect/spawner/lootdrop/waste/radiation = 80, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 10, + /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/structure/reagent_dispensers/fueltank = 100, + /obj/structure/reagent_dispensers/watertank = 200, + /obj/item/stack/cable_coil/cut = 500, + /obj/structure/closet/crate/secure/loot = 30, + /obj/effect/spawner/lootdrop/waste/atmos_can = 50, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 5, + /obj/effect/spawner/lootdrop/waste/salvageable = 300, + /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, + /obj/effect/spawner/lootdrop/maintenance = 20, + /obj/effect/spawner/lootdrop/maintenance/two = 50, + /obj/effect/spawner/lootdrop/maintenance/three = 100, + /obj/effect/spawner/lootdrop/maintenance/four = 200, + /obj/effect/spawner/lootdrop/waste/salvageable = 400, + /obj/structure/flora/ash/garden/waste = 70, + /obj/structure/flora/ash/glowshroom = 400, //more common in caves + /obj/effect/mine/shrapnel/human_only = 10 ) feature_spawn_list = list( @@ -346,23 +346,23 @@ /datum/biome/cave/waste/rad flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 25, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 7, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.5, - /obj/effect/spawner/lootdrop/waste/salvageable = 15, - /obj/effect/spawner/lootdrop/waste/girder = 20, - /obj/structure/reagent_dispensers/fueltank = 1, - /obj/structure/reagent_dispensers/watertank = 1, - /obj/item/stack/cable_coil/cut = 50, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 20, - /obj/effect/spawner/lootdrop/maintenance = 2, - /obj/effect/spawner/lootdrop/maintenance/two = 5, - /obj/effect/spawner/lootdrop/maintenance/three = 10, - /obj/effect/spawner/lootdrop/maintenance/four = 20, - /obj/structure/flora/ash/glowshroom = 180 + /obj/effect/spawner/lootdrop/waste/trash = 900, + /obj/effect/spawner/lootdrop/waste/radiation = 250, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 70, + /obj/effect/spawner/lootdrop/waste/atmos_can = 50, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 5, + /obj/effect/spawner/lootdrop/waste/salvageable = 150, + /obj/effect/spawner/lootdrop/waste/girder = 200, + /obj/structure/reagent_dispensers/fueltank = 10, + /obj/structure/reagent_dispensers/watertank = 10, + /obj/item/stack/cable_coil/cut = 500, + /obj/structure/closet/crate/secure/loot = 30, + /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, + /obj/effect/spawner/lootdrop/maintenance = 20, + /obj/effect/spawner/lootdrop/maintenance/two = 50, + /obj/effect/spawner/lootdrop/maintenance/three = 100, + /obj/effect/spawner/lootdrop/maintenance/four = 200, + /obj/structure/flora/ash/glowshroom = 1800 ) feature_spawn_chance = 12 @@ -378,25 +378,25 @@ /turf/closed/wall/rust = 10 ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 20, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 5, - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 16, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 2, - /obj/effect/spawner/lootdrop/waste/girder = 60, - /obj/structure/reagent_dispensers/fueltank = 10, - /obj/structure/reagent_dispensers/watertank = 20, - /obj/item/stack/cable_coil/cut = 50, - /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 0.5, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 20, - /obj/effect/spawner/lootdrop/maintenance = 2, - /obj/effect/spawner/lootdrop/maintenance/two = 5, - /obj/effect/spawner/lootdrop/maintenance/three = 10, - /obj/effect/spawner/lootdrop/maintenance/four = 20, - /obj/effect/spawner/lootdrop/waste/salvageable = 40, + /obj/effect/spawner/lootdrop/waste/mechwreck = 40, + /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 10, + /obj/effect/spawner/lootdrop/waste/trash = 180, + /obj/effect/spawner/lootdrop/waste/radiation = 32, + /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 4, + /obj/effect/spawner/lootdrop/waste/girder = 120, + /obj/structure/reagent_dispensers/fueltank = 20, + /obj/structure/reagent_dispensers/watertank = 40, + /obj/item/stack/cable_coil/cut = 100, + /obj/structure/closet/crate/secure/loot = 6, + /obj/effect/spawner/lootdrop/waste/atmos_can = 10, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 60, + /obj/effect/spawner/lootdrop/waste/grille_or_trash = 40, + /obj/effect/spawner/lootdrop/maintenance = 4, + /obj/effect/spawner/lootdrop/maintenance/two = 10, + /obj/effect/spawner/lootdrop/maintenance/three = 20, + /obj/effect/spawner/lootdrop/maintenance/four = 40, + /obj/effect/spawner/lootdrop/waste/salvageable = 80, ) mob_spawn_list = list( //nor organics, more biased towards hivebots though /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, diff --git a/code/datums/mapgen/single_biome/Gas_Giant.dm b/code/datums/mapgen/single_biome/Gas_Giant.dm index ff904db06853..7a99a1d8ca76 100644 --- a/code/datums/mapgen/single_biome/Gas_Giant.dm +++ b/code/datums/mapgen/single_biome/Gas_Giant.dm @@ -5,13 +5,12 @@ area_type = /area/overmap_encounter/planetoid/gas_giant /datum/biome/gas_giant - open_turf_types = list(/turf/open/chasm/gas_giant) + open_turf_types = list(/turf/open/chasm/gas_giant = 1) - flora_spawn_list = list( - ) + flora_spawn_list = null feature_spawn_list = null mob_spawn_list = list( - /mob/living/simple_animal/hostile/asteroid/basilisk/watcher + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 1 //in the future, I'd like to add something like. //The slylandro, or really any floating gas bag species, it'd be cool ) @@ -25,12 +24,10 @@ /datum/biome/plasma_giant - open_turf_types = list(/turf/open/chasm/gas_giant/plasma) + open_turf_types = list(/turf/open/chasm/gas_giant/plasma = 1) - flora_spawn_list = list( - ) + flora_spawn_list = null feature_spawn_list = null mob_spawn_list = list( - /mob/living/simple_animal/hostile/asteroid/basilisk/watcher - + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 1 ) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 50568ef82863..1ef0c1d50f60 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -72,8 +72,8 @@ var/list/skills_rewarded ///Assoc list of skills. Use SKILL_LVL to access level, and SKILL_EXP to access skill's exp. var/list/known_skills = list() - ///What character we joined in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not - var/mob/original_character + ///Weakref to thecharacter we joined in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not + var/datum/weakref/original_character /// The index for what character slot, if any, we were loaded from, so we can track persistent scars on a per-character basis. Each character slot gets PERSISTENT_SCAR_SLOTS scar slots var/original_character_slot_index /// The index for our current scar slot, so we don't have to constantly check the savefile (unlike the slots themselves, this index is independent of selected char slot, and increments whenever a valid char is joined with) @@ -102,25 +102,22 @@ if(islist(antag_datums)) QDEL_LIST(antag_datums) QDEL_NULL(language_holder) - enslaved_to = null + set_current(null) soulOwner = null - martial_art = null - current = null - original_character = null - leave_all_antag_huds() return ..() -/datum/mind/proc/handle_mob_deletion(mob/deleted_mob) - if (current == deleted_mob) - current = null - if (original_character == deleted_mob) - original_character = null - if (src == deleted_mob.mind) - deleted_mob.mind = null - if (istype(deleted_mob, /mob/living/carbon)) - var/mob/living/carbon/deleted_carbon = deleted_mob - if (src == deleted_carbon.last_mind) - deleted_carbon.last_mind = null +/datum/mind/proc/set_current(mob/new_current) + if(new_current && QDELETED(new_current)) + CRASH("Tried to set a mind's current var to a qdeleted mob, what the fuck") + if(current) + UnregisterSignal(src, COMSIG_PARENT_QDELETING) + current = new_current + if(current) + RegisterSignal(src, COMSIG_PARENT_QDELETING, .proc/clear_current) + +/datum/mind/proc/clear_current(datum/source) + SIGNAL_HANDLER + set_current(null) /datum/mind/proc/get_language_holder() if(!language_holder) @@ -128,7 +125,8 @@ return language_holder /datum/mind/proc/transfer_to(mob/new_character, force_key_move = 0) - if(current) // remove ourself from our old body's mind variable + set_original_character(null) + if(current) // remove ourself from our old body's mind variable current.mind = null UnregisterSignal(current, COMSIG_MOB_DEATH) SStgui.on_transfer(current, new_character) @@ -139,16 +137,16 @@ else key = new_character.key - if(new_character.mind) //disassociate any mind currently in our new body's mind variable - new_character.mind.current = null + if(new_character.mind) //disassociate any mind currently in our new body's mind variable + new_character.mind.set_current(null) var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list var/mob/living/old_current = current if(current) - current.transfer_observers_to(new_character) //transfer anyone observing the old character to the new one - current = new_character //associate ourself with our new body - new_character.mind = src //and associate our new body with ourself - for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body + current.transfer_observers_to(new_character) //transfer anyone observing the old character to the new one + set_current(new_character) //associate ourself with our new body + new_character.mind = src //and associate our new body with ourself + for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body var/datum/antagonist/A = a A.on_body_transfer(old_current, current) if(iscarbon(new_character)) @@ -165,6 +163,10 @@ new_character.client.init_verbs() // re-initialize character specific verbs current.update_atom_languages() +//I cannot trust you fucks to do this properly +/datum/mind/proc/set_original_character(new_original_character) + original_character = WEAKREF(new_original_character) + /datum/mind/proc/init_known_skills() for (var/type in GLOB.skill_types) known_skills[type] = list(SKILL_LEVEL_NONE, 0) @@ -811,7 +813,7 @@ if(!mind.name) mind.name = real_name - mind.current = src + mind.set_current(src) /mob/living/carbon/mind_initialize() ..() diff --git a/code/datums/proximity_monitor/field.dm b/code/datums/proximity_monitor/field.dm new file mode 100644 index 000000000000..43fdb8bb20b4 --- /dev/null +++ b/code/datums/proximity_monitor/field.dm @@ -0,0 +1,169 @@ +#define FIELD_TURFS_KEY "field_turfs" +#define EDGE_TURFS_KEY "edge_turfs" + +/** + * Movable and easily code-modified fields! Allows for custom AOE effects that affect movement + * and anything inside of them, and can do custom turf effects! + * Supports automatic recalculation/reset on movement. + */ +/datum/proximity_monitor/advanced + var/list/turf/field_turfs = list() + var/list/turf/edge_turfs = list() + +/datum/proximity_monitor/advanced/Destroy() + cleanup_field() + return ..() + +/datum/proximity_monitor/advanced/proc/cleanup_field() + for(var/turf/turf as anything in edge_turfs) + cleanup_edge_turf(turf) + for(var/turf/turf as anything in field_turfs) + cleanup_field_turf(turf) + +//Call every time the field moves (done automatically if you use update_center) or a setup specification is changed. +/datum/proximity_monitor/advanced/proc/recalculate_field() + var/list/new_turfs = update_new_turfs() + + var/list/new_field_turfs = new_turfs[FIELD_TURFS_KEY] + var/list/new_edge_turfs = new_turfs[EDGE_TURFS_KEY] + + for(var/turf/old_turf as anything in field_turfs) + if(!(old_turf in new_field_turfs)) + cleanup_field_turf(old_turf) + for(var/turf/old_turf as anything in edge_turfs) + cleanup_edge_turf(old_turf) + + for(var/turf/new_turf as anything in new_field_turfs) + setup_field_turf(new_turf) + for(var/turf/new_turf as anything in new_edge_turfs) + setup_edge_turf(new_turf) + +/datum/proximity_monitor/advanced/on_entered(turf/source, atom/movable/entered) + . = ..() + if(get_dist(source, host) == current_range) + field_edge_crossed(entered, source) + else + field_turf_crossed(entered, source) + +/datum/proximity_monitor/advanced/on_moved(atom/movable/movable, atom/old_loc) + . = ..() + if(ignore_if_not_on_turf) + //Early return if it's not the host that has moved. + if(movable != host) + return + //Cleanup the field if the host was on a turf but isn't anymore. + if(!isturf(host.loc)) + if(isturf(old_loc)) + cleanup_field() + return + recalculate_field() + +/datum/proximity_monitor/advanced/on_uncrossed(turf/source, atom/movable/gone, direction) + if(get_dist(source, host) == current_range) + field_edge_uncrossed(gone, source) + else + field_turf_uncrossed(gone, source) + +/datum/proximity_monitor/advanced/proc/setup_field_turf(turf/target) + field_turfs |= target + +/datum/proximity_monitor/advanced/proc/cleanup_field_turf(turf/target) + field_turfs -= target + +/datum/proximity_monitor/advanced/proc/setup_edge_turf(turf/target) + edge_turfs |= target + +/datum/proximity_monitor/advanced/proc/cleanup_edge_turf(turf/target) + edge_turfs -= target + +/datum/proximity_monitor/advanced/proc/update_new_turfs() + . = list(FIELD_TURFS_KEY = list(), EDGE_TURFS_KEY = list()) + if(ignore_if_not_on_turf && !isturf(host.loc)) + return + var/turf/center = get_turf(host) + for(var/turf/target in RANGE_TURFS(current_range, center)) + if(get_dist(center, target) == current_range) + .[EDGE_TURFS_KEY] += target + else + .[FIELD_TURFS_KEY] += target + +//Gets edge direction/corner, only works with square radius/WDH fields! +/datum/proximity_monitor/advanced/proc/get_edgeturf_direction(turf/T, turf/center_override = null) + var/turf/checking_from = get_turf(host) + if(istype(center_override)) + checking_from = center_override + if(!(T in edge_turfs)) + return + if(((T.x == (checking_from.x + current_range)) || (T.x == (checking_from.x - current_range))) && ((T.y == (checking_from.y + current_range)) || (T.y == (checking_from.y - current_range)))) + return get_dir(checking_from, T) + if(T.x == (checking_from.x + current_range)) + return EAST + if(T.x == (checking_from.x - current_range)) + return WEST + if(T.y == (checking_from.y - current_range)) + return SOUTH + if(T.y == (checking_from.y + current_range)) + return NORTH + +/datum/proximity_monitor/advanced/proc/field_turf_crossed(atom/movable/movable, turf/location) + return + +/datum/proximity_monitor/advanced/proc/field_turf_uncrossed(atom/movable/movable, turf/location) + return + +/datum/proximity_monitor/advanced/proc/field_edge_crossed(atom/movable/movable, turf/location) + return + +/datum/proximity_monitor/advanced/proc/field_edge_uncrossed(atom/movable/movable, turf/location) + return + + +//DEBUG FIELD ITEM +/obj/item/multitool/field_debug + name = "strange multitool" + desc = "Seems to project a colored field!" + var/operating = FALSE + var/datum/proximity_monitor/advanced/debug/current = null + +/obj/item/multitool/field_debug/Destroy() + QDEL_NULL(current) + return ..() + +/obj/item/multitool/field_debug/proc/setup_debug_field() + current = new(src, 5, FALSE) + current.set_fieldturf_color = "#aaffff" + current.set_edgeturf_color = "#ffaaff" + current.recalculate_field() + +/obj/item/multitool/field_debug/attack_self(mob/user) + operating = !operating + to_chat(user, span_notice("You turn [src] [operating? "on":"off"].")) + if(!istype(current) && operating) + setup_debug_field() + else if(!operating) + QDEL_NULL(current) + +//DEBUG FIELDS +/datum/proximity_monitor/advanced/debug + current_range = 5 + var/set_fieldturf_color = "#aaffff" + var/set_edgeturf_color = "#ffaaff" + +/datum/proximity_monitor/advanced/debug/setup_edge_turf(turf/target) + . = ..() + target.color = set_edgeturf_color + +/datum/proximity_monitor/advanced/debug/cleanup_edge_turf(turf/target) + . = ..() + target.color = initial(target.color) + +/datum/proximity_monitor/advanced/debug/setup_field_turf(turf/target) + . = ..() + target.color = set_fieldturf_color + +/datum/proximity_monitor/advanced/debug/cleanup_field_turf(turf/target) + . = ..() + target.color = initial(target.color) + +#undef FIELD_TURFS_KEY +#undef EDGE_TURFS_KEY diff --git a/code/modules/fields/gravity.dm b/code/datums/proximity_monitor/fields/gravity.dm similarity index 74% rename from code/modules/fields/gravity.dm rename to code/datums/proximity_monitor/fields/gravity.dm index 930c524081ff..ccac71a6d850 100644 --- a/code/modules/fields/gravity.dm +++ b/code/datums/proximity_monitor/fields/gravity.dm @@ -1,9 +1,11 @@ /datum/proximity_monitor/advanced/gravity - name = "modified gravity zone" - setup_field_turfs = TRUE var/gravity_value = 0 var/list/modified_turfs = list() - field_shape = FIELD_SHAPE_RADIUS_SQUARE + +/datum/proximity_monitor/advanced/gravity/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, gravity) + . = ..() + gravity_value = gravity + recalculate_field() /datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/T) . = ..() diff --git a/code/modules/fields/peaceborg_dampener.dm b/code/datums/proximity_monitor/fields/peaceborg_dampener.dm similarity index 65% rename from code/modules/fields/peaceborg_dampener.dm rename to code/datums/proximity_monitor/fields/peaceborg_dampener.dm index 5a1f14916481..16b637afadad 100644 --- a/code/modules/fields/peaceborg_dampener.dm +++ b/code/datums/proximity_monitor/fields/peaceborg_dampener.dm @@ -2,11 +2,6 @@ //Projectile dampening field that slows projectiles and lowers their damage for an energy cost deducted every 1/5 second. //Only use square radius for this! /datum/proximity_monitor/advanced/peaceborg_dampener - name = "\improper Hyperkinetic Dampener Field" - setup_edge_turfs = TRUE - setup_field_turfs = TRUE - requires_processing = TRUE - field_shape = FIELD_SHAPE_RADIUS_SQUARE var/static/image/edgeturf_south = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_south") var/static/image/edgeturf_north = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_north") var/static/image/edgeturf_west = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_west") @@ -17,21 +12,26 @@ var/static/image/southeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southeast") var/static/image/generic_edge = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_generic") var/obj/item/borg/projectile_dampen/projector = null - var/list/obj/projectile/tracked - var/list/obj/projectile/staging - use_host_turf = TRUE + var/list/obj/projectile/tracked = list() + var/list/obj/projectile/staging = list() + // lazylist that keeps track of the overlays added to the edge of the field + var/list/edgeturf_effects -/datum/proximity_monitor/advanced/peaceborg_dampener/New() - tracked = list() - staging = list() +/datum/proximity_monitor/advanced/peaceborg_dampener/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, obj/item/borg/projectile_dampen/projector) ..() + src.projector = projector + recalculate_field() + START_PROCESSING(SSfastprocess, src) /datum/proximity_monitor/advanced/peaceborg_dampener/Destroy() + projector = null + STOP_PROCESSING(SSfastprocess, src) return ..() /datum/proximity_monitor/advanced/peaceborg_dampener/process() if(!istype(projector)) qdel(src) + return var/list/ranged = list() for(var/obj/projectile/P in range(current_range, get_turf(host))) ranged += P @@ -41,23 +41,28 @@ for(var/mob/living/silicon/robot/R in range(current_range, get_turf(host))) if(R.has_buckled_mobs()) for(var/mob/living/L in R.buckled_mobs) - L.visible_message("[L] is knocked off of [R] by the charge in [R]'s chassis induced by [name]!") //I know it's bad. + L.visible_message(span_warning("[L] is knocked off of [R] by the charge in [R]'s chassis induced by the hyperkinetic dampener field!")) //I know it's bad. L.Paralyze(10) R.unbuckle_mob(L) do_sparks(5, 0, L) ..() -/datum/proximity_monitor/advanced/peaceborg_dampener/setup_edge_turf(turf/T) - ..() - var/image/I = get_edgeturf_overlay(get_edgeturf_direction(T)) - var/obj/effect/abstract/proximity_checker/advanced/F = edge_turfs[T] - F.appearance = I.appearance - F.invisibility = 0 - F.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - F.layer = 5 +/datum/proximity_monitor/advanced/peaceborg_dampener/setup_edge_turf(turf/target) + . = ..() + var/image/overlay = get_edgeturf_overlay(get_edgeturf_direction(target)) + var/obj/effect/abstract/effect = new(target) // Makes the field visible to players. + effect.icon = overlay.icon + effect.icon_state = overlay.icon_state + effect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + effect.layer = ABOVE_ALL_MOB_LAYER + LAZYSET(edgeturf_effects, target, effect) -/datum/proximity_monitor/advanced/peaceborg_dampener/cleanup_edge_turf(turf/T) - ..() +/datum/proximity_monitor/advanced/peaceborg_dampener/cleanup_edge_turf(turf/target) + . = ..() + var/obj/effect/abstract/effect = LAZYACCESS(edgeturf_effects, target) + LAZYREMOVE(edgeturf_effects, target) + if(effect) + qdel(effect) /datum/proximity_monitor/advanced/peaceborg_dampener/proc/get_edgeturf_overlay(direction) switch(direction) @@ -91,24 +96,13 @@ projector.restore_projectile(P) tracked -= P -/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_uncrossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) - if(!is_turf_in_field(get_turf(AM), src)) - if(istype(AM, /obj/projectile)) - if(AM in tracked) - release_projectile(AM) - else - capture_projectile(AM, FALSE) - return ..() - -/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_crossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) - if(istype(AM, /obj/projectile) && !(AM in tracked) && staging[AM] && !is_turf_in_field(staging[AM], src)) - capture_projectile(AM) - staging -= AM - return ..() +/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_uncrossed(atom/movable/movable, turf/location) + if(istype(movable, /obj/projectile) && get_dist(movable, host) > current_range) + if(movable in tracked) + release_projectile(movable) + else + capture_projectile(movable, FALSE) -/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_canpass(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F, turf/entering) - if(istype(AM, /obj/projectile)) - staging[AM] = get_turf(AM) - . = ..() - if(!.) - staging -= AM //This one ain't goin' through. +/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_crossed(atom/movable/movable, turf/location) + if(istype(movable, /obj/projectile) && !(movable in tracked)) + capture_projectile(movable) diff --git a/code/modules/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm similarity index 92% rename from code/modules/fields/timestop.dm rename to code/datums/proximity_monitor/fields/timestop.dm index 9bb39ff267ea..06ed1f113311 100644 --- a/code/modules/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -36,24 +36,20 @@ INVOKE_ASYNC(src, .proc/timestop) /obj/effect/timestop/Destroy() - qdel(chronofield) + QDEL_NULL(chronofield) playsound(src, 'sound/magic/timeparadox2.ogg', 75, TRUE, frequency = -1) //reverse! return ..() /obj/effect/timestop/proc/timestop() target = get_turf(src) playsound(src, 'sound/magic/timeparadox2.ogg', 75, TRUE, -1) - chronofield = make_field(/datum/proximity_monitor/advanced/timestop, list("current_range" = freezerange, "host" = src, "immune" = immune, "check_anti_magic" = check_anti_magic, "check_holy" = check_holy)) + chronofield = new (src, freezerange, TRUE, immune, check_anti_magic, check_holy) QDEL_IN(src, duration) /obj/effect/timestop/magic check_anti_magic = TRUE /datum/proximity_monitor/advanced/timestop - name = "chronofield" - setup_field_turfs = TRUE - field_shape = FIELD_SHAPE_RADIUS_SQUARE - requires_processing = TRUE var/list/immune = list() var/list/frozen_things = list() var/list/frozen_mobs = list() //cached separately for processing @@ -64,12 +60,21 @@ var/static/list/global_frozen_atoms = list() +/datum/proximity_monitor/advanced/timestop/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, list/immune, check_anti_magic, check_holy) + ..() + src.immune = immune + src.check_anti_magic = check_anti_magic + src.check_holy = check_holy + recalculate_field() + START_PROCESSING(SSfastprocess, src) + /datum/proximity_monitor/advanced/timestop/Destroy() unfreeze_all() + STOP_PROCESSING(SSfastprocess, src) return ..() -/datum/proximity_monitor/advanced/timestop/field_turf_crossed(atom/movable/AM) - freeze_atom(AM) +/datum/proximity_monitor/advanced/timestop/field_turf_crossed(atom/movable/movable, turf/location) + freeze_atom(movable) /datum/proximity_monitor/advanced/timestop/proc/freeze_atom(atom/movable/A) if(immune[A] || global_frozen_atoms[A] || !istype(A)) @@ -167,10 +172,10 @@ m.Stun(20, ignore_canstun = TRUE) /datum/proximity_monitor/advanced/timestop/setup_field_turf(turf/T) + . = ..() for(var/i in T.contents) freeze_atom(i) freeze_turf(T) - return ..() /datum/proximity_monitor/advanced/timestop/proc/freeze_projectile(obj/projectile/P) diff --git a/code/datums/proximity_monitor/proximity_monitor.dm b/code/datums/proximity_monitor/proximity_monitor.dm new file mode 100644 index 000000000000..6bc78a39c835 --- /dev/null +++ b/code/datums/proximity_monitor/proximity_monitor.dm @@ -0,0 +1,78 @@ +/datum/proximity_monitor + ///The atom we are tracking + var/atom/host + ///The atom that will receive HasProximity calls. + var/atom/hasprox_receiver + ///The range of the proximity monitor. Things moving wihin it will trigger HasProximity calls. + var/current_range + ///If we don't check turfs in range if the host's loc isn't a turf + var/ignore_if_not_on_turf + ///The signals of the connect range component, needed to monitor the turfs in range. + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = .proc/on_entered, + COMSIG_ATOM_EXITED =.proc/on_uncrossed, + ) + +/datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE) + ignore_if_not_on_turf = _ignore_if_not_on_turf + current_range = range + set_host(_host) + +/datum/proximity_monitor/proc/set_host(atom/new_host, atom/new_receiver) + if(new_host == host) + return + if(host) //No need to delete the connect range and containers comps. They'll be updated with the new tracked host. + UnregisterSignal(host, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) + if(hasprox_receiver) + UnregisterSignal(hasprox_receiver, COMSIG_PARENT_QDELETING) + if(new_receiver) + hasprox_receiver = new_receiver + if(new_receiver != new_host) + RegisterSignal(new_receiver, COMSIG_PARENT_QDELETING, .proc/on_host_or_receiver_del) + else if(hasprox_receiver == host) //Default case + hasprox_receiver = new_host + host = new_host + RegisterSignal(new_host, COMSIG_PARENT_QDELETING, .proc/on_host_or_receiver_del) + var/static/list/containers_connections = list(COMSIG_MOVABLE_MOVED = .proc/on_moved) + AddComponent(/datum/component/connect_containers, host, containers_connections) + RegisterSignal(host, COMSIG_MOVABLE_MOVED, .proc/on_moved) + set_range(current_range, TRUE) + +/datum/proximity_monitor/proc/on_host_or_receiver_del(datum/source) + SIGNAL_HANDLER + qdel(src) + +/datum/proximity_monitor/Destroy() + host = null + hasprox_receiver = null + return ..() + +/datum/proximity_monitor/proc/set_range(range, force_rebuild = FALSE) + if(!force_rebuild && range == current_range) + return FALSE + . = TRUE + current_range = range + + //If the connect_range component exists already, this will just update its range. No errors or duplicates. + AddComponent(/datum/component/connect_range, host, loc_connections, range, !ignore_if_not_on_turf) + +/datum/proximity_monitor/proc/on_moved(atom/movable/source, atom/old_loc) + SIGNAL_HANDLER + if(source == host) + hasprox_receiver?.HasProximity(host) + +/datum/proximity_monitor/proc/set_ignore_if_not_on_turf(does_ignore = TRUE) + if(ignore_if_not_on_turf == does_ignore) + return + ignore_if_not_on_turf = does_ignore + //Update the ignore_if_not_on_turf + AddComponent(/datum/component/connect_range, host, loc_connections, current_range, ignore_if_not_on_turf) + +/datum/proximity_monitor/proc/on_uncrossed() + SIGNAL_HANDLER + return //Used by the advanced subtype for effect fields. + +/datum/proximity_monitor/proc/on_entered(atom/source, atom/movable/arrived) + SIGNAL_HANDLER + if(source != host) + hasprox_receiver?.HasProximity(arrived) diff --git a/code/datums/quixotejump.dm b/code/datums/quixotejump.dm index 8ed02f286cb5..98827a2a2df6 100644 --- a/code/datums/quixotejump.dm +++ b/code/datums/quixotejump.dm @@ -6,13 +6,13 @@ var/charges = 3 var/max_charges = 3 var/charge_rate = 60 //3 seconds - var/mob/living/carbon/human/holder + var/datum/weakref/holder_ref var/dash_sound = 'sound/magic/blink.ogg' var/beam_effect = "blur" /datum/action/innate/quixotejump/Grant(mob/user) . = ..() - holder = user + holder_ref = WEAKREF(user) /datum/action/innate/quixotejump/IsAvailable() if(charges > 0) @@ -21,11 +21,17 @@ return FALSE /datum/action/innate/quixotejump/proc/charge() + var/mob/living/carbon/human/holder = holder_ref.resolve() + if(isnull(holder)) + return charges = clamp(charges + 1, 0, max_charges) holder.update_action_buttons_icon() to_chat(holder, "Quixote dash mechanisms now have [charges]/[max_charges] charges.") /datum/action/innate/quixotejump/Activate() + var/mob/living/carbon/human/holder = holder_ref.resolve() + if(isnull(holder)) + return if(!charges) to_chat(holder, "Quixote dash mechanisms are still recharging. Please standby.") return diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index ca7b7e8b3162..13d884187ad9 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -8,13 +8,6 @@ cost = 5 allow_duplicates = FALSE -/datum/map_template/ruin/lavaland/biodome/beach - name = "Biodome Beach" - id = "biodome-beach" - description = "Seemingly plucked from a tropical destination, this beach is calm and cool, with the salty waves roaring softly in the background. \ - Comes with a rustic wooden bar and suicidal bartender." - suffix = "lavaland_biodome_beach.dmm" - /datum/map_template/ruin/lavaland/biodome/winter name = "Biodome Winter" id = "biodome-winter" @@ -22,14 +15,6 @@ Includes a unique(*) laser pistol display case, and the recently introduced I.C.E(tm)." suffix = "lavaland_surface_biodome_winter.dmm" -/datum/map_template/ruin/lavaland/syndicate_base - name = "Syndicate Lava Base" - id = "lava-base" - description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." - suffix = "lavaland_surface_syndicate_base1.dmm" - cost = 20 - allow_duplicates = FALSE - /datum/map_template/ruin/lavaland/free_golem name = "Free Golem Ship" id = "golem-ship" diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index c646f76fe1e8..c1b065d3b73e 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -108,6 +108,8 @@ continue for(var/obj/docking_port/mobile/port in place) + if(my_port) + CRASH("[src] loaded with multiple docking ports!") my_port = port if(register) port.register() @@ -135,6 +137,9 @@ port.dwidth = port_y_offset - 1 port.dheight = width - port_x_offset + if(!my_port) + CRASH("Shuttle template loaded without a mobile port!") + for(var/turf/shuttle_turf in turfs) //Set up underlying_turf_area and update relevent towed_shuttles var/area/ship/turf_loc = turfs[shuttle_turf] @@ -310,18 +315,6 @@ /datum/map_template/shuttle/shiptest category = "shiptest" -/datum/map_template/shuttle/custom - job_slots = list(new /datum/job/assistant = 5) // There will already be a captain, probably! - file_name = "custom_shuttle" // Dummy - -/// Syndicate Infiltrator variants -/datum/map_template/shuttle/infiltrator - category = "misc" - -/datum/map_template/shuttle/infiltrator/advanced - file_name = "infiltrator_advanced" - name = "advanced syndicate infiltrator" - /// Pirate ship templates /datum/map_template/shuttle/pirate category = "misc" diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 03808a86d076..becead47da9d 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -398,7 +398,7 @@ /datum/status_effect/hippocraticOath/proc/consume_owner() owner.visible_message("[owner]'s soul is absorbed into the rod, relieving the previous snake of its duty.") var/mob/living/simple_animal/hostile/retaliate/poison/snake/healSnake = new(owner.loc) - var/list/chems = list(/datum/reagent/medicine/sal_acid, /datum/reagent/medicine/C2/convermol, /datum/reagent/medicine/oxandrolone) + var/list/chems = list(/datum/reagent/medicine/sal_acid, /datum/reagent/medicine/c2/convermol, /datum/reagent/medicine/oxandrolone) healSnake.poison_type = pick(chems) healSnake.name = "Asclepius's Snake" healSnake.real_name = "Asclepius's Snake" diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm index 75d9dde5cff5..bd4f5982901d 100644 --- a/code/datums/traits/_quirk.dm +++ b/code/datums/traits/_quirk.dm @@ -1,5 +1,3 @@ -#define TRAIT_SPECIES_WHITELIST(ids...) list("type" = "allowed", ids) -#define TRAIT_SPECIES_BLACKLIST(ids...) list("type" = "blocked", ids) //every quirk in this folder should be coded around being applied on spawn //these are NOT "mob quirks" like GOTTAGOFAST, but exist as a medium to apply them and other different effects /datum/quirk @@ -12,7 +10,6 @@ var/medical_record_text //This text will appear on medical records for the trait. Not yet implemented var/mood_quirk = FALSE //if true, this quirk affects mood and is unavailable if moodlets are disabled var/list/mob_traits //if applicable, apply and remove these mob traits - var/list/species_lock = list() //List of id-based locks for species, use either TRAIT_SPECIES_WHITELIST or TRAIT_SPECIES_BLACKLIST inputting the species ids to said macros. Example: species_lock = TRAIT_SPECIES_WHITELIST(SPECIES_IPC, SPECIES_MOTH) var/mob/living/quirk_holder /datum/quirk/New(mob/living/quirk_mob, spawn_effects) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index db6fdbd75841..c8e3b582511d 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -23,7 +23,6 @@ gain_text = "You feel your vigor slowly fading away." lose_text = "You feel vigorous again." medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood." - species_lock = TRAIT_SPECIES_BLACKLIST(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE) // These bad boys have NOBLOOD and are roundstart available. /datum/quirk/blooddeficiency/on_process() var/mob/living/carbon/human/H = quirk_holder diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index e3f73d287b72..a8e9873150ea 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -31,9 +31,10 @@ var/obj/item/assembly/timer/T = S G.det_time = T.saved_time*10 else if(istype(S,/obj/item/assembly/prox_sensor)) - var/obj/item/grenade/chem_grenade/G = holder - G.landminemode = S - S.proximity_monitor.wire = TRUE + var/obj/item/assembly/prox_sensor/sensor = S + var/obj/item/grenade/chem_grenade/grenade = holder + grenade.landminemode = sensor + sensor.proximity_monitor.set_ignore_if_not_on_turf(FALSE) fingerprint = S.fingerprintslast return ..() diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm index e0d6f18a838b..0490c88def2d 100644 --- a/code/game/area/ai_monitored.dm +++ b/code/game/area/ai_monitored.dm @@ -10,7 +10,7 @@ for (var/obj/machinery/camera/M in src) if(M.isMotion()) motioncameras.Add(M) - M.area_motion = src + M.set_area_motion(src) //Only need to use one camera diff --git a/code/game/area/areas/ruins/_ruins.dm b/code/game/area/areas/ruins/_ruins.dm index bb57bb271356..1ba5d0e18ec6 100644 --- a/code/game/area/areas/ruins/_ruins.dm +++ b/code/game/area/areas/ruins/_ruins.dm @@ -1,7 +1,7 @@ //Parent types /area/ruin - name = "\improper Unexplored Location" + name = "unexplored location" icon_state = "away" has_gravity = STANDARD_GRAVITY area_flags = HIDDEN_AREA | BLOBS_ALLOWED diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 5587837368fb..a9d7220bd3ca 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -24,7 +24,7 @@ mobile_port = null . = ..() -/area/shuttle/PlaceOnTopReact(list/new_baseturfs, turf/fake_turf_type, flags) +/area/shuttle/PlaceOnTopReact(turf/T, list/new_baseturfs, turf/fake_turf_type, flags) . = ..() if(length(new_baseturfs) > 1 || fake_turf_type) return // More complicated larger changes indicate this isn't a player diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 3e97c843fd13..4628bb22f92f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -55,8 +55,6 @@ ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc var/list/managed_overlays - ///Proximity monitor associated with this atom - var/datum/proximity_monitor/proximity_monitor ///Cooldown tick timer for buckle messages var/buckle_message_cooldown = 0 ///Last fingerprints to touch this atom @@ -249,9 +247,10 @@ if (length(no_connector_typecache)) no_connector_typecache = SSicon_smooth.get_no_connector_typecache(src.type, no_connector_typecache, connector_strict_typing) - var/area/ship/current_ship_area = get_area(src) - if(!mapload && istype(current_ship_area) && current_ship_area.mobile_port) - connect_to_shuttle(current_ship_area.mobile_port, current_ship_area.mobile_port.docked) + if(!mapload) + var/area/ship/current_ship_area = get_area(src) + if(istype(current_ship_area) && current_ship_area.mobile_port) + connect_to_shuttle(current_ship_area.mobile_port, current_ship_area.mobile_port.docked) var/temp_list = list() for(var/i in custom_materials) @@ -333,19 +332,19 @@ P.setAngle(new_angle_s) return TRUE -///Can the mover object pass this atom, while heading for the target turf -/atom/proc/CanPass(atom/movable/mover, turf/target) +/// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir. +/atom/proc/CanPass(atom/movable/mover, border_dir) SHOULD_CALL_PARENT(TRUE) SHOULD_BE_PURE(TRUE) if(mover.movement_type & PHASING) return TRUE - . = CanAllowThrough(mover, target) + . = CanAllowThrough(mover, border_dir) // This is cheaper than calling the proc every time since most things dont override CanPassThrough if(!mover.generic_canpass) - return mover.CanPassThrough(src, target, .) + return mover.CanPassThrough(src, REVERSE_DIR(border_dir), .) /// Returns true or false to allow the mover to move through src -/atom/proc/CanAllowThrough(atom/movable/mover, turf/target) +/atom/proc/CanAllowThrough(atom/movable/mover, border_dir) SHOULD_CALL_PARENT(TRUE) //SHOULD_BE_PURE(TRUE) if(mover.pass_flags & pass_flags_self) @@ -968,16 +967,6 @@ /atom/proc/handle_atom_del(atom/A) SEND_SIGNAL(src, COMSIG_ATOM_CONTENTS_DEL, A) -/** - * called when the turf the atom resides on is ChangeTurfed - * - * Default behaviour is to loop through atom contents and call their HandleTurfChange() proc - */ -/atom/proc/HandleTurfChange(turf/T) - for(var/atom in src) - var/atom/A = atom - A.HandleTurfChange(T) - /** * the vision impairment to give to the mob whose perspective is set to that atom * @@ -1320,6 +1309,9 @@ /atom/proc/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) return +/atom/proc/disconnect_from_shuttle(obj/docking_port/mobile/port) + return + /// Generic logging helper /atom/proc/log_message(message, message_type, color=null, log_globally=TRUE) if(!log_globally) @@ -1564,7 +1556,7 @@ else // See if there's a gravity generator on our map zone var/datum/map_zone/mapzone = T.get_map_zone() - if(mapzone.gravity_generators.len) + if(mapzone?.gravity_generators.len) var/max_grav = 0 for(var/obj/machinery/gravity_generator/main/G as anything in mapzone.gravity_generators) max_grav = max(G.setting,max_grav) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ad45018cec39..7471c3514881 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -94,12 +94,8 @@ /atom/movable/Destroy(force) - if(proximity_monitor) - QDEL_NULL(proximity_monitor) - if(language_holder) - QDEL_NULL(language_holder) - if(em_block) - QDEL_NULL(em_block) + QDEL_NULL(language_holder) + QDEL_NULL(em_block) unbuckle_all_mobs(force = TRUE) @@ -551,6 +547,7 @@ return TRUE +/// Called when an atom moves to a different virtual z. Warning, it will pass z-level 0 in new_virtual_z on creation and 0 in previous_virtual_z whenever moved to nullspace /atom/movable/proc/on_virtual_z_change(new_virtual_z, previous_virtual_z) SHOULD_NOT_SLEEP(TRUE) SHOULD_CALL_PARENT(TRUE) @@ -580,7 +577,7 @@ /atom/movable/Cross(atom/movable/AM) . = TRUE SEND_SIGNAL(src, COMSIG_MOVABLE_CROSS, AM) - return CanPass(AM, AM.loc, TRUE) + return CanPass(AM, get_dir(src, AM)) ///default byond proc that is deprecated for us in lieu of signals. do not call /atom/movable/Crossed(atom/movable/crossed_atom, oldloc) @@ -886,13 +883,13 @@ /atom/movable/proc/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) return FALSE -/atom/movable/CanAllowThrough(atom/movable/mover, turf/target) +/atom/movable/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(mover in buckled_mobs) return TRUE /// Returns true or false to allow src to move through the blocker, mover has final say -/atom/movable/proc/CanPassThrough(atom/blocker, turf/target, blocker_opinion) +/atom/movable/proc/CanPassThrough(atom/blocker, movement_dir, blocker_opinion) SHOULD_CALL_PARENT(TRUE) SHOULD_BE_PURE(TRUE) return blocker_opinion @@ -917,7 +914,7 @@ return turf else var/atom/movable/AM = A - if(!AM.CanPass(src) || AM.density) + if(AM.density || !AM.CanPass(src, get_dir(src, AM))) if(AM.anchored) return AM dense_object_backup = AM diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index eac7e341fd6b..a690a9317670 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -155,8 +155,9 @@ if(iscarbon(hit_atom) && !caught)//if they are a carbon and they didn't catch it var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) slipper.Slip(src, hit_atom) - if(thrownby && !caught) - addtimer(CALLBACK(src, /atom/movable.proc/throw_at, thrownby, throw_range+2, throw_speed, null, TRUE), 1) + var/mob/thrown_by = thrownby?.resolve() + if(thrown_by && !caught) + addtimer(CALLBACK(src, /atom/movable.proc/throw_at, thrown_by, throw_range+2, throw_speed, null, TRUE), 1) else return ..() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 01150fac7f3b..82735ff9d522 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -17,6 +17,11 @@ GLOBAL_LIST_EMPTY(objectives) if(text) explanation_text = text +//Apparently objectives can be qdel'd. Learn a new thing every day +/datum/objective/Destroy() + GLOB.objectives -= src + return ..() + /datum/objective/proc/get_owners() // Combine owner and team into a single list. . = (team && team.members) ? team.members.Copy() : list() if(owner) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index b1d790677317..bc793eb60d82 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -139,9 +139,10 @@ Class Procs: . = ..() GLOB.machines += src RegisterSignal(src, COMSIG_MOVABLE_Z_CHANGED, .proc/power_change) - if(ispath(circuit, /obj/item/circuitboard) && (mapload || apply_default_parts)) + if(ispath(circuit, /obj/item/circuitboard)) circuit = new circuit - circuit.apply_default_parts(src) + if(mapload || apply_default_parts) + circuit.apply_default_parts(src) if(processing_flags & START_PROCESSING_ON_INIT) begin_processing() @@ -170,10 +171,8 @@ Class Procs: GLOB.machines.Remove(src) end_processing() dropContents() - if(length(component_parts)) - for(var/atom/A in component_parts) - qdel(A) - component_parts.Cut() + QDEL_NULL(circuit) + QDEL_LIST(component_parts) return ..() /obj/machinery/proc/locate_machinery() @@ -410,7 +409,10 @@ Class Procs: /obj/machinery/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) on_deconstruction() - if(component_parts && component_parts.len) + if(circuit) + circuit.forceMove(loc) + circuit = null + if(length(component_parts)) spawn_frame(disassembled) for(var/obj/item/I in component_parts) I.forceMove(loc) diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm index c2d9e0da07cb..0b35bedebd05 100644 --- a/code/game/machinery/airlock_cycle_control.dm +++ b/code/game/machinery/airlock_cycle_control.dm @@ -139,7 +139,7 @@ /obj/machinery/advanced_airlock_controller/Initialize(mapload) . = ..() - SSair.start_processing_machine(src) + SSair.start_processing_machine(src, mapload) scan_on_late_init = mapload if(mapload && (. != INITIALIZE_HINT_QDEL)) return INITIALIZE_HINT_LATELOAD diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 811064d6d193..b6fb1f27f5a1 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -57,9 +57,7 @@ matching_designs = list() /obj/machinery/autolathe/Destroy() - if(d_disk) // Drops the design disk on the floor when destroyed - d_disk.forceMove(get_turf(src)) - d_disk = null + QDEL_NULL(d_disk) QDEL_NULL(wires) return ..() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5b31770af80c..faccb82395fd 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -42,6 +42,8 @@ var/datum/component/empprotection/emp_component var/internal_light = TRUE //Whether it can light up when an AI views it + ///Proximity monitor associated with this atom, for motion sensitive cameras. + var/datum/proximity_monitor/proximity_monitor /// A copy of the last paper object that was shown to this camera. var/obj/item/paper/last_shown_paper @@ -83,7 +85,6 @@ if (isturf(loc)) myarea = get_area(src) LAZYADD(myarea.cameras, src) - proximity_monitor = new(src, 1) if(mapload && prob(3) && !start_active) toggle_cam() @@ -95,6 +96,14 @@ network -= i network += "[REF(port)][i]" +/obj/machinery/camera/proc/create_prox_monitor() + if(!proximity_monitor) + proximity_monitor = new(src, 1) + +/obj/machinery/camera/proc/set_area_motion(area/A) + area_motion = A + create_prox_monitor() + /obj/machinery/camera/Destroy() if(can_use()) toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index a5f531cfd603..a3e73db90863 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -84,7 +84,7 @@ /obj/machinery/camera/motion/thunderdome/Initialize() . = ..() - proximity_monitor.SetRange(7) + proximity_monitor.set_range(7) /obj/machinery/camera/motion/thunderdome/HasProximity(atom/movable/AM as mob|obj) if (!isliving(AM) || get_area(AM) != get_area(src)) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 6b2bf6859049..8f57ad09203a 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -133,8 +133,11 @@ if(!assembly.proxy_module) assembly.proxy_module = new(assembly) upgrades |= CAMERA_UPGRADE_MOTION + create_prox_monitor() /obj/machinery/camera/proc/removeMotion() if(name == "motion-sensitive security camera") name = "security camera" upgrades &= ~CAMERA_UPGRADE_MOTION + if(!area_motion) + QDEL_NULL(proximity_monitor) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 47b9a845b598..fd876b2987f2 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -49,9 +49,9 @@ track.namecounts[name] = 1 if(ishuman(L)) - track.humans[name] = L + track.humans[name] = WEAKREF(L) else - track.others[name] = L + track.others[name] = WEAKREF(L) var/list/targets = sortList(track.humans) + sortList(track.others) @@ -67,9 +67,9 @@ if(!track.initialized) trackable_mobs() - var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) + var/datum/weakref/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) - ai_actual_track(target) + ai_actual_track(target.resolve()) /mob/living/silicon/ai/proc/ai_actual_track(mob/living/target) if(!istype(target)) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 811e7d5c100a..d014b33010d7 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -8,7 +8,6 @@ icon_keyboard = "med_key" circuit = /obj/item/circuitboard/computer/operating - var/mob/living/carbon/human/patient var/obj/structure/table/optable/table var/obj/machinery/stasis/sbed var/list/advanced_surgeries = list() @@ -103,23 +102,18 @@ surgery["desc"] = initial(S.desc) surgeries += list(surgery) data["surgeries"] = surgeries - data["patient"] = null - if(table) - data["table"] = table - if(!table.check_eligible_patient()) - return data - data["patient"] = list() - patient = table.patient - else - if(sbed) - data["table"] = sbed - if(!ishuman(sbed.occupant) && !ismonkey(sbed.occupant)) - return data - data["patient"] = list() - patient = sbed.occupant - else - data["patient"] = null - return data + + //If there's no patient just hop to it yeah? + if(!table) + data["patient"] = null + return data + + data["table"] = table + if(!table.check_eligible_patient()) + return data + data["patient"] = list() + var/mob/living/carbon/human/patient = table.patient + switch(patient.stat) if(CONSCIOUS) data["patient"]["stat"] = "Conscious" diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index e782bd209c22..49b13bb0c2c9 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -29,10 +29,6 @@ circuit = C C.moveToNullspace() -/obj/machinery/computer/Destroy() - QDEL_NULL(circuit) - return ..() - /obj/machinery/computer/process() if(machine_stat & (NOPOWER|BROKEN)) return 0 diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 23937947d80c..81d2860473c7 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -73,9 +73,9 @@ frequency = new_frequency radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) -/obj/machinery/air_sensor/Initialize() +/obj/machinery/air_sensor/Initialize(mapload) . = ..() - SSair.start_processing_machine(src) + SSair.start_processing_machine(src, mapload) set_frequency(frequency) /obj/machinery/air_sensor/Destroy() diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 951901d2258d..437a19136453 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -225,7 +225,7 @@ can_use_scanner = TRUE else can_use_scanner = FALSE - connected_scanner = null + set_connected_scanner(null) is_viable_occupant = FALSE // Check for a viable occupant in the scanner. @@ -1540,8 +1540,7 @@ test_scanner = locate(/obj/machinery/dna_scannernew, get_step(src, direction)) if(!isnull(test_scanner)) if(test_scanner.is_operational) - connected_scanner = test_scanner - connected_scanner.linked_console = src + set_connected_scanner(test_scanner) return else broken_scanner = test_scanner @@ -1549,8 +1548,7 @@ // Ultimately, if we have a broken scanner, we'll attempt to connect to it as // a fallback case, but the code above will prefer a working scanner if(!isnull(broken_scanner)) - connected_scanner = broken_scanner - connected_scanner.linked_console = src + set_connected_scanner(broken_scanner) /** * Called by connected DNA Scanners when their doors close. @@ -1991,6 +1989,21 @@ tgui_view_state["storageDiskSubMode"] = "mutations" + +/obj/machinery/computer/scan_consolenew/proc/set_connected_scanner(new_scanner) + if(connected_scanner) + UnregisterSignal(connected_scanner, COMSIG_PARENT_QDELETING) + if(connected_scanner.linked_console == src) + connected_scanner.set_linked_console(null) + connected_scanner = new_scanner + if(connected_scanner) + RegisterSignal(connected_scanner, COMSIG_PARENT_QDELETING, .proc/react_to_scanner_del) + connected_scanner.set_linked_console(src) + +/obj/machinery/computer/scan_consolenew/proc/react_to_scanner_del(datum/source) + SIGNAL_HANDLER + set_connected_scanner(null) + #undef INJECTOR_TIMEOUT #undef NUMBER_OF_BUFFERS #undef SCRAMBLE_TIMEOUT diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index dfdc2969d119..f196fc6dc770 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -183,7 +183,7 @@ break if(component_check) P.play_tool_sound(src) - var/obj/machinery/new_machine = new circuit.build_path(loc) //Let this comment be a reminder that literally 100% of the problems with fundamental code have been because we're chained to Whitesands' desecrated, rotting corpse. + var/obj/machinery/new_machine = new circuit.build_path(loc) if(new_machine.circuit) QDEL_NULL(new_machine.circuit) new_machine.circuit = circuit diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 63165a84b823..985a61efe01d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -175,6 +175,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/retro, 17) /obj/machinery/cryopod/Destroy() linked_ship?.spawn_points -= src + linked_ship = null return ..() /obj/machinery/cryopod/LateInitialize() diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index c738256030db..3f62292736da 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -37,7 +37,7 @@ else return ..() -/obj/structure/barricade/CanAllowThrough(atom/movable/mover, turf/target)//So bullets will fly over and stuff. +/obj/structure/barricade/CanAllowThrough(atom/movable/mover, border_dir)//So bullets will fly over and stuff. . = ..() if(locate(/obj/structure/barricade) in get_turf(mover)) return TRUE diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 51e7562c49db..7fd0f3262273 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -146,6 +146,18 @@ return close_machine(target) +//This is only called by the scanner. if you ever want to use this outside of that context you'll need to refactor things a bit +/obj/machinery/dna_scannernew/proc/set_linked_console(new_console) + if(linked_console) + UnregisterSignal(linked_console, COMSIG_PARENT_QDELETING) + linked_console = new_console + if(linked_console) + RegisterSignal(linked_console, COMSIG_PARENT_QDELETING, .proc/react_to_console_del) + +/obj/machinery/dna_scannernew/proc/react_to_console_del(datum/source) + SIGNAL_HANDLER + set_linked_console(null) + //Just for transferring between genetics machines. /obj/item/disk/data diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 98e546ddefac..525811b23ffc 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -393,6 +393,9 @@ /obj/machinery/door/airlock/Destroy() QDEL_NULL(wires) QDEL_NULL(electronics) + if(closeOther) + closeOther.closeOther = null + closeOther = null if (cyclelinkedairlock) if (cyclelinkedairlock.cyclelinkedairlock == src) cyclelinkedairlock.cyclelinkedairlock = null @@ -1242,7 +1245,7 @@ /obj/machinery/door/airlock/open(forced=0) - if(operating || welded || locked || seal) + if(operating || welded || locked || seal || !wires) return FALSE if(!forced) if(!hasPower() || wires.is_cut(WIRE_OPEN)) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index f2e1200564b9..44b7c827daa1 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -159,7 +159,7 @@ . = ..() move_update_air(T) -/obj/machinery/door/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/door/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index fed9d49239e7..c5deb7b29750 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -71,6 +71,7 @@ /obj/machinery/door/firedoor/Destroy() remove_from_areas() + density = FALSE air_update_turf(1) affecting_areas.Cut() return ..() @@ -393,10 +394,16 @@ return 0 // not big enough to matter return start_point.air.return_pressure() < 20 ? -1 : 1 -/obj/machinery/door/firedoor/border_only/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/door/firedoor/border_only/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(!(get_dir(loc, target) == dir)) //Make sure looking at appropriate border - return TRUE + + if(.) + return + + if(border_dir == dir) //Make sure looking at appropriate border + return FALSE + + return TRUE /obj/machinery/door/firedoor/border_only/proc/on_exit(datum/source, atom/movable/leaving, direction) SIGNAL_HANDLER @@ -411,10 +418,9 @@ return COMPONENT_ATOM_BLOCK_EXIT /obj/machinery/door/firedoor/border_only/CanAtmosPass(turf/T) - if(get_dir(loc, T) == dir) - return !density - else + if(!density) return TRUE + return !(dir == get_dir(loc, T)) /obj/machinery/door/firedoor/proc/emergency_pressure_close() SHOULD_NOT_SLEEP(TRUE) @@ -726,7 +732,7 @@ firelock_type = /obj/machinery/door/firedoor/border_only/closed flags_1 = ON_BORDER_1 -/obj/machinery/door/firedoor/border_only/Initialize() +/obj/structure/firelock_frame/border/Initialize() . = ..() var/static/list/loc_connections = list( diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index f4cc13e5eeff..e10f0786489c 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -103,11 +103,12 @@ do_animate("deny") return -/obj/machinery/door/window/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/door/window/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return - if(get_dir(loc, target) == dir) //Make sure looking at appropriate border + + if(border_dir == dir) return FALSE if(istype(mover, /obj/structure/window)) diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm index 28218a366f0b..28c6d3d3ee2a 100644 --- a/code/game/machinery/fat_sucker.dm +++ b/code/game/machinery/fat_sucker.dm @@ -32,6 +32,10 @@ soundloop = new(list(src), FALSE) update_appearance() +/obj/machinery/fat_sucker/Destroy() + QDEL_NULL(soundloop) + return ..() + /obj/machinery/fat_sucker/RefreshParts() ..() var/rating = 0 diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index e68b3e0837f9..4bacfbbb5651 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -28,6 +28,8 @@ light_system = MOVABLE_LIGHT //Used as a flash here. light_range = FLASH_LIGHT_RANGE light_on = FALSE + ///Proximity monitor associated with this atom, needed for proximity checks. + var/datum/proximity_monitor/proximity_monitor /obj/machinery/flasher/Initialize(mapload, ndir = 0, built = 0) . = ..() // ..() is EXTREMELY IMPORTANT, never forget to add it @@ -181,13 +183,13 @@ add_overlay("[base_icon_state]-s") set_anchored(TRUE) power_change() - proximity_monitor.SetRange(range) + proximity_monitor.set_range(range) else to_chat(user, "[src] can now be moved.") cut_overlays() set_anchored(FALSE) power_change() - proximity_monitor.SetRange(0) + proximity_monitor.set_range(0) else return ..() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index e41be5ede09a..98014077d4b0 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -98,6 +98,8 @@ Possible to do for anyone motivated enough: resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags_1 = NODECONSTRUCT_1 on_network = FALSE + ///Proximity monitor associated with this atom, needed for proximity checks. + var/datum/proximity_monitor/proximity_monitor var/proximity_range = 1 /obj/machinery/holopad/tutorial/Initialize(mapload) diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 60825b3e51f6..c7752a8cbfaa 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -43,7 +43,8 @@ update_indicator() /obj/machinery/launchpad/Destroy() - qdel(hud_list[DIAG_LAUNCHPAD_HUD]) + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.remove_from_hud(src) return ..() /obj/machinery/launchpad/examine(mob/user) @@ -232,7 +233,9 @@ src.briefcase = briefcase /obj/machinery/launchpad/briefcase/Destroy() - QDEL_NULL(briefcase) + if(!QDELETED(briefcase)) + qdel(briefcase) + briefcase = null return ..() /obj/machinery/launchpad/briefcase/isAvailable() @@ -257,9 +260,9 @@ /obj/machinery/launchpad/briefcase/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/launchpad_remote)) var/obj/item/launchpad_remote/L = I - if(L.pad == src) //do not attempt to link when already linked + if(L.pad == WEAKREF(src)) //do not attempt to link when already linked return ..() - L.pad = src + L.pad = WEAKREF(src) to_chat(user, "You link [src] to [L].") else return ..() @@ -274,7 +277,8 @@ /obj/item/storage/briefcase/launchpad/Destroy() if(!QDELETED(pad)) - QDEL_NULL(pad) + qdel(pad) + pad = null return ..() /obj/item/storage/briefcase/launchpad/PopulateContents() @@ -296,9 +300,9 @@ /obj/item/storage/briefcase/launchpad/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/launchpad_remote)) var/obj/item/launchpad_remote/L = I - if(L.pad == src.pad) //do not attempt to link when already linked + if(L.pad == WEAKREF(src.pad)) //do not attempt to link when already linked return ..() - L.pad = src.pad + L.pad = WEAKREF(src.pad) to_chat(user, "You link [pad] to [L].") else return ..() @@ -310,11 +314,12 @@ icon_state = "folder" w_class = WEIGHT_CLASS_SMALL var/sending = TRUE - var/obj/machinery/launchpad/briefcase/pad + //A weakref to our linked pad + var/datum/weakref/pad /obj/item/launchpad_remote/Initialize(mapload, pad) //remote spawns linked to the briefcase pad . = ..() - src.pad = pad + src.pad = WEAKREF(pad) /obj/item/launchpad_remote/attack_self(mob/user) . = ..() @@ -334,16 +339,17 @@ /obj/item/launchpad_remote/ui_data(mob/user) var/list/data = list() - data["has_pad"] = pad ? TRUE : FALSE - if(pad) - data["pad_closed"] = pad.closed - if(!pad || pad.closed) + var/obj/machinery/launchpad/briefcase/our_pad = pad.resolve() + data["has_pad"] = our_pad ? TRUE : FALSE + if(our_pad) + data["pad_closed"] = our_pad.closed + if(!our_pad || our_pad.closed) return data - data["pad_name"] = pad.display_name - data["range"] = pad.range - data["x"] = pad.x_offset - data["y"] = pad.y_offset + data["pad_name"] = our_pad.display_name + data["range"] = our_pad.range + data["x"] = our_pad.x_offset + data["y"] = our_pad.y_offset return data /obj/item/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad) @@ -359,19 +365,22 @@ . = ..() if(.) return - + var/obj/machinery/launchpad/briefcase/our_pad = pad.resolve() + if(!our_pad) + pad = null + return TRUE switch(action) if("set_pos") var/new_x = text2num(params["x"]) var/new_y = text2num(params["y"]) - pad.set_offset(new_x, new_y) + our_pad.set_offset(new_x, new_y) . = TRUE if("move_pos") var/plus_x = text2num(params["x"]) var/plus_y = text2num(params["y"]) - pad.set_offset( - x = pad.x_offset + plus_x, - y = pad.y_offset + plus_y + our_pad.set_offset( + x = our_pad.x_offset + plus_x, + y = our_pad.y_offset + plus_y ) . = TRUE if("rename") @@ -379,16 +388,16 @@ var/new_name = params["name"] if(!new_name) return - pad.display_name = new_name + our_pad.display_name = new_name if("remove") . = TRUE - if(usr && alert(usr, "Are you sure?", "Unlink Launchpad", "I'm Sure", "Abort") != "Abort") - pad = null + if(usr && tgui_alert(usr, "Are you sure?", "Unlink Launchpad", list("I'm Sure", "Abort")) != "Abort") + our_pad = null if("launch") sending = TRUE - teleport(usr, pad) + teleport(usr, our_pad) . = TRUE if("pull") sending = FALSE - teleport(usr, pad) + teleport(usr, our_pad) . = TRUE diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 1f97013e1262..a847b44d39a1 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -46,8 +46,10 @@ return ..() /obj/machinery/navbeacon/on_virtual_z_change(new_virtual_z, previous_virtual_z) - LAZYADDASSOC(GLOB.navbeacons, "[new_virtual_z]", src) - LAZYREMOVEASSOC(GLOB.navbeacons, "[previous_virtual_z]", src) + if(previous_virtual_z) + LAZYREMOVEASSOC(GLOB.navbeacons, "[previous_virtual_z]", src) + if(new_virtual_z) + LAZYADDASSOC(GLOB.navbeacons, "[new_virtual_z]", src) ..() // set the transponder codes assoc list from codes_txt @@ -69,8 +71,7 @@ codes[e] = "1" /obj/machinery/navbeacon/proc/glob_lists_deregister() - if (GLOB.navbeacons["[z]"]) - GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. + LAZYREMOVE(GLOB.navbeacons["[virtual_z()]"], src) GLOB.deliverybeacons -= src GLOB.deliverybeacontags -= location GLOB.wayfindingbeacons -= src @@ -78,10 +79,10 @@ /obj/machinery/navbeacon/proc/glob_lists_register(init=FALSE) if(!init) glob_lists_deregister() + if(!codes) + return if(codes["patrol"]) - if(!GLOB.navbeacons["[z]"]) - GLOB.navbeacons["[z]"] = list() - GLOB.navbeacons["[z]"] += src //Register with the patrol list! + LAZYADD(GLOB.navbeacons["[virtual_z()]"], src) if(codes["delivery"]) GLOB.deliverybeacons += src GLOB.deliverybeacontags += location diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index b602624eb7e6..37def4d5a9da 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -83,12 +83,11 @@ icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end return ..() -/obj/machinery/recycler/CanAllowThrough(atom/movable/AM) +/obj/machinery/recycler/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(!anchored) return - var/move_dir = get_dir(loc, AM.loc) - if(move_dir == eat_dir) + if(border_dir == eat_dir) return TRUE /obj/machinery/recycler/proc/on_entered(datum/source, atom/movable/AM) diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm index 93cc18456bc1..8e056d198ea6 100644 --- a/code/game/machinery/roulette_machine.dm +++ b/code/game/machinery/roulette_machine.dm @@ -54,6 +54,11 @@ jackpot_loop = new(list(src), FALSE) wires = new /datum/wires/roulette(src) +/obj/machinery/roulette/Destroy() + QDEL_NULL(jackpot_loop) + QDEL_NULL(wires) + return ..() + /obj/machinery/roulette/obj_break(damage_flag) prize_theft(0.05) . = ..() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index bdb167ee1732..2d735deb1969 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -631,7 +631,7 @@ if(gen_secondary) //using power may cause us to be destroyed gen_secondary.add_load(drain_amount * 0.5) -/obj/machinery/shieldwall/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/shieldwall/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(hardshield == TRUE) if(istype(mover) && (mover.pass_flags & PASSGLASS)) diff --git a/code/game/machinery/shuttle/shuttle_engine.dm b/code/game/machinery/shuttle/shuttle_engine.dm index ad6695c8b812..267c8d102918 100644 --- a/code/game/machinery/shuttle/shuttle_engine.dm +++ b/code/game/machinery/shuttle/shuttle_engine.dm @@ -14,8 +14,6 @@ var/thrust = 0 ///I don't really know what this is but it's used a lot var/thruster_active = FALSE - ///Used to store which ship currently has this engine in their thruster list, for Destroy() reasons - var/obj/docking_port/mobile/parent_shuttle /** * Uses up a specified percentage of the fuel cost, and returns the amount of thrust if successful. @@ -42,6 +40,8 @@ * All functions should return if the parent function returns false. */ /obj/machinery/power/shuttle/engine/proc/update_engine() + if(!(flags_1 & INITIALIZED_1)) + return FALSE thruster_active = TRUE if(panel_open) thruster_active = FALSE @@ -69,13 +69,7 @@ /obj/machinery/power/shuttle/engine/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) . = ..() - port.engine_list |= src - parent_shuttle = port - -/obj/machinery/power/shuttle/engine/Destroy() - if(parent_shuttle) - parent_shuttle.engine_list -= src - return ..() + port.engine_list |= WEAKREF(src) /obj/machinery/power/shuttle/engine/on_construction() . = ..() diff --git a/code/game/machinery/shuttle/shuttle_engine_types.dm b/code/game/machinery/shuttle/shuttle_engine_types.dm index bdb9e44cf8dc..e5e3d812c098 100644 --- a/code/game/machinery/shuttle/shuttle_engine_types.dm +++ b/code/game/machinery/shuttle/shuttle_engine_types.dm @@ -208,8 +208,6 @@ reagent_amount_holder += fuel_reagents[reagent] /obj/machinery/power/shuttle/engine/liquid/burn_engine(percentage = 100) - if(!(INITIALIZED_1 & flags_1)) - CRASH("Attempted to fire an uninitialized liquid engine") . = ..() var/true_percentage = 1 for(var/reagent in fuel_reagents) @@ -217,16 +215,12 @@ return thrust * true_percentage /obj/machinery/power/shuttle/engine/liquid/return_fuel() - if(!(INITIALIZED_1 & flags_1)) - CRASH("Attempted to read the fuel value an uninitialized liquid engine") var/true_percentage = INFINITY for(var/reagent in fuel_reagents) true_percentage = min(reagents?.get_reagent_amount(reagent) / fuel_reagents[reagent], true_percentage) return reagent_amount_holder * true_percentage //Multiplies the total amount needed by the smallest percentage of any reagent in the recipe /obj/machinery/power/shuttle/engine/liquid/return_fuel_cap() - if(!(INITIALIZED_1 & flags_1)) - CRASH("Attempted to read the fuel cap of an uninitialized liquid engine") return reagents.maximum_volume /obj/machinery/power/shuttle/engine/liquid/oil diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm index 1862c3728e2f..706898eac4c6 100644 --- a/code/game/machinery/shuttle/shuttle_heater.dm +++ b/code/game/machinery/shuttle/shuttle_heater.dm @@ -160,17 +160,8 @@ icon_state_open = use_tank ? "heater_open" : "[initial(icon_state)]_open" /obj/machinery/atmospherics/components/unary/shuttle/heater/proc/update_adjacent_engines() - var/engine_turf - switch(dir) - if(NORTH) - engine_turf = get_offset_target_turf(src, 0, -1) - if(SOUTH) - engine_turf = get_offset_target_turf(src, 0, 1) - if(EAST) - engine_turf = get_offset_target_turf(src, -1, 0) - if(WEST) - engine_turf = get_offset_target_turf(src, 1, 0) - if(!engine_turf) + var/engine_turf = get_step(src, dir) + if(!isturf(engine_turf)) return for(var/obj/machinery/power/shuttle/engine/E in engine_turf) E.update_icon_state() diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 20a5b823a230..d11067c290fd 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -46,12 +46,17 @@ return return ..() -/obj/machinery/blackbox_recorder/Destroy() +/obj/machinery/blackbox_recorder/deconstruct(disassembled) if(stored) - stored.forceMove(loc) + stored.forceMove(drop_location()) new /obj/effect/decal/cleanable/oil(loc) return ..() +/obj/machinery/blackbox_recorder/Destroy() + if(stored) + QDEL_NULL(stored) + return ..() + /obj/machinery/blackbox_recorder/update_icon_state() icon_state = "blackbox[stored ? null : "_b"]" return ..() diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 8f49c9758f57..8d449ef1c98b 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -55,7 +55,7 @@ do_transform(AM) -/obj/machinery/transformer/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/transformer/CanAllowThrough(atom/movable/mover, border_dir) . = ..() // Allows items to go through, // to stop them from blocking the conveyor belt. diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index ee5dd4db846d..6a36a0ee01d6 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -443,27 +443,19 @@ output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" return output || "None" -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S) - if(syringes.len= 2) - occupant_message("The syringe is too far away!") - return 0 - for(var/obj/structure/D in S.loc)//Basic level check for structures in the way (Like grilles and windows) - if(!(D.CanPass(S,src.loc))) - occupant_message("Unable to load syringe!") - return 0 - for(var/obj/machinery/door/D in S.loc)//Checks for doors - if(!(D.CanPass(S,src.loc))) - occupant_message("Unable to load syringe!") - return 0 - S.reagents.trans_to(src, S.reagents.total_volume, transfered_by = chassis.occupant) - S.forceMove(src) - syringes += S - occupant_message("Syringe loaded.") - update_equip_info() - return 1 - occupant_message("[src]'s syringe chamber is full!") - return 0 +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S, mob/user) + if(length(syringes) >= max_syringes) + occupant_message("[src]'s syringe chamber is full!") + return FALSE + if(!chassis.Adjacent(S)) + occupant_message("Unable to load syringe!") + return FALSE + S.reagents.trans_to(src, S.reagents.total_volume, transfered_by = user) + S.forceMove(src) + syringes += S + occupant_message("Syringe loaded.") + update_equip_info() + return TRUE /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/analyze_reagents(atom/A) if(get_dist(src,A) >= 4) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 62e8f10455a8..fe1ca47ad4b3 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -171,29 +171,40 @@ for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) E.detach(loc) qdel(E) - if(cell) - qdel(cell) - if(scanmod) - qdel(scanmod) - if(capacitor) - qdel(capacitor) - if(internal_tank) - qdel(internal_tank) if(AI) AI.gib() //No wreck, no AI to recover + AI = null STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) equipment.Cut() - cell = null - scanmod = null - capacitor = null - internal_tank = null + + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.remove_from_hud(src) + + QDEL_NULL(cell) + QDEL_NULL(scanmod) + QDEL_NULL(capacitor) + QDEL_NULL(internal_tank) + QDEL_NULL(spark_system) + QDEL_NULL(smoke_system) + QDEL_NULL(radio) + + QDEL_NULL(eject_action) + QDEL_NULL(internals_action) + QDEL_NULL(cycle_action) + QDEL_NULL(lights_action) + QDEL_NULL(stats_action) + QDEL_NULL(defense_action) + QDEL_NULL(overload_action) + QDEL_NULL(smoke_system) + QDEL_NULL(smoke_action) + QDEL_NULL(zoom_action) + QDEL_NULL(switch_damtype_action) + QDEL_NULL(phasing_action) + QDEL_NULL(strafing_action) + assume_air(cabin_air) - cabin_air = null - qdel(spark_system) - spark_system = null - qdel(smoke_system) - smoke_system = null + QDEL_NULL(cabin_air) GLOB.mechas_list -= src //global mech list return ..() diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 845db56a794f..42c32e04fa98 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -74,8 +74,11 @@ var/mob/living/L = M.pulledby L.reset_pull_offsets(M, TRUE) - if(!check_loc && M.loc != loc) - M.forceMove(loc) + if (CanPass(M, get_dir(loc, M))) + M.Move(loc) + else + if (!check_loc && M.loc != loc) + M.forceMove(loc) M.buckling = null M.set_buckled(src) diff --git a/code/game/objects/effects/anomalies/anomalies_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm index 56e6f2c4c15e..b1318953f4a6 100644 --- a/code/game/objects/effects/anomalies/anomalies_flux.dm +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -35,6 +35,9 @@ /obj/effect/anomaly/flux/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER + //the countdown effect, lmao + if(iseffect(AM)) + return mobShock(AM) tesla_zap(src, zap_range, zap_power, zap_flags) new /obj/effect/particle_effect/sparks(loc) diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm index b5668732f52b..e8bdd61dd3fc 100644 --- a/code/game/objects/effects/anomalies/anomalies_gravity.dm +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -84,14 +84,14 @@ /obj/effect/anomaly/grav/high effectrange = 5 - var/grav_field + var/datum/proximity_monitor/advanced/gravity/grav_field /obj/effect/anomaly/grav/high/Initialize(mapload, new_lifespan) . = ..() INVOKE_ASYNC(src, .proc/setup_grav_field) /obj/effect/anomaly/grav/high/proc/setup_grav_field() - grav_field = make_field(/datum/proximity_monitor/advanced/gravity, list("current_range" = effectrange, "host" = src, "gravity_value" = 2)) + grav_field = new(src, effectrange, TRUE, 2) /obj/effect/anomaly/grav/high/Destroy() QDEL_NULL(grav_field) diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index df26388b9ddb..c47b95e99b49 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -146,11 +146,13 @@ return round(time_left) /obj/effect/countdown/holosign/Destroy(...) - if(attached_to) - var/obj/structure/holosign/H = attached_to - if(H.countdown) - H.countdown = null - return ..() + if(!attached_to) + return ..() + var/obj/structure/holosign/H = attached_to + if(!istype(H) || !H.countdown) + return ..() + H.countdown = null + return ..() /obj/effect/countdown/hourglass name = "hourglass countdown" diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 57c871ed4c00..d00f3eb256a6 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -28,7 +28,6 @@ var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = .proc/on_entered, - COMSIG_ATOM_EXITED = .proc/on_uncrossed, ) AddElement(/datum/element/connect_loc, loc_connections) @@ -80,10 +79,6 @@ reagents.expose_temperature(exposed_temperature) ..() -/obj/effect/decal/cleanable/proc/on_uncrossed(datum/source, atom/movable/O) - SIGNAL_HANDLER - return - //Add "bloodiness" of this blood's type, to the human's shoes //This is on /cleanable because fuck this ancient mess /obj/effect/decal/cleanable/proc/on_entered(datum/source, atom/movable/AM) @@ -94,6 +89,8 @@ /obj/effect/decal/cleanable/wash(clean_types) ..() + if(!(flags_1 & INITIALIZED_1)) + return FALSE qdel(src) return TRUE diff --git a/code/game/objects/effects/decals/cleanable/food.dm b/code/game/objects/effects/decals/cleanable/food.dm index a5769f887160..709d7ca12102 100644 --- a/code/game/objects/effects/decals/cleanable/food.dm +++ b/code/game/objects/effects/decals/cleanable/food.dm @@ -32,9 +32,9 @@ icon_state = "salt_pile" var/safepasses = 3 //how many times can this salt pile be passed before dissipating -/obj/effect/decal/cleanable/food/salt/CanAllowThrough(atom/movable/AM, turf/target) +/obj/effect/decal/cleanable/food/salt/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(is_species(AM, /datum/species/snail)) + if(is_species(mover, /datum/species/snail)) return FALSE /obj/effect/decal/cleanable/food/salt/Bumped(atom/movable/AM) diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 79059b51f351..f283de309cc8 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -52,10 +52,6 @@ bloodiness = BLOOD_AMOUNT_PER_DECAL beauty = -100 -/obj/effect/decal/cleanable/oil/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/fuel/oil, 30) - /obj/effect/decal/cleanable/oil/attackby(obj/item/I, mob/living/user) var/attacked_by_hot_thing = I.get_temperature() if(attacked_by_hot_thing) diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 4bb99fe98b22..173764fdf198 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -46,4 +46,4 @@ GLOBAL_LIST(gang_tags) /obj/effect/decal/cleanable/crayon/gang/Destroy() LAZYREMOVE(GLOB.gang_tags, src) - ..() + return ..() diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 7aea2fcb4c7d..e375cfd1117e 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -9,6 +9,10 @@ . = ..() if(turf_loc_check && (!isturf(loc) || NeverShouldHaveComeHere(loc))) return INITIALIZE_HINT_QDEL + var/static/list/loc_connections = list( + COMSIG_TURF_CHANGED = PROC_REF(handle_turf_change), + ) + AddElement(/datum/element/connect_loc, loc_connections) /obj/effect/decal/blob_act(obj/structure/blob/B) if(B && B.loc == loc) @@ -24,9 +28,12 @@ if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava qdel(src) -/obj/effect/decal/HandleTurfChange(turf/T) - ..() - if(T == loc && NeverShouldHaveComeHere(T)) +/obj/effect/decal/proc/handle_turf_change(turf/source, path, list/new_baseturfs, flags, list/post_change_callbacks) + SIGNAL_HANDLER + post_change_callbacks += CALLBACK(src, PROC_REF(sanity_check_self)) + +/obj/effect/decal/proc/sanity_check_self(turf/changed) + if(changed == loc && NeverShouldHaveComeHere(changed)) qdel(src) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -34,6 +41,7 @@ /obj/effect/turf_decal icon = 'icons/turf/decals.dmi' icon_state = "warningline" + plane = FLOOR_PLANE layer = TURF_DECAL_LAYER var/detail_overlay var/detail_color diff --git a/code/game/objects/effects/effect_system/effect_shield.dm b/code/game/objects/effects/effect_system/effect_shield.dm index 4344fbb26076..00f943aa138e 100644 --- a/code/game/objects/effects/effect_system/effect_shield.dm +++ b/code/game/objects/effects/effect_system/effect_shield.dm @@ -16,7 +16,7 @@ /obj/effect/shield/Destroy() var/turf/location = get_turf(src) location.heat_capacity=old_heat_capacity - ..() + return ..() /obj/effect/shield/singularity_act() return diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm index 98ac62f095a5..f12ee1e2df72 100644 --- a/code/game/objects/effects/effect_system/effects_explosion.dm +++ b/code/game/objects/effects/effect_system/effects_explosion.dm @@ -13,6 +13,8 @@ var/steps_amt = pick(1;25,2;50,3,4;200) for(var/j in 1 to steps_amt) step(src, direct) + if(QDELETED(src)) + return sleep(1) qdel(src) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 7e18077c841b..fea67e7341b4 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -3,7 +3,7 @@ //Effects are mostly temporary visual effects like sparks, smoke, as well as decals, etc... /obj/effect icon = 'icons/effects/effects.dmi' - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | HYPERSPACE_PROOF move_resist = INFINITY obj_flags = 0 vis_flags = VIS_INHERIT_PLANE diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index cc7cf2eb3d0b..6d5f840fcc68 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -96,5 +96,6 @@ return INITIALIZE_HINT_QDEL /obj/effect/abstract/directional_lighting + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | LANDING_PROOF | HYPERSPACE_PROOF mouse_opacity = MOUSE_OPACITY_TRANSPARENT vis_flags = VIS_HIDE diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 5331e0b466db..f5f28c60c80f 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -49,9 +49,11 @@ /obj/effect/overlay/vis mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE - vis_flags = NONE - var/unused = 0 //When detected to be unused it gets set to world.time, after a while it gets removed - var/cache_expiration = 2 MINUTES // overlays which go unused for 2 minutes get cleaned up + vis_flags = VIS_INHERIT_DIR + ///When detected to be unused it gets set to world.time, after a while it gets removed + var/unused = 0 + ///overlays which go unused for this amount of time get cleaned up + var/cache_expiration = 2 MINUTES /obj/effect/overlay/light_visible name = "" diff --git a/code/game/objects/effects/proximity.dm b/code/game/objects/effects/proximity.dm deleted file mode 100644 index 7af165868ecb..000000000000 --- a/code/game/objects/effects/proximity.dm +++ /dev/null @@ -1,129 +0,0 @@ -/datum/proximity_monitor - var/atom/host //the atom we are tracking - var/atom/hasprox_receiver //the atom that will receive HasProximity calls. - var/atom/last_host_loc - var/list/checkers //list of /obj/effect/abstract/proximity_checkers - var/current_range - var/ignore_if_not_on_turf //don't check turfs in range if the host's loc isn't a turf - var/wire = FALSE - -/datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE) - checkers = list() - last_host_loc = _host.loc - ignore_if_not_on_turf = _ignore_if_not_on_turf - current_range = range - SetHost(_host) - -/datum/proximity_monitor/proc/SetHost(atom/H,atom/R) - if(H == host) - return - if(host) - UnregisterSignal(host, COMSIG_MOVABLE_MOVED) - if(R) - hasprox_receiver = R - else if(hasprox_receiver == host) //Default case - hasprox_receiver = H - host = H - RegisterSignal(host, COMSIG_MOVABLE_MOVED, .proc/HandleMove) - last_host_loc = host.loc - SetRange(current_range,TRUE) - -/datum/proximity_monitor/Destroy() - host = null - last_host_loc = null - hasprox_receiver = null - QDEL_LAZYLIST(checkers) - return ..() - -/datum/proximity_monitor/proc/HandleMove() - SIGNAL_HANDLER - - var/atom/_host = host - var/atom/new_host_loc = _host.loc - if(last_host_loc != new_host_loc) - last_host_loc = new_host_loc //hopefully this won't cause GC issues with containers - var/curr_range = current_range - SetRange(curr_range, TRUE) - if(curr_range) - testing("HasProx: [host] -> [host]") - hasprox_receiver.HasProximity(host) //if we are processing, we're guaranteed to be a movable - -/datum/proximity_monitor/proc/SetRange(range, force_rebuild = FALSE) - if(!force_rebuild && range == current_range) - return FALSE - . = TRUE - - current_range = range - - var/list/checkers_local = checkers - var/old_checkers_len = checkers_local.len - - var/atom/_host = host - - var/atom/loc_to_use = ignore_if_not_on_turf ? _host.loc : get_turf(_host) - if(wire && !isturf(loc_to_use)) //it makes assemblies attached on wires work - loc_to_use = get_turf(loc_to_use) - if(!isturf(loc_to_use)) //only check the host's loc - if(range) - var/obj/effect/abstract/proximity_checker/pc - if(old_checkers_len) - pc = checkers_local[old_checkers_len] - --checkers_local.len - QDEL_LAZYLIST(checkers_local) - else - pc = new(loc_to_use, src) - - checkers_local += pc //only check the host's loc - return - - var/list/turfs = RANGE_TURFS(range, loc_to_use) - var/turfs_len = turfs.len - var/old_checkers_used = min(turfs_len, old_checkers_len) - - //reuse what we can - for(var/I in 1 to old_checkers_len) - var/obj/effect/abstract/proximity_checker/pc = checkers_local[I] - if(I > old_checkers_used) - qdel(pc) //delete the leftovers - else if(QDELETED(pc)) - checkers_local[I] = new /obj/effect/abstract/proximity_checker(turfs[I], src) - else - pc.forceMove(turfs[I]) - - if(old_checkers_len < turfs_len) - //create what we lack - for(var/I in (old_checkers_used + 1) to turfs_len) - checkers_local += new /obj/effect/abstract/proximity_checker(turfs[I], src) - else - checkers_local.Cut(old_checkers_used + 1, old_checkers_len) - -/obj/effect/abstract/proximity_checker - invisibility = INVISIBILITY_ABSTRACT - anchored = TRUE - var/datum/proximity_monitor/monitor - -/obj/effect/abstract/proximity_checker/Initialize(mapload, datum/proximity_monitor/_monitor) - . = ..() - if(_monitor) - monitor = _monitor - else - stack_trace("proximity_checker created without host") - return INITIALIZE_HINT_QDEL - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = .proc/on_entered, - COMSIG_ATOM_EXITED =.proc/on_uncrossed - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/effect/abstract/proximity_checker/proc/on_uncrossed(datum/source, atom/movable/gone, direction) - SIGNAL_HANDLER - return - -/obj/effect/abstract/proximity_checker/Destroy() - monitor = null - return ..() - -/obj/effect/abstract/proximity_checker/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - - monitor?.hasprox_receiver?.HasProximity(AM) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 28d9a16e0545..e8f94bc8e3ab 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -20,8 +20,6 @@ stack_trace("Gib list dir length mismatch!") return - var/obj/effect/decal/cleanable/blood/gibs/gib = null - if(sound_to_play && isnum(sound_vol)) playsound(src, sound_to_play, sound_vol, TRUE) @@ -46,14 +44,13 @@ if(gibamounts[i]) for(var/j = 1, j<= gibamounts[i], j++) var/gibType = gibtypes[i] - gib = new gibType(loc, diseases) + var/obj/effect/decal/cleanable/blood/gibs/gib = new gibType(loc, diseases) gib.add_blood_DNA(dna_to_add) var/list/directions = gibdirections[i] - if(isturf(loc)) - if(directions.len) - gib.streak(directions) + if(isturf(loc) && length(directions) && istype(gib)) + gib.streak(directions) return INITIALIZE_HINT_QDEL @@ -153,14 +150,19 @@ return ..() /obj/effect/gibspawner/robot/bodypartless - gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris) - gibamounts = list(1, 1, 1, 1, 1) + gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris) + gibamounts = list(1, 1, 1, 1, 1, 1) /obj/effect/gibspawner/robot/bodypartless/Initialize() if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs) return ..() /obj/effect/gibspawner/generic/crystal gibtypes = list(/obj/effect/decal/cleanable/glass/strange, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core) gibamounts = list(5, 2, 2, 1) + +/obj/effect/gibspawner/generic/crystal/Initialize() + if(!gibdirections.len) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),GLOB.alldirs) + return ..() diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm index cd2a3d7cc134..9ce3411cc93a 100644 --- a/code/game/objects/effects/spawners/structure.dm +++ b/code/game/objects/effects/spawners/structure.dm @@ -4,8 +4,13 @@ Because mapping is already tedious enough this spawner let you spawn generic again. */ +//These NEED to spawn immediately, because windows are important for keeping the space out +INITIALIZE_IMMEDIATE(/obj/effect/spawner/structure) + /obj/effect/spawner/structure name = "map structure spawner" + //Just so stuff doesn't leak out while it's initializing + CanAtmosPass = ATMOS_PASS_NO var/list/spawn_list /obj/effect/spawner/structure/Initialize() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index cc968a6a6b0a..b1134e471d03 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -36,7 +36,7 @@ icon_state = "stickyweb2" . = ..() -/obj/structure/spider/stickyweb/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/spider/stickyweb/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(genetic) return @@ -53,18 +53,19 @@ /obj/structure/spider/stickyweb/genetic //for the spider genes in genetics genetic = TRUE - var/mob/living/allowed_mob + //Reference to the mob that created this + var/allowed_mob_reference /obj/structure/spider/stickyweb/genetic/Initialize(mapload, allowedmob) - allowed_mob = allowedmob + allowed_mob_reference = REF(allowedmob) . = ..() -/obj/structure/spider/stickyweb/genetic/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/spider/stickyweb/genetic/CanAllowThrough(atom/movable/mover, border_dir) . = ..() //this is the normal spider web return aka a spider would make this TRUE - if(mover == allowed_mob) + if(REF(mover) == allowed_mob_reference) return TRUE else if(isliving(mover)) //we change the spider to not be able to go through here - if(mover.pulledby == allowed_mob) + if(REF(mover.pulledby) == allowed_mob_reference) return TRUE if(prob(50)) to_chat(mover, "You get stuck in \the [src] for a moment.") @@ -118,6 +119,7 @@ /obj/structure/spider/spiderling/Destroy() new/obj/item/reagent_containers/food/snacks/spiderling(get_turf(src)) + walk(src, 0) //Clean up reference for pathing . = ..() /obj/structure/spider/spiderling/Initialize() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index df43d20fecdc..e13cca64caf9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -133,8 +133,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb ///A bitfield of bodytypes that the item cannot be worn by. var/restricted_bodytypes = null - ///Who threw the item - var/mob/thrownby = null + ///A weakref to the mob who threw the item + var/datum/weakref/thrownby = null //I cannot verbally describe how much I hate this var ///the icon to indicate this object is being dragged mouse_drag_pointer = MOUSE_ACTIVE_POINTER @@ -683,11 +683,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) if(HAS_TRAIT(src, TRAIT_NODROP)) return - thrownby = thrower + thrownby = WEAKREF(thrower) callback = CALLBACK(src, .proc/after_throw, callback) //replace their callback with our own . = ..(target, range, speed, thrower, spin, diagonals_first, callback, force, gentle, quickstart = quickstart) - /obj/item/proc/after_throw(datum/callback/callback) if (callback) //call the original callback . = callback.Invoke() diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index 9a0f8d069ab8..a6bdb4534b9b 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -46,7 +46,7 @@ RSF /obj/item/rsf/Initialize() . = ..() - to_dispense = cost_by_item[1] + to_dispense ||= cost_by_item[1] /obj/item/rsf/examine(mob/user) . = ..() @@ -152,6 +152,7 @@ RSF dispense_cost = 100 discriptor = "cookie-units" action_type = "Fabricates" + to_dispense = /obj/item/reagent_containers/food/snacks/cookie ///Tracks whether or not the cookiesynth is about to print a poisoned cookie var/toxin = FALSE //This might be better suited to some initialize fuckery, but I don't have a good "poisoned" sprite ///Holds a copy of world.time taken the last time the synth gained a charge. Used with cooldowndelay to track when the next charge should be gained diff --git a/code/game/objects/items/cash.dm b/code/game/objects/items/cash.dm index 53a809d1cd0c..c906da16b606 100644 --- a/code/game/objects/items/cash.dm +++ b/code/game/objects/items/cash.dm @@ -17,7 +17,7 @@ grind_results = list(/datum/reagent/iron = 10) /obj/item/spacecash/Initialize(mapload, amount) - ..() + . = ..() if(amount) value = amount update_appearance() diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 61a174871de5..888bebac8095 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -134,6 +134,10 @@ if(istype(C)) gun = C.gun +/obj/projectile/energy/chrono_beam/Destroy() + gun = null + return ..() + /obj/projectile/energy/chrono_beam/on_hit(atom/target) if(target && gun && isliving(target)) var/obj/structure/chrono_field/F = new(target.loc, target, gun) @@ -152,7 +156,9 @@ gun = loc . = ..() - +/obj/item/ammo_casing/energy/chrono_beam/Destroy() + gun = null + return ..() diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index f0714b01dddd..ce1860a53e87 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -60,7 +60,7 @@ /obj/item/aicard/ui_data() var/list/data = list() - if(AI) + if(!QDELETED(AI)) data["name"] = AI.name data["laws"] = AI.laws.get_law_list(include_zeroth = TRUE, render_html = FALSE) data["health"] = (AI.health + 100) / 2 diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 40a52a23c6c1..18038aadfe05 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -176,5 +176,7 @@ return /obj/effect/dummy/chameleon/Destroy() - master.disrupt(0) + if(master) + master.disrupt(0) + master = null return ..() diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 39d06ab5a8b6..6f489b706af6 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -95,8 +95,9 @@ /obj/structure/projected_forcefield/Destroy() visible_message("[src] flickers and disappears!") playsound(src,'sound/weapons/resonator_blast.ogg',25,TRUE) - generator.current_fields -= src - generator = null + if(generator) + generator.current_fields -= src + generator = null return ..() /obj/structure/projected_forcefield/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -105,4 +106,5 @@ /obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) if(sound_effect) play_attack_sound(damage_amount, damage_type, damage_flag) - generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0) + if(generator) + generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 1b1177e137a7..e9da1f126aab 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -38,6 +38,7 @@ soundloop = new(list(src), FALSE) /obj/item/geiger_counter/Destroy() + QDEL_NULL(soundloop) STOP_PROCESSING(SSobj, src) return ..() @@ -111,15 +112,14 @@ return ..() /obj/item/geiger_counter/proc/update_sound() - var/datum/looping_sound/geiger/loop = soundloop if(!scanning) - loop.stop() + soundloop.stop() return if(!radiation_count) - loop.stop() + soundloop.stop() return - loop.last_radiation = radiation_count - loop.start() + soundloop.last_radiation = radiation_count + soundloop.start() /obj/item/geiger_counter/rad_act(amount) . = ..() diff --git a/code/game/objects/items/devices/polycircuit.dm b/code/game/objects/items/devices/polycircuit.dm index 60027e378a88..be41de2c8411 100644 --- a/code/game/objects/items/devices/polycircuit.dm +++ b/code/game/objects/items/devices/polycircuit.dm @@ -1,5 +1,6 @@ /obj/item/stack/circuit_stack name = "polycircuit aggregate" + singular_name = "polycircuit" desc = "A dense, overdesigned cluster of electronics which attempted to function as a multipurpose circuit electronic. Circuits can be removed from it... if you don't bleed out in the process." icon_state = "circuit_mess" item_state = "rods" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index da1dfe9e5250..1e36f8bd328f 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -659,19 +659,19 @@ GENE SCANNER if (T.slime_mutation[3] == T.slime_mutation[4]) if (T.slime_mutation[2] == T.slime_mutation[1]) to_render += "\nPossible mutation: [T.slime_mutation[3]]\ - \nGenetic destability: [T.mutation_chance/2] % chance of mutation on splitting" + \nGenetic destability: [T.mutation_chance/2] % chance of mutation on splitting" else to_render += "\nPossible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)\ - \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" + \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" else to_render += "\nPossible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]\ - \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" + \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" if (T.cores > 1) to_render += "\nMultiple cores detected" to_render += "\nGrowth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" if(T.effectmod) to_render += "\nCore mutation in progress: [T.effectmod]\ - \nProgress in core mutation: [T.applied] / [(SLIME_EXTRACT_CROSSING_REQUIRED * T.crossbreed_modifier)]" + \nProgress in core mutation: [T.applied] / [(SLIME_EXTRACT_CROSSING_REQUIRED * T.crossbreed_modifier)]" to_chat(user, examine_block(to_render)) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 438b37fe5944..b26ec181525b 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -12,10 +12,16 @@ var/obj/item/tank/tank_one var/obj/item/tank/tank_two var/obj/item/assembly/attached_device - var/mob/attacher = null + var/datum/weakref/attacher_ref = null var/valve_open = FALSE var/toggle = TRUE +/obj/item/transfer_valve/Destroy() + QDEL_NULL(tank_one) + QDEL_NULL(tank_two) + QDEL_NULL(attached_device) + return ..() + /obj/item/transfer_valve/IsAssemblyHolder() return TRUE @@ -54,7 +60,7 @@ A.holder = src A.toggle_secure() //this calls update_appearance(), which calls update_appearance() on the holder (i.e. the bomb). log_bomber(user, "attached a [item.name] to a ttv -", src, null, FALSE) - attacher = user + attacher_ref = WEAKREF(user) return //These keep attached devices synced up, for example a TTV with a mouse trap being found in a bag so it's triggered, or moving the TTV with an infrared beam sensor to update the beam's direction. @@ -157,6 +163,7 @@ var/admin_attachment_message var/attachment_message if(attachment) + var/mob/attacher = attacher_ref.resolve() admin_attachment_message = " with [attachment] attached by [attacher ? ADMIN_LOOKUPFLW(attacher) : "Unknown"]" attachment_message = " with [attachment] attached by [attacher ? key_name_admin(attacher) : "Unknown"]" diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index 631466b3240a..c81cbd02bf2b 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -175,8 +175,10 @@ diceroll(user) /obj/item/dice/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - diceroll(thrownby) - . = ..() + var/mob/thrown_by = thrownby?.resolve() + if(thrown_by) + diceroll(thrown_by) + return ..() /obj/item/dice/proc/diceroll(mob/user) result = roll(sides) diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index 6e4687d72c32..0c7203f0a5c0 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -70,7 +70,8 @@ ///////////////////////////////// /obj/effect/payload_spawner/Initialize(mapload, type, numspawned) ..() - spawn_payload(type, numspawned) + if(type && isnum(numspawned)) + spawn_payload(type, numspawned) return INITIALIZE_HINT_QDEL /obj/effect/payload_spawner/proc/spawn_payload(type, numspawned) diff --git a/code/game/objects/items/grenades/festive.dm b/code/game/objects/items/grenades/festive.dm index bffc31db28fd..7bf5fd65bf08 100644 --- a/code/game/objects/items/grenades/festive.dm +++ b/code/game/objects/items/grenades/festive.dm @@ -47,7 +47,7 @@ /obj/item/sparkler/Destroy() STOP_PROCESSING(SSobj, src) - ..() + return ..() /obj/item/sparkler/ignition_effect(atom/A, mob/user) . = "[user] gracefully lights [A] with [src]." diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 87dd83ffbcf2..490c5c0aebaa 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -28,10 +28,9 @@ AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES) /obj/item/grenade/c4/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) target = null - ..() + return ..() /obj/item/grenade/c4/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_SCREWDRIVER) diff --git a/code/game/objects/items/implants/implant_track.dm b/code/game/objects/items/implants/implant_track.dm index d0455905eb9b..a83d69c53145 100644 --- a/code/game/objects/items/implants/implant_track.dm +++ b/code/game/objects/items/implants/implant_track.dm @@ -2,8 +2,12 @@ name = "tracking implant" desc = "Track with this." activated = FALSE - var/lifespan_postmortem = 6000 //for how many deciseconds after user death will the implant work? - var/allow_teleport = TRUE //will people implanted with this act as teleporter beacons? + ///for how many deciseconds after user death will the implant work? + var/lifespan_postmortem = 6000 + ///will people implanted with this act as teleporter beacons? + var/allow_teleport = TRUE + ///The id of the timer that's qdeleting us + var/timerid /obj/item/implant/tracking/c38 name = "TRAC implant" @@ -13,7 +17,11 @@ /obj/item/implant/tracking/c38/Initialize() . = ..() - QDEL_IN(src, lifespan) + timerid = QDEL_IN(src, lifespan) + +/obj/item/implant/tracking/c38/Destroy() + deltimer(timerid) + return ..() /obj/item/implant/tracking/New() ..() diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 0775e43d93f7..b500eadca2f2 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -239,6 +239,10 @@ spark_system.set_up(5, 0, src) spark_system.attach(src) +/obj/item/melee/transforming/energy/blade/Destroy() + QDEL_NULL(spark_system) + return ..() + /obj/item/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text) return diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 16404d1d13bd..153c3a75564d 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -254,7 +254,7 @@ if(!iscarbon(user)) target.LAssailant = null else - target.LAssailant = user + target.LAssailant = WEAKREF(user) cooldown_check = world.time + cooldown else var/wait_desc = get_wait_description() diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 3f8d0210442d..f0cb02fa8e02 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -97,8 +97,8 @@ var/refill_rate = 1 //Rate per process() tick mop refills itself var/refill_reagent = /datum/reagent/water //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING -/obj/item/mop/advanced/New() - ..() +/obj/item/mop/advanced/Initialize() + . = ..() START_PROCESSING(SSobj, src) /obj/item/mop/advanced/attack_self(mob/user) @@ -111,7 +111,6 @@ playsound(user, 'sound/machines/click.ogg', 30, TRUE) /obj/item/mop/advanced/process() - if(reagents.total_volume < mopcap) reagents.add_reagent(refill_reagent, refill_rate) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 47a4120061b4..09e676980262 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -550,7 +550,7 @@ var/energy_recharge_cyborg_drain_coefficient = 0.4 var/cyborg_cell_critical_percentage = 0.05 var/mob/living/silicon/robot/host = null - var/datum/proximity_monitor/advanced/dampening_field + var/datum/proximity_monitor/advanced/peaceborg_dampener/dampening_field var/projectile_damage_coefficient = 0.5 var/projectile_damage_tick_ecost_coefficient = 2 //Lasers get half their damage chopped off, drains 50 power/tick. Note that fields are processed 5 times per second. var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile. @@ -600,10 +600,9 @@ /obj/item/borg/projectile_dampen/proc/activate_field() if(istype(dampening_field)) QDEL_NULL(dampening_field) - dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) var/mob/living/silicon/robot/owner = get_host() - if(owner) - owner.module.allow_riding = FALSE + dampening_field = new(owner, field_radius, TRUE, src) + owner?.module.allow_riding = FALSE active = TRUE /obj/item/borg/projectile_dampen/proc/deactivate_field() @@ -644,11 +643,6 @@ /obj/item/borg/projectile_dampen/process() process_recharge() process_usage() - update_location() - -/obj/item/borg/projectile_dampen/proc/update_location() - if(dampening_field) - dampening_field.HandleMove() /obj/item/borg/projectile_dampen/proc/process_usage() var/usage = 0 diff --git a/code/game/objects/items/stacks/license_plates.dm b/code/game/objects/items/stacks/license_plates.dm index 1a5cb1b05eeb..acf831cff409 100644 --- a/code/game/objects/items/stacks/license_plates.dm +++ b/code/game/objects/items/stacks/license_plates.dm @@ -1,5 +1,6 @@ /obj/item/stack/license_plates - name = "invalid plate" + name = "invalid plates" + singular_name = "invalid plate" desc = "someone fucked up" icon = 'icons/obj/machines/prison.dmi' icon_state = "empty_plate" @@ -7,14 +8,16 @@ max_amount = 50 /obj/item/stack/license_plates/empty - name = "empty license plate" + name = "empty license plates" + singular_name = "empty licence plate" desc = "Instead of a license plate number, this could contain a quote like \"Live laugh love\"." /obj/item/stack/license_plates/empty/fifty amount = 50 /obj/item/stack/license_plates/filled - name = "license plate" + name = "license plates" + singular_name = "license plate" desc = "Prison labor paying off." icon_state = "filled_plate_1_1" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index f72e588d8e04..a811ae46d822 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -752,13 +752,15 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra amount = 50 /obj/item/stack/sheet/capitalisium - name = "capitalisium sheet" + name = "capitalisium sheets" + singular_name = "capitalisium sheet" desc = "A source of raw capitalism, capable of bringing forth the prophesized Capitalist Golem." icon_state = "sheet-capitalisium" merge_type = /obj/item/stack/sheet/capitalisium /obj/item/stack/sheet/stalinium - name = "stalinium sheet" + name = "stalinium sheets" + singular_name = "stalinium sheet" desc = "A source of raw socialism, capable of bringing forth the prophesized Soviet Golem." icon_state = "sheet-stalinium" merge_type = /obj/item/stack/sheet/stalinium diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 7890bca02d1e..79ec280138a2 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -5,7 +5,8 @@ */ /obj/item/stack/wrapping_paper - name = "wrapping paper" + name = "wrapping paper roll" + singular_name = "wrapping sheet" desc = "Wrap packages with this festive paper to make gifts." icon = 'icons/obj/stack_objects.dmi' icon_state = "wrap_paper" diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 2aefd383342e..58f10b2ccd8d 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -27,6 +27,8 @@ if(!spawn_type) return var/datum/component/storage/STR = GetComponent(/datum/component/storage) + if(!spawn_type) + return for(var/i = 1 to STR.max_items) new spawn_type(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index d9f3dd296a9b..e494392ee911 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -322,8 +322,9 @@ var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum) if(ishuman(hit_atom) && !caught && prob(throw_stun_chance))//if they are a carbon and they didn't catch it baton_effect(hit_atom) - if(thrownby && !caught) - addtimer(CALLBACK(src, /atom/movable.proc/throw_at, thrownby, throw_range+2, throw_speed, null, TRUE), 1) + var/mob/thrown_by = thrownby?.resolve() + if(thrown_by && !caught) + addtimer(CALLBACK(src, /atom/movable.proc/throw_at, thrown_by, throw_range+2, throw_speed, null, TRUE), 1) else return ..() diff --git a/code/game/objects/items/wayfinding.dm b/code/game/objects/items/wayfinding.dm index b1e6523ee926..0fc80de2759d 100644 --- a/code/game/objects/items/wayfinding.dm +++ b/code/game/objects/items/wayfinding.dm @@ -126,7 +126,6 @@ icon_state = "pinpointer_way" resistance_flags = NONE var/owner = null - var/list/beacons = list() var/roundstart = FALSE /obj/item/pinpointer/wayfinding/attack_self(mob/living/user) @@ -138,8 +137,7 @@ if (!owner) owner = user.real_name - if(beacons.len) - beacons.Cut() + var/list/beacons = list() for(var/obj/machinery/navbeacon/B in GLOB.wayfindingbeacons) beacons[B.codes["wayfinding"]] = B diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ff33571efc42..d2d1325e435b 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -15,7 +15,7 @@ ///Damage under this value will be completely ignored var/damage_deflection = 0 - var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF + var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF | LANDING_PROOF | HYPERSPACE_PROOF var/acid_level = 0 //how much acid is on that obj diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 563e48e27f49..f59e29dd3b9a 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -30,11 +30,10 @@ /obj/structure/AIcore/Destroy() if(circuit) - qdel(circuit) - circuit = null + QDEL_NULL(circuit) if(brain) - qdel(brain) - brain = null + QDEL_NULL(brain) + QDEL_NULL(laws) return ..() /obj/structure/AIcore/latejoin_inactive diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 0cda61d847ef..3c7d1ac0f01c 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -193,10 +193,19 @@ anchored = TRUE /obj/structure/bed/dogbed/proc/update_owner(mob/living/M) + if(owner) + UnregisterSignal(owner, COMSIG_PARENT_QDELETING) owner = M + RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(owner_deleted)) name = "[M]'s bed" desc = "[M]'s bed! Looks comfy." +/obj/structure/bed/dogbed/proc/owner_deleted() + UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + owner = null + name = initial(name) + desc = initial(desc) + /obj/structure/bed/dogbed/buckle_mob(mob/living/M, force, check_loc) . = ..() update_owner(M) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index f959d911bd33..bc1155ec34aa 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -266,8 +266,8 @@ LINEN BINS dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET /obj/item/bedsheet/double/Initialize() - ..() - desc += " This one is double." + . = ..() + desc += " This one is double-sized." /obj/item/bedsheet/double/blue icon_state = "double_sheetblue" diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 25ad21d25d20..788fc28a51c6 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -42,15 +42,22 @@ /obj/structure/closet/Initialize(mapload) - if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents - addtimer(CALLBACK(src, .proc/take_contents), 0) . = ..() + + // if closed, any item at the crate's loc is put in the contents + if (mapload && !opened) + . = INITIALIZE_HINT_LATELOAD + update_appearance() if(populate) PopulateContents() RegisterSignal(src, COMSIG_ATOM_CANREACH, .proc/canreach_react) +/obj/structure/closet/LateInitialize() + take_contents(src) + return ..() + /obj/structure/closet/proc/canreach_react(datum/source, list/next) return COMPONENT_BLOCK_REACH //closed block, open have nothing inside. @@ -111,7 +118,7 @@ if(HAS_TRAIT(L, TRAIT_SKITTISH)) . += "Ctrl-Shift-click [src] to jump inside." -/obj/structure/closet/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/closet/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(wall_mounted) return TRUE @@ -142,6 +149,8 @@ return TRUE /obj/structure/closet/dump_contents() + if(!isturf(loc)) + return var/atom/L = drop_location() for(var/atom/movable/AM as anything in src) AM.forceMove(L) @@ -150,8 +159,8 @@ if(throwing) throwing.finalize(FALSE) -/obj/structure/closet/proc/take_contents() - var/atom/L = drop_location() +/obj/structure/closet/proc/take_contents(atom/movable/holder) + var/atom/L = holder.drop_location() for(var/atom/movable/AM in L) if(istype(AM, /obj/effect)) //WS edit, closets and crates do not eat your lamp continue @@ -218,7 +227,7 @@ /obj/structure/closet/proc/close(mob/living/user) if(!opened || !can_close(user)) return FALSE - take_contents() + take_contents(src) playsound(loc, close_sound, close_sound_volume, TRUE, -3) climb_time = initial(climb_time) opened = FALSE diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index c2af6ad410c3..0e7ab6e0a526 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -4,7 +4,7 @@ /obj/structure/closet/secure_closet/freezer/Destroy() recursive_organ_check(src) - ..() + return ..() /obj/structure/closet/secure_closet/freezer/Initialize() . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 252aff8d4d5a..70b61cfa8d08 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -25,7 +25,7 @@ opened = TRUE update_appearance() -/obj/structure/closet/crate/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/closet/crate/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(!istype(mover, /obj/structure/closet)) var/obj/structure/closet/crate/locatedcrate = locate(/obj/structure/closet/crate) in get_turf(mover) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 4431bd1307c2..4884a757453e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -378,8 +378,6 @@ var/sale_price = 20 ///The Account which will receive payment for purchases. Set by the first ID to swipe the tray. var/datum/bank_account/payments_acc = null - ///We're using the same trick as paper does in order to cache the image, and only load the UI when messed with. - var/list/viewing_ui = list() /obj/structure/displaycase/forsale/update_appearance() //remind me to fix my shitcode later var/icon/I @@ -403,7 +401,6 @@ if(!ui) ui = new(user, src, "Vendatray", name) ui.set_autoupdate(FALSE) - viewing_ui[user] = ui ui.open() /obj/structure/displaycase/forsale/ui_data(mob/user) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 62ee78c4f885..b25d84db6a38 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -68,7 +68,7 @@ yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making yolk.update_body() yolk.gib() - qdel(egg) + QDEL_NULL(egg) return ..() @@ -92,6 +92,11 @@ var/datum/team/ashwalkers/team var/obj/structure/ash_walker_eggshell/eggshell + +/obj/effect/mob_spawn/human/ash_walker/Destroy() + eggshell = null + return ..() + /obj/effect/mob_spawn/human/ash_walker/allow_spawn(mob/user) if(!(user.key in team.players_spawned))//one per person unless you get a bonus spawn return TRUE @@ -111,7 +116,7 @@ ADD_TRAIT(H, TRAIT_PRIMITIVE, ROUNDSTART_TRAIT) team.players_spawned += (new_spawn.key) eggshell.egg = null - qdel(eggshell) + QDEL_NULL(eggshell) /obj/effect/mob_spawn/human/ash_walker/Initialize(mapload, datum/team/ashwalkers/ashteam) . = ..() @@ -397,7 +402,7 @@ /obj/effect/mob_spawn/human/hotel_staff/Destroy() new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) - ..() + return ..() /obj/effect/mob_spawn/human/demonic_friend name = "Essence of friendship" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 52b19a23eada..7a8aec8a97f2 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -297,7 +297,7 @@ qdel(src) return TRUE -/obj/structure/girder/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/girder/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if((mover.pass_flags & PASSGRILLE) || istype(mover, /obj/projectile)) return prob(girderpasschance) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 103e29bb2b1a..56f50eb1768e 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -126,7 +126,7 @@ if(!shock(user, 70)) take_damage(20, BRUTE, "melee", 1) -/obj/structure/grille/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/grille/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(!. && istype(mover, /obj/projectile)) return prob(30) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 5ecbd70110d8..f85d57278cf9 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -85,7 +85,7 @@ max_integrity = 20 var/allow_walk = TRUE //can we pass through it on walk intent -/obj/structure/holosign/barrier/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/holosign/barrier/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return @@ -104,7 +104,7 @@ countdown_color = "#FCFF00" lifespan = 2 MINUTES -/obj/structure/holosign/barrier/wetsign/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/holosign/barrier/wetsign/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(iscarbon(mover)) var/mob/living/carbon/C = mover @@ -164,7 +164,7 @@ . = ..() . += "The biometric scanners are [force_allaccess ? "off" : "on"]." -/obj/structure/holosign/barrier/medical/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/holosign/barrier/medical/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(force_allaccess) return TRUE @@ -193,7 +193,7 @@ return TRUE /obj/structure/holosign/barrier/medical/attack_hand(mob/living/user) - if(CanPass(user) && user.a_intent == INTENT_HELP) + if(user.a_intent == INTENT_HELP && CanPass(user, get_dir(src, user))) force_allaccess = !force_allaccess to_chat(user, "You [force_allaccess ? "deactivate" : "activate"] the biometric scanners.") //warning spans because you can make the station sick! else diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index 9b13275088c6..9dda5181c071 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -230,7 +230,7 @@ /obj/item/gun_control/Destroy() turret = null - ..() + return ..() /obj/item/gun_control/CanItemAutoclick() return TRUE diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index bf7c919215d1..3cd67b47d74e 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -57,7 +57,7 @@ return return TryToSwitchState(user) -/obj/structure/mineral_door/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/mineral_door/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(istype(mover, /obj/effect/beam)) return !opacity diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 8b50469eb8c0..2e8c7508d594 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -378,7 +378,7 @@ GLOBAL_LIST_EMPTY(crematoriums) icon_state = "morguet" pass_flags_self = PASSTABLE -/obj/structure/tray/m_tray/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/tray/m_tray/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 2f385f65a161..4c7625b5dbcb 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -69,31 +69,33 @@ return CanAStarPass(ID, to_dir, M.pulling) return TRUE //diseases, stings, etc can pass -/obj/structure/plasticflaps/CanAllowThrough(atom/movable/A, turf/T) + +/obj/structure/plasticflaps/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(istype(A) && (A.pass_flags & PASSGLASS)) + if(istype(mover) && (mover.pass_flags & PASSGLASS)) return prob(60) - var/obj/structure/bed/B = A - if(istype(A, /obj/structure/bed) && (B.has_buckled_mobs() || B.density))//if it's a bed/chair and is dense or someone is buckled, it will not pass - return FALSE + if(istype(mover, /obj/structure/bed)) + var/obj/structure/bed/bed_mover = mover + if(bed_mover.density || bed_mover.has_buckled_mobs())//if it's a bed/chair and is dense or someone is buckled, it will not pass + return FALSE - if(istype(A, /obj/structure/closet/cardboard)) - var/obj/structure/closet/cardboard/C = A - if(C.move_delay) + else if(istype(mover, /obj/structure/closet/cardboard)) + var/obj/structure/closet/cardboard/cardboard_mover = mover + if(cardboard_mover.move_delay) return FALSE - if(ismecha(A)) + else if(ismecha(mover)) return FALSE - else if(isliving(A)) // You Shall Not Pass! - var/mob/living/M = A - if(isbot(A)) //Bots understand the secrets + else if(isliving(mover)) // You Shall Not Pass! + var/mob/living/living_mover = mover + if(isbot(mover)) //Bots understand the secrets return TRUE - if(M.buckled && istype(M.buckled, /mob/living/simple_animal/bot/mulebot)) // mulebot passenger gets a free pass. + if(living_mover.buckled && istype(living_mover.buckled, /mob/living/simple_animal/bot/mulebot)) // mulebot passenger gets a free pass. return TRUE - if(M.body_position == STANDING_UP && !M.ventcrawler && M.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass. + if(living_mover.body_position == STANDING_UP && !living_mover.ventcrawler && living_mover.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass. return FALSE /obj/structure/plasticflaps/deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 61b07aadb090..6147308cf62e 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -82,11 +82,10 @@ to_chat(user, "You [anchored ? "fasten the railing to":"unfasten the railing from"] the floor.") return TRUE -/obj/structure/railing/CanPass(atom/movable/mover, turf/target) +/obj/structure/railing/CanPass(atom/movable/mover, border_dir) . = ..() - if(get_dir(loc, target) & dir) - var/checking = FLYING | FLOATING - return . || mover.throwing || mover.movement_type & checking + if(border_dir & dir) + return . || mover.throwing || mover.movement_type & (FLYING | FLOATING) return TRUE /obj/structure/railing/proc/on_exit(datum/source, atom/movable/leaving, direction) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 0d540477684f..3bf44bdfc0d8 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -98,7 +98,7 @@ /obj/structure/table/attack_tk() return FALSE -/obj/structure/table/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/table/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return @@ -312,6 +312,9 @@ /obj/structure/table/rolling/Moved(atom/OldLoc, Dir) . = ..() + //Nullspaced + if(!loc) + return for(var/mob/M in OldLoc.contents)//Kidnap everyone on top M.forceMove(loc) for(var/x in attached_items) @@ -585,7 +588,7 @@ smoothing_flags = NONE smoothing_groups = null canSmoothWith = null - can_buckle = 1 + can_buckle = TRUE buckle_lying = 90 //I don't see why you wouldn't be lying down while buckled to it buckle_requires_restraints = FALSE can_flip = FALSE @@ -614,10 +617,21 @@ /obj/structure/table/optable/proc/get_patient() var/mob/living/carbon/M = locate(/mob/living/carbon) in loc if(M) - if(M.resting) - patient = M + if(M.resting || M.buckled == src) + set_patient(M) else - patient = null + set_patient(null) + +/obj/structure/table/optable/proc/set_patient(new_patient) + if(patient) + UnregisterSignal(patient, COMSIG_PARENT_QDELETING) + patient = new_patient + if(patient) + RegisterSignal(patient, COMSIG_PARENT_QDELETING, .proc/patient_deleted) + +/obj/structure/table/optable/proc/patient_deleted(datum/source) + SIGNAL_HANDLER + set_patient(null) /obj/structure/table/optable/proc/check_eligible_patient() get_patient() @@ -645,7 +659,7 @@ . = ..() . += "It's held together by a couple of bolts." -/obj/structure/rack/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/rack/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 6e0d99ddec33..fefcc0e47b95 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -114,6 +114,12 @@ time_between_triggers = 10 flare_message = "[src] snaps shut!" +/obj/structure/trap/stun/hunter/Destroy() + if(!QDELETED(stored_item)) + qdel(stored_item) + stored_item = null + return ..() + /obj/structure/trap/stun/hunter/on_entered(datum/source, atom/movable/AM) if(isliving(AM)) var/mob/living/L = AM @@ -124,6 +130,12 @@ /obj/structure/trap/stun/hunter/flare() ..() + var/turf/our_turf = get_turf(src) + if(!our_turf) + return + if(!stored_item) + qdel(src) + return stored_item.forceMove(get_turf(src)) forceMove(stored_item) if(caught) @@ -167,7 +179,9 @@ forceMove(stored_trap)//moves item into trap /obj/item/bountytrap/Destroy() - qdel(stored_trap) + if(!QDELETED(stored_trap)) + qdel(stored_trap) + stored_trap = null QDEL_NULL(radio) QDEL_NULL(spark_system) . = ..() diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 490752373295..200aaf35700d 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -57,9 +57,10 @@ icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]" return ..() -/obj/structure/windoor_assembly/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/windoor_assembly/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(get_dir(loc, target) == dir) //Make sure looking at appropriate border + + if(border_dir == dir) return if(istype(mover, /obj/structure/window)) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 3b43831f2751..92a72b7261be 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -98,7 +98,7 @@ if(current_size >= STAGE_FIVE) deconstruct(FALSE) -/obj/structure/window/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/window/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return @@ -106,7 +106,7 @@ if(fulltile) return FALSE - if(get_dir(loc, target) == dir) + if(border_dir == dir) return FALSE if(istype(mover, /obj/structure/window)) @@ -238,18 +238,24 @@ /obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored) return check_state(checked_state) && check_anchored(checked_anchored) + /obj/structure/window/mech_melee_attack(obj/mecha/M) if(!can_be_reached()) return ..() /obj/structure/window/proc/can_be_reached(mob/user) - if(!fulltile) - if(get_dir(user,src) & dir) - for(var/obj/O in loc) - if(!O.CanPass(user, user.loc, 1)) - return 0 - return 1 + if(fulltile) + return TRUE + var/checking_dir = get_dir(user, src) + if(!(checking_dir & dir)) + return TRUE // Only windows on the other side may be blocked by other things. + checking_dir = REVERSE_DIR(checking_dir) + for(var/obj/blocker in loc) + if(!blocker.CanPass(user, checking_dir)) + return FALSE + return TRUE + /obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) . = ..() diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 885128f2caf0..a8567072f56b 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -84,6 +84,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/old_lighting_corner_SW = lighting_corner_SW var/old_lighting_corner_NW = lighting_corner_NW var/old_directional_opacity = directional_opacity + var/old_dynamic_lumcount = dynamic_lumcount + var/old_opacity = opacity var/old_exl = explosion_level var/old_exi = explosion_id @@ -134,6 +136,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( lighting_corner_SW = old_lighting_corner_SW lighting_corner_NW = old_lighting_corner_NW + dynamic_lumcount = old_dynamic_lumcount + if(SSlighting.initialized) lighting_object = old_lighting_object @@ -151,8 +155,11 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( for(var/turf/open/space/S in RANGE_TURFS(1, W)) //RANGE_TURFS is in code\__HELPERS\game.dm S.check_starlight(W) - // Smoothing is deferred if CHANGETURF_DEFER_BATCH is set. - if(!(flags & CHANGETURF_DEFER_BATCH)) + if(old_opacity != opacity && SSticker) + GLOB.cameranet.bareMajorChunkChange(src) + + // Smoothing is deferred if CHANGETURF_DEFER_BATCH is set, or we're uninitialized + if(!(flags & CHANGETURF_DEFER_BATCH) && (flags_1 & INITIALIZED_1)) QUEUE_SMOOTH_NEIGHBORS(W) QUEUE_SMOOTH(W) @@ -170,7 +177,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/turf_fire_ref if(turf_fire) if(isgroundlessturf(newTurf)) - qdel(turf_fire) + QDEL_NULL(turf_fire) else turf_fire_ref = turf_fire newTurf.turf_fire = turf_fire_ref @@ -179,14 +186,15 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( QDEL_NULL(stashed_air) else if(turf_fire) - qdel(turf_fire) - if(ispath(path,/turf/closed)) - update_air_ref(-1) - . = ..() - else + QDEL_NULL(turf_fire) + if(ispath(path, /turf/open)) . = ..() if(!istype(air,/datum/gas_mixture)) Initalize_Atmos(0) + else + update_air_ref(-1) + . = ..() + // Take off the top layer turf and replace it with the next baseturf down /turf/proc/ScrapeAway(amount=1, flags) @@ -318,7 +326,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( for(var/obj/machinery/door/firedoor/FD in T) FD.CalculateAffectingAreas() - HandleTurfChange(src) /turf/open/AfterChange(flags) ..() diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 96c90e4a3d64..879e13192a01 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -17,7 +17,7 @@ AddComponent(/datum/component/chasm, below()) /// Lets people walk into chasms. -/turf/open/chasm/CanAllowThrough(atom/movable/AM, turf/target) +/turf/open/chasm/CanAllowThrough(atom/movable/mover, border_dir) . = ..() return TRUE diff --git a/code/game/turfs/open/floor/catwalk_plating.dm b/code/game/turfs/open/floor/catwalk_plating.dm index b14b9f8f52c1..f4b1f46a96ff 100644 --- a/code/game/turfs/open/floor/catwalk_plating.dm +++ b/code/game/turfs/open/floor/catwalk_plating.dm @@ -13,9 +13,9 @@ layer = CATWALK_LAYER baseturfs = /turf/open/floor/plating footstep = FOOTSTEP_CATWALK - barefootstep = FOOTSTEP_CATWALK - clawfootstep = FOOTSTEP_CATWALK - heavyfootstep = FOOTSTEP_CATWALK + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/covered = TRUE /turf/open/floor/plating/catwalk_floor/Initialize(mapload, inherited_virtual_z) diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 5fbc7cc40622..306988f0d42f 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -153,6 +153,9 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr /turf/open/openspace/icemoon/Initialize(mapload, inherited_virtual_z) . = ..() var/turf/T = below() + //I wonder if I should error here + if(!T) + return if(T.flags_1 & NO_RUINS_1) ChangeTurf(replacement_turf, null, CHANGETURF_IGNORE_AIR) return diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm index 6aa9558720cd..dc1c9cf282d1 100644 --- a/code/game/turfs/open/space/transit.dm +++ b/code/game/turfs/open/space/transit.dm @@ -32,16 +32,18 @@ AM.throw_atom_into_space() /atom/proc/throw_atom_into_space() - if(istype(src, /obj/docking_port)) - return - if(iseffect(src)) - return - if(isliving(src)) - var/mob/living/poor_soul = src // This may not seem like much, but if you toss someone out - poor_soul.apply_damage_type(25, BRUTE) // and they go through like four tiles, they're goners + if(flags_1 & INITIALIZED_1) return qdel(src) +/obj/throw_atom_into_space() + if(resistance_flags & HYPERSPACE_PROOF) + return + return ..() + +/mob/living/throw_atom_into_space() + apply_damage_type(25, BRUTE) // This may not seem like much, but if you toss someone out and they go through like four tiles, they're goners + /turf/open/space/transit/CanBuildHere() return SSshuttle.is_in_shuttle_bounds(src) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index a440cd951905..e2fb89b9cb3b 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -118,8 +118,6 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) if (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) QUEUE_SMOOTH(src) - visibilityChanged() - for(var/atom/movable/content as anything in src) Entered(content, null) @@ -190,7 +188,6 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) for(var/A in B.contents) qdel(A) return - visibilityChanged() QDEL_LIST(blueprint_data) flags_1 &= ~INITIALIZED_1 requires_activation = FALSE @@ -234,15 +231,14 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) if(density) return TRUE - for(var/atom/movable/content as anything in contents) + for(var/atom/movable/movable_content as anything in contents) // We don't want to block ourselves or consider any ignored atoms. - if((content == source_atom) || (content in ignore_atoms)) + if((movable_content == source_atom) || (movable_content in ignore_atoms)) continue - // If the thing is dense AND we're including mobs or the thing isn't a mob AND if there's a source atom and // it cannot pass through the thing on the turf, we consider the turf blocked. - if(content.density && (!exclude_mobs || !ismob(content))) - if(source_atom && content.CanPass(source_atom, src)) + if(movable_content.density && (!exclude_mobs || !ismob(movable_content))) + if(source_atom && movable_content.CanPass(source_atom, get_dir(src, source_atom))) continue return TRUE return FALSE @@ -352,11 +348,11 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) // By default byond will call Bump() on the first dense object in contents // Here's hoping it doesn't stay like this for years before we finish conversion to step_ var/atom/firstbump - var/canPassSelf = CanPass(mover, src) + var/canPassSelf = CanPass(mover, get_dir(src, mover)) if(canPassSelf || (mover.movement_type & PHASING) || (mover.pass_flags & pass_flags_self)) for(var/atom/movable/thing as anything in contents) if(QDELETED(mover)) - return FALSE //We were deleted, do not attempt to proceed with movement. + return FALSE //We were deleted, do not attempt to proceed with movement. if(thing == mover || thing == mover.loc) // Multi tile objects and moving out of other objects continue if(!thing.Cross(mover)) diff --git a/code/game/world.dm b/code/game/world.dm index 8377932887c9..93f1e15e88cf 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -151,6 +151,9 @@ GLOBAL_VAR(restart_counter) #ifdef UNIT_TESTS GLOB.test_log = "[GLOB.log_directory]/tests.log" start_log(GLOB.test_log) +#endif +#ifdef REFERENCE_DOING_IT_LIVE + GLOB.harddel_log = "[GLOB.log_directory]/harddels.log" #endif start_log(GLOB.world_game_log) start_log(GLOB.world_attack_log) @@ -246,11 +249,11 @@ GLOBAL_VAR(restart_counter) TgsReboot() - #ifdef UNIT_TESTS +#ifdef UNIT_TESTS FinishTestRun() return - #endif +#else if(TgsAvailable()) var/do_hard_reboot // check the hard reboot counter @@ -277,6 +280,8 @@ GLOBAL_VAR(restart_counter) AUXTOOLS_SHUTDOWN(AUXMOS) ..() +#endif //ifdef UNIT_TESTS + /world/Del() shutdown_logging() // makes sure the thread is closed before end, else we terminate AUXTOOLS_SHUTDOWN(AUXMOS) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 32840115224c..fc6f055f4ae1 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -356,7 +356,7 @@ if("parrot") M.change_mob_type(/mob/living/simple_animal/parrot , null, null, delmob) if("polyparrot") - M.change_mob_type(/mob/living/simple_animal/parrot/Poly , null, null, delmob) + M.change_mob_type(/mob/living/simple_animal/parrot/Polly , null, null, delmob) if("constructjuggernaut") M.change_mob_type(/mob/living/simple_animal/hostile/construct/juggernaut , null, null, delmob) if("constructartificer") diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index e9fee95ab5ed..0295a1f95cb6 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -355,6 +355,10 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null qdel_on_finish = finished_qdel /datum/SDQL2_query/Destroy() + if(delete_click) + QDEL_NULL(delete_click) + if(action_click) + QDEL_NULL(action_click) state = SDQL2_STATE_HALTING query_tree = null obj_count_all = null diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index da8fe89cea48..6fc5f8a4c709 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -1,4 +1,4 @@ -#define ANNOTATE_OBJECT(object) testing ? "[get_area(object)] (estimated location: [json_encode(object.check_shuttle_offset())])" : ADMIN_VERBOSEJMP(object) +#define ANNOTATE_OBJECT(object) testing ? "[object.loc.loc.name] (estimated location: [json_encode(object.get_relative_location())])" : ADMIN_VERBOSEJMP(object) /atom/proc/check_shuttle_offset() if(!SSshuttle.initialized) @@ -28,31 +28,27 @@ var/list/results = atmosscan() to_chat(src, "[results.Join("\n")]", confidential = TRUE) -/proc/atmosscan(testing = FALSE) +/proc/atmosscan(testing = FALSE, critical_only = FALSE) var/list/results = list() + var/static/list/blacklist = typecacheof(list(/obj/machinery/atmospherics/pipe/layer_manifold, /obj/machinery/atmospherics/pipe/heat_exchanging)) - //Atmos Components - for(var/obj/machinery/atmospherics/components/component in GLOB.machines) - if(!testing && component.z && (!component.nodes || !component.nodes.len || (null in component.nodes))) - results += "Unconnected [component.name] located at [ANNOTATE_OBJECT(component)]" - for(var/obj/machinery/atmospherics/components/other_component in get_turf(component)) - if(other_component != component && other_component.piping_layer == component.piping_layer && other_component.dir == component.dir) - results += "Doubled [component.name] located at [ANNOTATE_OBJECT(component)]" - - //Manifolds - for(var/obj/machinery/atmospherics/pipe/manifold/manifold in SSair.atmos_machinery) - if(manifold.z && (!manifold.nodes || !manifold.nodes.len || (null in manifold.nodes))) - results += "Unconnected [manifold.name] located at [ANNOTATE_OBJECT(manifold)]" - for(var/obj/machinery/atmospherics/pipe/manifold/other_manifold in get_turf(manifold)) - if(other_manifold != manifold && other_manifold.piping_layer == manifold.piping_layer && other_manifold.dir == manifold.dir) - results += "Doubled [manifold.name] located at [ANNOTATE_OBJECT(manifold)]" + for(var/obj/machinery/atmospherics/pipe in SSair.atmos_machinery + SSair.atmos_air_machinery) + if(blacklist[pipe.type]) + continue + if(pipe.z && (!length(pipe.nodes) || (null in pipe.nodes)) && !critical_only) + results += "Unconnected [pipe.name] located at [ANNOTATE_OBJECT(pipe)]" + for(var/obj/machinery/atmospherics/other_pipe in get_turf(pipe)) + if(blacklist[other_pipe.type]) + continue + if(other_pipe != pipe && other_pipe.piping_layer == pipe.piping_layer && (other_pipe.initialize_directions & pipe.initialize_directions)) + results += "Doubled [pipe.name] located at [ANNOTATE_OBJECT(pipe)]" - //Pipes - for(var/obj/machinery/atmospherics/pipe/simple/pipe in SSair.atmos_machinery) - if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes))) + //HE pipes are tested separately + for(var/obj/machinery/atmospherics/pipe/heat_exchanging/pipe in SSair.atmos_air_machinery) + if(pipe.z && (!length(pipe.nodes) || (null in pipe.nodes)) && !critical_only) results += "Unconnected [pipe.name] located at [ANNOTATE_OBJECT(pipe)]" - for(var/obj/machinery/atmospherics/pipe/other_pipe in get_turf(pipe)) - if(other_pipe != pipe && other_pipe.piping_layer == pipe.piping_layer && other_pipe.dir == pipe.dir) + for(var/obj/machinery/atmospherics/pipe/heat_exchanging/other_pipe in get_turf(pipe)) + if(other_pipe != pipe && other_pipe.piping_layer == pipe.piping_layer && (other_pipe.initialize_directions & pipe.initialize_directions)) results += "Doubled [pipe.name] located at [ANNOTATE_OBJECT(pipe)]" return results @@ -71,15 +67,16 @@ var/list/results = list() for (var/datum/powernet/PN in GLOB.powernets) - if (!PN.nodes || !PN.nodes.len) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - results += "Powernet with no nodes! (number [PN.number]) - example cable at [ANNOTATE_OBJECT(C)]" + if(!length(PN.cables)) + continue + + if (!length(PN.nodes)) + var/obj/structure/cable/C = PN.cables[1] + results += "Powernet with no nodes! (number [PN.number]) - example cable at [ANNOTATE_OBJECT(C)]" - if (!PN.cables || (PN.cables.len < 10)) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - results += "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [ANNOTATE_OBJECT(C)]" + if (!length(PN.cables) < 10) + var/obj/structure/cable/C = PN.cables[1] + results += "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [ANNOTATE_OBJECT(C)]" var/checked_list = list() for(var/obj/structure/cable/specific_cable as anything in GLOB.cable_list) diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 6b4ee958acf2..18a572c7477b 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -172,7 +172,7 @@ for(var/mob/living/mob in thunderdome) qdel(mob) //Clear mobs for(var/obj/obj in thunderdome) - if(!istype(obj, /obj/machinery/camera) && !istype(obj, /obj/effect/abstract/proximity_checker)) + if(!istype(obj, /obj/machinery/camera)) qdel(obj) //Clear objects var/area/template = GLOB.areas_by_type[/area/tdome/arena_source] diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm index 73049adf562c..b4e374f41cb8 100644 --- a/code/modules/admin/verbs/shuttlepanel.dm +++ b/code/modules/admin/verbs/shuttlepanel.dm @@ -22,7 +22,6 @@ options += "--------" options += "Infinite Transit" options += "Delete Shuttle" - options += "Into The Sunset (delete & greentext 'escape')" var/selection = input(user, "Select where to fly [name]:", "Fly Shuttle") as null|anything in options if(!selection) @@ -38,15 +37,12 @@ if("Delete Shuttle") if(alert(user, "Really delete [name]?", "Delete Shuttle", "Cancel", "Really!") != "Really!") return - jumpToNullSpace() + if(QDELETED(current_ship)) + qdel(src) + else + qdel(current_ship) message_admins("\[SHUTTLE]: [key_name_admin(user)] has deleted [name].") - if("Into The Sunset (delete & greentext 'escape')") - if(alert(user, "Really delete [name] and greentext escape objectives?", "Delete Shuttle", "Cancel", "Really!") != "Really!") - return - intoTheSunset() - message_admins("\[SHUTTLE]: [key_name_admin(user)] has deleted [name], and granted the crew greentext.") - else if(options[selection]) initiate_docking(options[selection]) diff --git a/code/modules/admin/view_variables/reference_tracking.dm b/code/modules/admin/view_variables/reference_tracking.dm index 0e4cfef7cea8..69d3a5d1541b 100644 --- a/code/modules/admin/view_variables/reference_tracking.dm +++ b/code/modules/admin/view_variables/reference_tracking.dm @@ -1,18 +1,10 @@ #ifdef REFERENCE_TRACKING -/datum/verb/find_refs() - set category = "Debug" - set name = "Find References" - set src in world - - find_references(FALSE) - - /datum/proc/find_references(skip_alert) running_find_references = type if(usr?.client) if(usr.client.running_find_references) - testing("CANCELLED search for references to a [usr.client.running_find_references].") + log_reftracker("CANCELLED search for references to a [usr.client.running_find_references].") usr.client.running_find_references = null running_find_references = null //restart the garbage collector @@ -20,9 +12,11 @@ SSgarbage.next_fire = world.time + world.tick_lag return + #ifndef FIND_REF_NO_CHECK_TICK if(!skip_alert && alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") != "Yes") running_find_references = null return + #endif //this keeps the garbage collector from failing to collect objects being searched for in here SSgarbage.can_fire = FALSE @@ -30,29 +24,40 @@ if(usr?.client) usr.client.running_find_references = type - testing("Beginning search for references to a [type].") - last_find_references = world.time + log_reftracker("Beginning search for references to a [type].") + + var/starting_time = world.time - DoSearchVar(GLOB, "(global) -> ") //globals - testing("Finished searching globals") + //Time to search the whole game for our ref + DoSearchVar(GLOB, "GLOB", search_time = starting_time) //globals + log_reftracker("Finished searching globals") - for(var/atom/atom_thing) //atoms - DoSearchVar(atom_thing, "World -> [atom_thing]") - testing("Finished searching atoms") + //Yes we do actually need to do this. The searcher refuses to read weird lists + //And global.vars is a really weird list + var/global_vars = list() + for(var/key in global.vars) + global_vars[key] = global.vars[key] - for (var/datum/datum_thing) //datums - DoSearchVar(datum_thing, "World -> [datum_thing]") - testing("Finished searching datums") + DoSearchVar(global_vars, "Native Global", search_time = starting_time) + log_reftracker("Finished searching native globals") -#ifndef FIND_REF_SKIP_CLIENTS - // DO NOT RUN THIS ON A LIVE SERVER - // IT WILL CRASH!!! - for (var/client/client_thing) //clients - DoSearchVar(client_thing, "World -> [client_thing]") - testing("Finished searching clients") + for(var/datum/thing in world) //atoms (don't beleive its lies) + DoSearchVar(thing, "World -> [thing.type]", search_time = starting_time) + log_reftracker("Finished searching atoms") + + for(var/datum/thing) //datums + DoSearchVar(thing, "Datums -> [thing.type]", search_time = starting_time) + log_reftracker("Finished searching datums") + +#ifndef REFERENCE_DOING_IT_LIVE + //Warning, attempting to search clients like this will cause crashes if done on live. Watch yourself + for(var/client/thing) //clients + DoSearchVar(thing, "Clients -> [thing.type]", search_time = starting_time) + log_reftracker("Finished searching clients") + + log_reftracker("Completed search for references to a [type].") #endif - testing("Completed search for references to a [type].") if(usr?.client) usr.client.running_find_references = null running_find_references = null @@ -61,79 +66,94 @@ SSgarbage.can_fire = TRUE SSgarbage.next_fire = world.time + world.tick_lag - -/datum/verb/qdel_then_find_references() - set category = "Debug" - set name = "qdel() then Find References" - set src in world - - qdel(src, TRUE) //force a qdel - if(!running_find_references) - find_references(TRUE) - - -/datum/verb/qdel_then_if_fail_find_references() - set category = "Debug" - set name = "qdel() then Find References if GC failure" - set src in world - - qdel_and_find_ref_if_fail(src, TRUE) - - -/datum/proc/DoSearchVar(potential_container, container_name, recursive_limit = 32) - #ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK +/datum/proc/DoSearchVar(potential_container, container_name, recursive_limit = 64, search_time = world.time) + #ifdef REFERENCE_TRACKING_DEBUG + if(SSgarbage.should_save_refs && !found_refs) + found_refs = list() #endif + if(usr?.client && !usr.client.running_find_references) return if(!recursive_limit) + log_reftracker("Recursion limit reached. [container_name]") return + //Check each time you go down a layer. This makes it a bit slow, but it won't effect the rest of the game at all + #ifndef FIND_REF_NO_CHECK_TICK + CHECK_TICK + #endif + if(istype(potential_container, /datum)) var/datum/datum_container = potential_container - if(datum_container.last_find_references == last_find_references) + if(datum_container.last_find_references == search_time) return - datum_container.last_find_references = last_find_references + datum_container.last_find_references = search_time var/list/vars_list = datum_container.vars for(var/varname in vars_list) - if (varname == "vars") - continue #ifndef FIND_REF_NO_CHECK_TICK CHECK_TICK #endif + if (varname == "vars" || varname == "vis_locs") //Fun fact, vis_locs don't count for references + continue var/variable = vars_list[varname] if(variable == src) - testing("Found [type] \ref[src] in [datum_container.type]'s [varname] var. [container_name]") + #ifdef REFERENCE_TRACKING_DEBUG + if(SSgarbage.should_save_refs) + found_refs[varname] = TRUE + continue //End early, don't want these logging + #endif + log_reftracker("Found [type] \ref[src] in [datum_container.type]'s \ref[datum_container] [varname] var. [container_name]") + continue - else if(islist(variable)) - DoSearchVar(variable, "[container_name] -> [varname] (list)", recursive_limit-1) + if(islist(variable)) + DoSearchVar(variable, "[container_name] \ref[datum_container] -> [varname] (list)", recursive_limit - 1, search_time) else if(islist(potential_container)) var/normal = IS_NORMAL_LIST(potential_container) - for(var/element_in_list in potential_container) + var/list/potential_cache = potential_container + for(var/element_in_list in potential_cache) #ifndef FIND_REF_NO_CHECK_TICK CHECK_TICK #endif + //Check normal entrys if(element_in_list == src) - testing("Found [type] \ref[src] in list [container_name].") - - else if(element_in_list && !isnum(element_in_list) && normal) - if(potential_container[element_in_list] == src) - testing("Found [type] \ref[src] in list [container_name]\[[element_in_list]\]") - else if(islist(potential_container[element_in_list])) - DoSearchVar(potential_container[element_in_list], "[container_name]\[[element_in_list]\]", recursive_limit-1) - - else if(islist(element_in_list)) - var/list/list_element = element_in_list - DoSearchVar(element_in_list, "[container_name]\[[list_element.Find(element_in_list)]] -> list", recursive_limit - 1) + #ifdef REFERENCE_TRACKING_DEBUG + if(SSgarbage.should_save_refs) + found_refs[potential_cache] = TRUE + continue //End early, don't want these logging + #endif + log_reftracker("Found [type] \ref[src] in list [container_name].") + continue + var/assoc_val = null + if(!isnum(element_in_list) && normal) + assoc_val = potential_cache[element_in_list] + //Check assoc entrys + if(assoc_val == src) + #ifdef REFERENCE_TRACKING_DEBUG + if(SSgarbage.should_save_refs) + found_refs[potential_cache] = TRUE + continue //End early, don't want these logging + #endif + log_reftracker("Found [type] \ref[src] in list [container_name]\[[element_in_list]\]") + continue + //We need to run both of these checks, since our object could be hiding in either of them + //Check normal sublists + if(islist(element_in_list)) + DoSearchVar(element_in_list, "[container_name] -> [element_in_list] (list)", recursive_limit - 1, search_time) + //Check assoc sublists + if(islist(assoc_val)) + DoSearchVar(potential_container[element_in_list], "[container_name]\[[element_in_list]\] -> [assoc_val] (list)", recursive_limit - 1, search_time) /proc/qdel_and_find_ref_if_fail(datum/thing_to_del, force = FALSE) - SSgarbage.reference_find_on_fail[REF(thing_to_del)] = TRUE - qdel(thing_to_del, force) + thing_to_del.qdel_and_find_ref_if_fail(force) + +/datum/proc/qdel_and_find_ref_if_fail(force = FALSE) + SSgarbage.reference_find_on_fail["\ref[src]"] = TRUE + qdel(src, force) #endif diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm index 30a13107595e..e7fee444f2d2 100644 --- a/code/modules/antagonists/abductor/equipment/glands/slime.dm +++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm @@ -22,5 +22,5 @@ owner.vomit(20) var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey") - Slime.Friends = list(owner) - Slime.Leader = owner + Slime.set_friends(list(owner)) + Slime.set_leader(owner) diff --git a/code/modules/antagonists/blob/blob_mobs.dm b/code/modules/antagonists/blob/blob_mobs.dm index 7c21939f89a0..639017e100f3 100644 --- a/code/modules/antagonists/blob/blob_mobs.dm +++ b/code/modules/antagonists/blob/blob_mobs.dm @@ -62,7 +62,7 @@ else adjustFireLoss(5) -/mob/living/simple_animal/hostile/blob/CanAllowThrough(atom/movable/mover, turf/target) +/mob/living/simple_animal/hostile/blob/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(istype(mover, /obj/structure/blob)) return TRUE @@ -117,9 +117,10 @@ var/is_zombie = FALSE /mob/living/simple_animal/hostile/blob/blobspore/Initialize(mapload, obj/structure/blob/factory/linked_node) - if(istype(linked_node)) - factory = linked_node - factory.spores += src + if(!istype(linked_node)) + return INITIALIZE_HINT_QDEL + factory = linked_node + factory.spores += src . = ..() if(linked_node.overmind && istype(linked_node.overmind.blobstrain, /datum/blobstrain/reagent/distributed_neurons) && !istype(src, /mob/living/simple_animal/hostile/blob/blobspore/weak)) notify_ghosts("A controllable spore has been created in \the [get_area(src)].", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Sentient Spore Created") diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index cae4fb2aa983..29060afd8f6a 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -22,6 +22,10 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ stack_trace("blobstrain created without overmind") overmind = new_overmind +/datum/blobstrain/Destroy() + overmind = null + return ..() + /datum/blobstrain/proc/on_gain() overmind.color = complementary_color for(var/BL in GLOB.blobs) diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index dfd761ed0527..56a4aca744eb 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -22,7 +22,7 @@ B.take_damage(damage, BURN, "energy") /datum/reagent/blob/energized_jelly - name = "Energized Jelly" + name = "Blob Energized Jelly" taste_description = "gelatin" color = "#EFD65A" diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index a2b1022bb186..7fb5cc39016c 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -174,6 +174,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) SSticker.force_ending = 1 /mob/camera/blob/Destroy() + QDEL_NULL(blobstrain) for(var/BL in GLOB.blobs) var/obj/structure/blob/B = BL if(B && B.overmind == src) diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 726c12fbd1bc..9fa04c7b6754 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -161,11 +161,11 @@ playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it ConsumeTile() //hit the tile we're in, making sure there are no border objects blocking us - if(!T.CanPass(src, T)) //is the target turf impassable + if(!T.CanPass(src, get_dir(T, src))) //is the target turf impassable make_blob = FALSE T.blob_act(src) //hit the turf if it is for(var/atom/A in T) - if(!A.CanPass(src, T)) //is anything in the turf impassable + if(!A.CanPass(src, get_dir(T, src))) //is anything in the turf impassable make_blob = FALSE A.blob_act(src) //also hit everything in the turf diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index ebebdc336676..6a1ccb1dd465 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -21,8 +21,9 @@ update_appearance() . = ..() -/obj/structure/blob/special/core/Destroy() +/obj/structure/blob/core/Destroy() GLOB.blob_cores -= src + GLOB.poi_list -= src if(overmind) overmind.blob_core = null overmind = null @@ -32,7 +33,7 @@ /obj/structure/blob/core/scannerreport() return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts." -/obj/structure/blob/special/core/update_overlays() +/obj/structure/blob/core/update_overlays() . = ..() var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") if(overmind) @@ -40,9 +41,8 @@ . += blob_overlay . += mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay") -/obj/structure/blob/special/core/update_appearance() +/obj/structure/blob/core/update_appearance() color = null - GLOB.poi_list -= src return ..() /obj/structure/blob/core/ex_act(severity, target) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 45fff96dc5d4..ea902bc032a3 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -356,9 +356,10 @@ var/datum/action/innate/cult/blood_spell/source /obj/item/melee/blood_magic/New(loc, spell) - source = spell - uses = source.charges - health_cost = source.health_cost + if(spell) + source = spell + uses = source.charges + health_cost = source.health_cost ..() /obj/item/melee/blood_magic/Destroy() @@ -373,7 +374,7 @@ source.desc = source.base_desc source.desc += "
Has [uses] use\s remaining." source.UpdateButtonIcon() - ..() + return ..() /obj/item/melee/blood_magic/attack_self(mob/living/user) afterattack(user, user, TRUE) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 7eb00197b742..7323160deceb 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -135,6 +135,11 @@ /obj/item/cult_bastard/proc/nemesis_effects(mob/living/user, mob/living/target) return +/obj/item/cult_bastard/Destroy() + QDEL_NULL(jaunt) + QDEL_NULL(linked_action) + return ..() + /obj/item/cult_bastard/examine(mob/user) . = ..() . += "This weapon will absorb the souls of unconscious human foes." @@ -216,7 +221,7 @@ phaseout = /obj/effect/temp_visual/dir_setting/cult/phase/out /datum/action/innate/dash/cult/IsAvailable() - if(current_charges) + if(iscultist(owner) && current_charges) return TRUE else return FALSE @@ -625,7 +630,7 @@ /obj/item/cult_spear/Destroy() if(spear_act) qdel(spear_act) - ..() + return ..() /obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) var/turf/T = get_turf(hit_atom) diff --git a/code/modules/antagonists/disease/disease_disease.dm b/code/modules/antagonists/disease/disease_disease.dm index 482beaba6be6..479e8345b533 100644 --- a/code/modules/antagonists/disease/disease_disease.dm +++ b/code/modules/antagonists/disease/disease_disease.dm @@ -12,6 +12,7 @@ /datum/disease/advance/sentient_disease/Destroy() . = ..() + overmind = null GLOB.sentient_disease_instances -= src /datum/disease/advance/sentient_disease/remove_disease() diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm index 8f1ea1c2b04e..55f869b3a71a 100644 --- a/code/modules/antagonists/disease/disease_mob.dm +++ b/code/modules/antagonists/disease/disease_mob.dm @@ -72,10 +72,12 @@ the new instance inside the host to be updated to the template's stats. /mob/camera/disease/Destroy() . = ..() QDEL_NULL(adaptation_menu_action) + disease_template = null for(var/V in GLOB.sentient_disease_instances) var/datum/disease/advance/sentient_disease/S = V if(S.overmind == src) S.overmind = null + browser = null /mob/camera/disease/Login() . = ..() diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index f19a45d6e8ed..2487260dd5c1 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -297,8 +297,8 @@ to_chat(src, "You cannot use abilities from inside of a wall.") return FALSE for(var/obj/O in T) - if(O.density && !O.CanPass(src, T)) - to_chat(src, "You cannot use abilities inside of a dense object.") + if(O.density && !O.CanPass(src, get_dir(T, src))) + to_chat(src, span_revenwarning("You cannot use abilities inside of a dense object.")) return FALSE if(inhibited) to_chat(src, "Your powers have been suppressed by nulling energy!") @@ -442,7 +442,7 @@ /obj/item/ectoplasm/revenant/Destroy() if(!QDELETED(revenant)) qdel(revenant) - ..() + return ..() //objectives /datum/objective/revenant diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index 3751279f095e..b12050c263b7 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -49,7 +49,7 @@ del_on_death = 1 deathmessage = "screams in anger as it collapses into a puddle of viscera!" -/mob/living/simple_animal/slaughter/Initialize() +/mob/living/simple_animal/slaughter/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_BLOODCRAWL_EAT, "innate") var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 0a2d4268ba9f..0add31c60b74 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -245,6 +245,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module)) owner_AI.doomsday_device.start() for(var/obj/item/pinpointer/nuke/P in GLOB.pinpointer_list) P.switch_mode_to(TRACK_MALF_AI) //Pinpointers start tracking the AI wherever it goes + P.alert = TRUE //WEEWOO qdel(src) /obj/machinery/doomsday_device @@ -256,21 +257,31 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module)) verb_exclaim = "blares" var/timing = FALSE var/obj/effect/countdown/doomsday/countdown + var/mob/living/silicon/ai/owner var/detonation_timer var/next_announce /obj/machinery/doomsday_device/Initialize() . = ..() + if(!isAI(loc)) + stack_trace("Doomsday created outside an AI somehow, shit's fucking broke. Anyway, we're just gonna qdel now. Go make a github issue report.") + return INITIALIZE_HINT_QDEL + owner = loc countdown = new(src) /obj/machinery/doomsday_device/Destroy() QDEL_NULL(countdown) STOP_PROCESSING(SSfastprocess, src) SSmapping.remove_nuke_threat(src) - for(var/A in GLOB.ai_list) - var/mob/living/silicon/ai/AI = A - if(AI.doomsday_device == src) - AI.doomsday_device = null + set_security_level("red") + for(var/mob/living/silicon/robot/borg in owner?.connected_robots) + borg.toggle_headlamp(FALSE, TRUE) //forces borg lamp to update + owner?.doomsday_device = null + owner?.nuking = null + owner = null + for(var/obj/item/pinpointer/nuke/P in GLOB.pinpointer_list) + P.switch_mode_to(TRACK_NUKE_DISK) //Party's over, back to work, everyone + P.alert = FALSE return ..() /obj/machinery/doomsday_device/proc/start() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 4917e1587fcc..5c1324bdcfe9 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -42,6 +42,10 @@ /obj/item/assembly/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER +/obj/item/assembly/Destroy() + holder = null + return ..() + /obj/item/assembly/get_part_rating() return 1 diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index dd7936968ae2..637157682a15 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -210,19 +210,22 @@ desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocols fix the flashbulb if it ever burns out." var/flashcd = 20 var/overheat = 0 - var/obj/item/organ/cyberimp/arm/flash/I = null + //Wearef to our arm + var/datum/weakref/arm /obj/item/assembly/flash/armimplant/burn_out() - if(I && I.owner) - to_chat(I.owner, "Your photon projector implant overheats and deactivates!") - I.Retract() + var/obj/item/organ/cyberimp/arm/flash/real_arm = arm.resolve() + if(real_arm?.owner) + to_chat(real_arm.owner, "Your photon projector implant overheats and deactivates!") + real_arm.Retract() overheat = TRUE addtimer(CALLBACK(src, .proc/cooldown), flashcd * 2) /obj/item/assembly/flash/armimplant/try_use_flash(mob/user = null) if(overheat) - if(I && I.owner) - to_chat(I.owner, "Your photon projector is running too hot to be used again so quickly!") + var/obj/item/organ/cyberimp/arm/flash/real_arm = arm.resolve() + if(real_arm?.owner) + to_chat(real_arm.owner, "Your photon projector is running too hot to be used again so quickly!") return FALSE overheat = TRUE addtimer(CALLBACK(src, .proc/cooldown), flashcd) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index c68ee14dd867..08b603058563 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -11,6 +11,8 @@ var/time = 10 var/sensitivity = 1 var/hearing_range = 3 + ///Proximity monitor associated with this atom, needed for it to work. + var/datum/proximity_monitor/proximity_monitor /obj/item/assembly/prox_sensor/Initialize() . = ..() @@ -40,19 +42,19 @@ if(!.) return else - proximity_monitor.SetHost(src,src) + proximity_monitor.set_host(src, src) /obj/item/assembly/prox_sensor/toggle_secure() secured = !secured if(!secured) if(scanning) toggle_scan() - proximity_monitor.SetHost(src,src) + proximity_monitor.set_host(src, src) timing = FALSE STOP_PROCESSING(SSobj, src) else START_PROCESSING(SSobj, src) - proximity_monitor.SetHost(loc,src) + proximity_monitor.set_host(loc,src) update_appearance() return secured @@ -84,13 +86,13 @@ if(!secured) return FALSE scanning = scan - proximity_monitor.SetRange(scanning ? sensitivity : 0) + proximity_monitor.set_range(scanning ? sensitivity : 0) update_appearance() /obj/item/assembly/prox_sensor/proc/sensitivity_change(value) var/sense = min(max(sensitivity + value, 0), 5) sensitivity = sense - if(scanning && proximity_monitor.SetRange(sense)) + if(scanning && proximity_monitor.set_range(sense)) sense() /obj/item/assembly/prox_sensor/update_appearance() diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 3d1e1e46602f..f28a9a898588 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -184,7 +184,9 @@ /turf/proc/process_cell(fire_count) /turf/open/proc/equalize_pressure_in_zone(cyclenum) -/turf/open/proc/consider_firelocks(turf/T2) + +/turf/proc/consider_firelocks(turf/T2) //TODO: Find out why this sometimes gets called. Possibly to do with atmos adjacency not being updated in auxmos? +/turf/open/consider_firelocks(turf/T2) if(blocks_air) return for(var/obj/machinery/airalarm/alarm in src) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index a7924f4c0c3c..e5a2490b609d 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -44,6 +44,9 @@ ///Is the thing being rebuilt by SSair or not. Prevents list blaot var/rebuilding = FALSE + ///If we should init and immediately start processing + var/init_processing = FALSE + /obj/machinery/atmospherics/examine(mob/user) . = ..() if(is_type_in_list(src, GLOB.ventcrawl_machinery) && isliving(user)) @@ -59,11 +62,15 @@ nodes = new(device_type) if (!armor) armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70) + init_processing = process ..() - if(process) - SSair.start_processing_machine(src) SetInitDirections() +/obj/machinery/atmospherics/Initialize(mapload) + if(init_processing) + SSair.start_processing_machine(src, mapload) + return ..() + /obj/machinery/atmospherics/Destroy() for(var/i in 1 to device_type) nullifyNode(i) @@ -158,7 +165,7 @@ return TRUE return FALSE -/obj/machinery/atmospherics/proc/pipeline_expansion() +/obj/machinery/atmospherics/proc/pipeline_expansion(datum/pipeline/reference) return nodes /obj/machinery/atmospherics/proc/SetInitDirections() @@ -170,13 +177,13 @@ /obj/machinery/atmospherics/proc/returnPipenet() return -/obj/machinery/atmospherics/proc/returnPipenetAirs() +/obj/machinery/atmospherics/proc/returnPipenetAirs(datum/pipeline/reference) return -/obj/machinery/atmospherics/proc/setPipenet() +/obj/machinery/atmospherics/proc/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/connection) return -/obj/machinery/atmospherics/proc/replacePipenet() +/obj/machinery/atmospherics/proc/replacePipenet(datum/pipeline/old_pipeline, datum/pipeline/new_pipeline) return /obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index b4a02de7d108..1fdc91effb44 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -77,6 +77,8 @@ if(parents[i]) nullifyPipenet(parents[i]) airs[i] = null + if(!QDELETED(src)) + airs[i] = new /datum/gas_mixture(200) return ..() /obj/machinery/atmospherics/components/on_construction() @@ -100,9 +102,14 @@ /obj/machinery/atmospherics/components/proc/nullifyPipenet(datum/pipeline/reference) if(!reference) CRASH("nullifyPipenet(null) called by [type] on [COORD(src)]") - var/i = parents.Find(reference) - reference.other_airs -= airs[i] + + for (var/i in 1 to length(parents)) + if (parents[i] == reference) + reference.other_airs -= airs[i] // Disconnects from the pipeline side + parents[i] = null // Disconnects from the machinery side. + reference.other_atmosmch -= src + /* We explicitly qdel pipeline when this particular pipeline is projected to have no member and cause GC problems. @@ -110,12 +117,10 @@ while pipes must and will happily wreck and rebuild everything again every time they are qdeleted. */ - if(!length(reference.other_atmosmch) && !length(reference.members)) - if(QDESTROYING(reference)) - parents[i] = null - CRASH("nullifyPipenet() called on qdeleting [reference] indexed on parents\[[i]\]") - qdel(reference) - parents[i] = null + if(length(reference.other_atmosmch) || length(reference.members) || QDESTROYING(reference)) + return + + qdel(reference) /obj/machinery/atmospherics/components/returnPipenetAirs(datum/pipeline/reference) var/list/returned_air = list() @@ -130,14 +135,22 @@ return list(nodes[parents.Find(reference)]) return ..() -/obj/machinery/atmospherics/components/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/A) - parents[nodes.Find(A)] = reference +/obj/machinery/atmospherics/components/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/connection) + var/connection_index = nodes.Find(connection) + if(!connection_index) + message_admins("Doubled pipe found at [ADMIN_VERBOSEJMP(connection)]! Please report to mappers.") //This will cascade into even more errors. Sorry! + CRASH("Doubled pipe found, causing an error in setPipenet") + var/list/datum/pipeline/to_replace = parents[connection_index] + //Some references to clean up if it isn't empty + if(to_replace) + nullifyPipenet(to_replace) + parents[connection_index] = reference /obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = nodes[1]) //returns parents[1] if called without argument return parents[nodes.Find(A)] -/obj/machinery/atmospherics/components/replacePipenet(datum/pipeline/Old, datum/pipeline/New) - parents[parents.Find(Old)] = New +/obj/machinery/atmospherics/components/replacePipenet(datum/pipeline/old_pipeline, datum/pipeline/new_pipeline) + parents[parents.Find(old_pipeline)] = new_pipeline /obj/machinery/atmospherics/components/unsafe_pressure_release(mob/user, pressures) ..() @@ -183,8 +196,8 @@ if(!parent) //WARNING("Component is missing a pipenet! Rebuilding...") SSair.add_to_rebuild_queue(src) - else - parent.update = TRUE + return + parent.update = TRUE /obj/machinery/atmospherics/components/returnPipenets() . = list() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index a051df7de2c9..d70e91b29de7 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -57,19 +57,20 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/process_atmos() ..() - injecting = 0 + injecting = TRUE - if(!on || !is_operational) + if(!on || !is_operational || !isopenturf(loc)) return var/datum/gas_mixture/air_contents = airs[1] - if(air_contents != null) - if(air_contents.return_temperature() > 0) - loc.assume_air_ratio(air_contents, volume_rate / air_contents.return_volume()) - air_update_turf() + if(!air_contents || air_contents.return_temperature() <= 0) + return - update_parents() + loc.assume_air_ratio(air_contents, volume_rate / air_contents.return_volume()) + air_update_turf() + + update_parents() /obj/machinery/atmospherics/components/unary/outlet_injector/proc/inject() @@ -78,7 +79,7 @@ var/datum/gas_mixture/air_contents = airs[1] - injecting = 1 + injecting = TRUE if(air_contents.return_temperature() > 0) loc.assume_air_ratio(air_contents, volume_rate / air_contents.return_volume()) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm index d5f51757685d..7c890dfb8425 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm @@ -48,9 +48,7 @@ var/pressure_delta = our_pressure - environment.return_pressure() var/transfer_moles = pressure_delta*200/(air_contents.return_temperature() * R_IDEAL_GAS_EQUATION) if(transfer_moles > 0) - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - - loc.assume_air(removed) + loc.transfer_air(air_contents, transfer_moles) air_update_turf() update_parents() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 3b570f209c8b..1b6df20c721e 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -23,10 +23,9 @@ var/heat_capacity = 0 var/interactive = TRUE // So mapmakers can disable interaction. -/obj/machinery/atmospherics/components/unary/thermomachine/Initialize() +/obj/machinery/atmospherics/components/unary/thermomachine/Initialize(mapload) . = ..() initialize_directions = dir - SSair.start_processing_machine(src) //WS edit, initialize thermomachines to SSairs list of tickable machines /obj/machinery/atmospherics/components/unary/thermomachine/on_construction(obj_color, set_layer) var/obj/item/circuitboard/machine/thermomachine/board = circuit diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 29c0ff985c9c..2ede3d7317b0 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -27,8 +27,10 @@ if(QDELETED(P)) continue SSair.add_to_rebuild_queue(P) + members.Cut() for(var/obj/machinery/atmospherics/components/C in other_atmosmch) C.nullifyPipenet(src) + other_atmosmch.Cut() return ..() /datum/pipeline/process() @@ -38,22 +40,23 @@ update = air.react(src) /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base) - if(!QDELETED(base)) - building = TRUE - var/volume = 0 - if(istype(base, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/considered_pipe = base - volume = considered_pipe.volume - members += considered_pipe - if(considered_pipe.air_temporary) - air = considered_pipe.air_temporary - considered_pipe.air_temporary = null - else - addMachineryMember(base) - if(!air) - air = new - air.set_volume(volume) - SSair.add_to_expansion(src, base) + if(QDELETED(base)) + return + building = TRUE + var/volume = 0 + if(istype(base, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/considered_pipe = base + volume = considered_pipe.volume + members += considered_pipe + if(considered_pipe.air_temporary) + air = considered_pipe.air_temporary + considered_pipe.air_temporary = null + else + addMachineryMember(base) + if(!air) + air = new + air.set_volume(volume) + SSair.add_to_expansion(src, base) ///Has the same effect as build_pipeline(), but this doesn't queue its work, so overrun abounds. It's useful for the pregame /datum/pipeline/proc/build_pipeline_blocking(obj/machinery/atmospherics/base) @@ -70,34 +73,35 @@ if(!air) air = new var/list/possible_expansions = list(base) - while(possible_expansions.len>0) + while(length(possible_expansions)) for(var/obj/machinery/atmospherics/borderline in possible_expansions) var/list/result = borderline.pipeline_expansion(src) - if(result?.len > 0) - for(var/obj/machinery/atmospherics/P in result) - if(istype(P, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/item = P - if(!members.Find(item)) - - if(item.parent) - var/static/pipenetwarnings = 10 - if(pipenetwarnings > 0) - log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].") - pipenetwarnings-- - if(pipenetwarnings == 0) - log_mapping("build_pipeline(): further messages about pipenets will be suppressed") - members += item - possible_expansions += item - - volume += item.volume - item.parent = src - - if(item.air_temporary) - air.merge(item.air_temporary) - item.air_temporary = null - else - P.setPipenet(src, borderline) - addMachineryMember(P) + if(!length(result)) + continue + for(var/obj/machinery/atmospherics/considered_device in result) + if(!istype(considered_device, /obj/machinery/atmospherics/pipe)) + considered_device.setPipenet(src, borderline) + addMachineryMember(considered_device) + continue + + var/obj/machinery/atmospherics/pipe/item = considered_device + if(item in members) + continue + + if(item.parent) + log_mapping("Possible doubled atmosmachine found at [AREACOORD(item)] with other contents: [json_encode(item.loc.contents)]") + item.stack_trace("Possible doubled atmosmachine found") + continue + + members += item + possible_expansions += item + + volume += item.volume + item.parent = src + + if(item.air_temporary) + air.merge(item.air_temporary) + item.air_temporary = null possible_expansions -= borderline @@ -108,7 +112,7 @@ var/list/returned_airs = C.returnPipenetAirs(src) if (!length(returned_airs) || (null in returned_airs)) stack_trace("addMachineryMember: Nonexistent (empty list) or null machinery gasmix added to pipeline datum from [C] \ - which is of type [C.type]. Nearby: ([C.x], [C.y], [C.z])") + which is of type [C.type]. QDELETED: [QDELETED(C) ? "true" : "false"].") other_airs |= returned_airs /datum/pipeline/proc/addMember(obj/machinery/atmospherics/A, obj/machinery/atmospherics/N) @@ -254,13 +258,11 @@ if(V.on) PL |= V.parents[1] PL |= V.parents[2] -//BeginWS Edit - Porting Relief Valves else if (istype(atmosmch,/obj/machinery/atmospherics/components/binary/relief_valve)) var/obj/machinery/atmospherics/components/binary/relief_valve/V = atmosmch if(V.opened) PL |= V.parents[1] PL |= V.parents[2] -//EndWS Edit - Porting Relief Valves else if (istype(atmosmch, /obj/machinery/atmospherics/components/unary/portables_connector)) var/obj/machinery/atmospherics/components/unary/portables_connector/C = atmosmch if(C.connected_device) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index d48e202adfc6..811979dd4c39 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -40,7 +40,7 @@ /obj/machinery/meter/Initialize(mapload, new_piping_layer) if(!isnull(new_piping_layer)) target_layer = new_piping_layer - SSair.start_processing_machine(src) + SSair.start_processing_machine(src, mapload) if(!target) reattach_to_layer() return ..() diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index f2c03c69139e..1f6e9cab5383 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -106,7 +106,7 @@ /obj/machinery/atmospherics/pipe/layer_manifold/setPipingLayer() piping_layer = PIPING_LAYER_DEFAULT -/obj/machinery/atmospherics/pipe/layer_manifold/pipeline_expansion() +/obj/machinery/atmospherics/pipe/layer_manifold/pipeline_expansion(datum/pipeline/reference) return get_all_connected_nodes() /obj/machinery/atmospherics/pipe/layer_manifold/disconnect(obj/machinery/atmospherics/reference) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index fcadc8cd4ff6..7daaf9273558 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -79,8 +79,10 @@ /obj/machinery/atmospherics/pipe/returnPipenet() return parent -/obj/machinery/atmospherics/pipe/setPipenet(datum/pipeline/P) - parent = P +/obj/machinery/atmospherics/pipe/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/connection) + if(!QDELETED(parent)) + qdel(parent) + parent = reference /obj/machinery/atmospherics/pipe/Destroy() QDEL_NULL(parent) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index ad5f95cf349d..db17acc4fa6c 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -15,16 +15,16 @@ var/maximum_pressure = 90 * ONE_ATMOSPHERE -/obj/machinery/portable_atmospherics/Initialize() +/obj/machinery/portable_atmospherics/Initialize(mapload) . = ..() air_contents = new(volume) air_contents.set_temperature(T20C) - SSair.start_processing_machine(src) + SSair.start_processing_machine(src, mapload) /obj/machinery/portable_atmospherics/Destroy() - SSair.stop_processing_machine(src) disconnect() - air_contents = null + QDEL_NULL(air_contents) + SSair.stop_processing_machine(src) return ..() diff --git a/code/modules/atmospherics/multiz.dm b/code/modules/atmospherics/multiz.dm index f4363ee88286..e0daf4c61654 100644 --- a/code/modules/atmospherics/multiz.dm +++ b/code/modules/atmospherics/multiz.dm @@ -16,7 +16,7 @@ . += multiz_overlay_node ///Attempts to locate a multiz pipe that's above us, if it finds one it merges us into its pipenet -/obj/machinery/atmospherics/pipe/simple/multiz/pipeline_expansion() +/obj/machinery/atmospherics/pipe/simple/multiz/pipeline_expansion(datum/pipeline/reference) icon = 'icons/obj/atmos.dmi' //Just to refresh. var/turf/T = get_turf(src) var/obj/machinery/atmospherics/pipe/simple/multiz/above = locate(/obj/machinery/atmospherics/pipe/simple/multiz) in(T.above()) diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm index 3a53bfac4735..f7eeeb9f7f96 100644 --- a/code/modules/awaymissions/away_props.dm +++ b/code/modules/awaymissions/away_props.dm @@ -6,11 +6,9 @@ invisibility = INVISIBILITY_MAXIMUM anchored = TRUE -/obj/effect/oneway/CanAllowThrough(atom/movable/mover, turf/target) +/obj/effect/oneway/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - var/turf/T = get_turf(src) - var/turf/MT = get_turf(mover) - return . && (T == MT || get_dir(MT,T) == dir) + return . && border_dir == dir /obj/effect/wind @@ -45,7 +43,7 @@ if(blocked_types.len) blocked_types = typecacheof(blocked_types) -/obj/effect/path_blocker/CanAllowThrough(atom/movable/mover, turf/target) +/obj/effect/path_blocker/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(blocked_types.len) var/list/mover_contents = mover.GetAllContents() diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 90502110c9c6..abf9ba4f5e16 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -39,6 +39,8 @@ . = ..() if(!reset) reset = new reset_path(get_turf(src)) + reset.flag = src + RegisterSignal(src, COMSIG_PARENT_PREQDELETED, .proc/reset_flag) //just in case CTF has some map hazards (read: chasms). /obj/item/ctf/ComponentInitialize() . = ..() @@ -55,8 +57,24 @@ to_chat(M, "\The [src] has been returned to base!") STOP_PROCESSING(SSobj, src) -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/ctf/attack_hand(mob/living/user) +/obj/item/ctf/proc/reset_flag(capture = FALSE) + SIGNAL_HANDLER + + var/turf/our_turf = get_turf(src.reset) + if(!our_turf) + return TRUE + forceMove(our_turf) + for(var/mob/M in GLOB.player_list) + var/area/mob_area = get_area(M) + if(istype(mob_area, /area/ctf)) + if(!capture) + to_chat(M, "[src] has been returned to the base!") + STOP_PROCESSING(SSobj, src) + return TRUE //so if called by a signal, it doesn't delete + +//working with attack hand feels like taking my brain and putting it through an industrial pill press so i'm gonna be a bit liberal with the comments +/obj/item/ctf/attack_hand(mob/living/user, list/modifiers) + //pre normal check item stuff, this is for our special flag checks if(!is_ctf_target(user) && !anyonecanpickup) to_chat(user, "Non-players shouldn't be moving the flag!") return @@ -116,6 +134,13 @@ icon_state = "banner" desc = "This is where a banner with Nanotrasen's logo on it would go." layer = LOW_ITEM_LAYER + var/obj/item/ctf/flag + +/obj/effect/ctf/flag_reset/Destroy() + if(flag) + flag.reset = null + flag = null + return ..() /obj/effect/ctf/flag_reset/red name = "red flag landmark" @@ -173,7 +198,7 @@ /obj/machinery/capture_the_flag/Destroy() GLOB.poi_list.Remove(src) - ..() + return ..() /obj/machinery/capture_the_flag/process() for(var/i in spawned_mobs) @@ -653,6 +678,11 @@ for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) CTF.dead_barricades += src +/obj/effect/ctf/dead_barricade/Destroy() + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) + CTF.dead_barricades -= src + return ..() + /obj/effect/ctf/dead_barricade/proc/respawn() if(!QDELETED(src)) new /obj/structure/barricade/security/ctf(get_turf(src)) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index d41b68de24a2..189fe1ebfd11 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -181,6 +181,12 @@ GLOBAL_LIST_EMPTY(gateway_destinations) vis_contents += portal_visuals return ..() +/obj/machinery/gateway/Destroy() + destination.target_gateway = null + GLOB.gateway_destinations -= destination + destination = null + return ..() + /obj/machinery/gateway/proc/generate_destination() destination = new destination_type destination.name = destination_name diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index a1ec18d25653..fcefdef265fe 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -12,7 +12,7 @@ /obj/structure/speaking_tile/Initialize() . = ..() - var/json_file = file("data/npc_saves/Poly.json") + var/json_file = file("data/npc_saves/Polly.json") if(!fexists(json_file)) return var/list/json = json_decode(file2text(json_file)) @@ -45,7 +45,7 @@ if(9) SpeakPeace(list("Alright maybe that's too boring.", "I can't keep manually typing these lines out though.", "It's hard to explain but the code structure I'm using is kind of terrible.")) if(10) - SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Poly!", "Then you'll be able to keep listening to this without getting bored!")) + SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Polly!", "Then you'll be able to keep listening to this without getting bored!")) if(isnull(shenanigans) || !shenanigans.len) shenanigans = list("Except the poly file is missing...") if(11 to 14, 16 to 50, 52 to 99, 103 to 107, 109 to 203, 205 to 249, 252 to 665, 667 to 999, 1001 to 5642) @@ -55,7 +55,7 @@ if(15) SpeakPeace(list("See? Isn't this fun?","Now you can mash this for hours without getting bored.","Anyway I'll leave you it.")) if(51) - SpeakPeace(list("The fun never ends around here.", "The Poly text files stores up to 500 statements.", "But you've probably heard a few repeats by now.")) + SpeakPeace(list("The fun never ends around here.", "The Polly text files stores up to 500 statements.", "But you've probably heard a few repeats by now.")) if(100) SpeakPeace(list("And that's a solid hundred.", "Good hustle I guess.", "You've probably heard a lot of repeats by now.")) if(101) diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 19bb6631c708..74ac431c5fe9 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -48,9 +48,13 @@ close_switchstates() close_preview() holder.player_details.post_login_callbacks -= li_cb + QDEL_NULL(li_cb) holder = null + buttons.Cut() QDEL_NULL(mode) + QDEL_NULL(modebutton) QDEL_LIST(modeswitch_buttons) + QDEL_NULL(dirbutton) QDEL_LIST(dirswitch_buttons) return ..() diff --git a/code/modules/buildmode/effects/line.dm b/code/modules/buildmode/effects/line.dm index f38e0c53871b..394c0d205a51 100644 --- a/code/modules/buildmode/effects/line.dm +++ b/code/modules/buildmode/effects/line.dm @@ -3,6 +3,9 @@ var/client/cl /obj/effect/buildmode_line/New(client/C, atom/atom_a, atom/atom_b, linename) + if(!C || !atom_a || !atom_b) + stack_trace("Buildmode effect created with odd inputs") + return name = linename abstract_move(get_turf(atom_a)) I = image('icons/misc/mark.dmi', src, "line", 19.0) diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm index 69ce2b4a4075..a3ece1cce8c6 100644 --- a/code/modules/cargo/bounties/reagent.dm +++ b/code/modules/cargo/bounties/reagent.dm @@ -238,10 +238,6 @@ /datum/reagent/medicine/atropine,\ /datum/reagent/medicine/cryoxadone,\ /datum/reagent/medicine/salbutamol,\ - /*WS Begin - No Cobby - /datum/reagent/medicine/C2/hercuri,\ - /datum/reagent/medicine/C2/probital,\ - WS End */ /datum/reagent/drug/methamphetamine,\ /datum/reagent/drug/crank,\ /datum/reagent/nitrous_oxide,\ diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm index 69a9c7d286b4..42aea5437c4b 100644 --- a/code/modules/cargo/gondolapod.dm +++ b/code/modules/cargo/gondolapod.dm @@ -30,6 +30,9 @@ var/obj/structure/closet/supplypod/centcompod/linked_pod /mob/living/simple_animal/pet/gondola/gondolapod/Initialize(mapload, pod) + if(!pod) + stack_trace("Gondola pod created with no pod") + return INITIALIZE_HINT_QDEL linked_pod = pod name = linked_pod.name . = ..() @@ -73,6 +76,6 @@ update_appearance() /mob/living/simple_animal/pet/gondola/gondolapod/death() - qdel(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death + QDEL_NULL(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death qdel(src) ..() diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 314484a5a668..e1568ae1adee 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -43,7 +43,7 @@ var/openingSound //Admin sound to play when the pod opens var/leavingSound //Admin sound to play when the pod leaves var/soundVolume = 80 //Volume to play sounds at. Ignores the cap - var/bay //Used specifically for the centcom_podlauncher datum. Holds the current bay the user is launching objects from. Bays are specific rooms on the centcom map. + var/area/bay //Used specifically for the centcom_podlauncher datum. Holds the current bay the user is launching objects from. Bays are specific rooms on the centcom map. var/list/explosionSize = list(0,0,2,3) var/stay_after_drop = FALSE var/specialised = FALSE // It's not a general use pod for cargo/admin use @@ -549,6 +549,9 @@ /obj/effect/pod_landingzone/Initialize(mapload, podParam, single_order = null, clientman) . = ..() + if(!podParam) + stack_trace("Pod landingzone created with no pod") + return INITIALIZE_HINT_QDEL if (ispath(podParam)) //We can pass either a path for a pod (as expressconsoles do), or a reference to an instantiated pod (as the centcom_podlauncher does) podParam = new podParam() //If its just a path, instantiate it pod = podParam diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 991a10b58331..f1fe218b175b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1342,24 +1342,22 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/check_quirk_compatibility(mob/user) var/list/quirk_conflicts = list() var/list/handled_conflicts = list() - for(var/quirk_index in SSquirks.quirk_instances) - var/datum/quirk/quirk_instance = SSquirks.quirk_instances[quirk_index] - if(!quirk_instance) - continue - if(quirk_instance.mood_quirk && CONFIG_GET(flag/disable_human_mood)) - quirk_conflicts[quirk_instance.name] = "Mood and mood quirks are disabled." + for(var/quirk_name in SSquirks.quirks) + var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] + if(initial(quirk_type.mood_quirk) && CONFIG_GET(flag/disable_human_mood)) + quirk_conflicts[quirk_name] = "Mood and mood quirks are disabled." if(!handled_conflicts["mood"]) handle_quirk_conflict("mood", null, user) handled_conflicts["mood"] = TRUE - if(((quirk_instance.species_lock["type"] == "allowed") && !(pref_species.id in quirk_instance.species_lock)) || (quirk_instance.species_lock["type"] == "blocked" && (pref_species.id in quirk_instance.species_lock))) - quirk_conflicts[quirk_instance.name] = "Quirk unavailable to species." + if((quirk_name in SSquirks.species_blacklist) && (pref_species.id in SSquirks.species_blacklist[quirk_name])) + quirk_conflicts[quirk_name] = "Quirk unavailable to species." if(!handled_conflicts["species"]) handle_quirk_conflict("species", pref_species, user) handled_conflicts["species"] = TRUE for(var/blacklist in SSquirks.quirk_blacklist) for(var/quirk_blacklisted in all_quirks) - if((quirk_blacklisted in blacklist) && !quirk_conflicts[quirk_instance.name] && (quirk_instance.name in blacklist) && !(quirk_instance.name == quirk_blacklisted)) - quirk_conflicts[quirk_instance.name] = "Quirk is mutually exclusive with [quirk_blacklisted]." + if((quirk_blacklisted in blacklist) && !quirk_conflicts[quirk_name] && (quirk_name in blacklist) && !(quirk_name == quirk_blacklisted)) + quirk_conflicts[quirk_name] = "Quirk is mutually exclusive with [quirk_blacklisted]." if(!handled_conflicts["blacklist"]) handle_quirk_conflict("blacklist", null, user) handled_conflicts["blacklist"] = TRUE @@ -1382,24 +1380,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) target_species = additional_argument else return - for(var/quirk_owned in all_quirks) - var/datum/quirk/quirk_owned_instance = SSquirks.quirk_instances[quirk_owned] - balance -= quirk_owned_instance.value + for(var/quirk_name in all_quirks) + var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] + balance -= initial(quirk_type.value) switch(change_type) if("species") - if(((quirk_owned_instance.species_lock["type"] == "allowed") && !(target_species.id in quirk_owned_instance.species_lock)) || ((quirk_owned_instance.species_lock["type"] == "blocked") && (target_species.id in quirk_owned_instance.species_lock))) - all_quirks_new -= quirk_owned_instance.name - balance += quirk_owned_instance.value + if((quirk_name in SSquirks.species_blacklist) && (pref_species.id in SSquirks.species_blacklist[quirk_name])) + all_quirks_new -= quirk_name + balance += initial(quirk_type.value) if("mood") - if(quirk_owned_instance.mood_quirk) - all_quirks_new -= quirk_owned_instance.name - balance += quirk_owned_instance.value + if(initial(quirk_type.mood_quirk)) + all_quirks_new -= quirk_name + balance += initial(quirk_type.value) if("blacklist") for(var/blacklist in SSquirks.quirk_blacklist) for(var/quirk_blacklisted in all_quirks_new) - if((quirk_blacklisted in blacklist) && (quirk_owned_instance.name in blacklist) && !(quirk_owned_instance.name == quirk_blacklisted)) - all_quirks_new -= quirk_owned_instance.name - balance += quirk_owned_instance.value + if((quirk_blacklisted in blacklist) && (quirk_name in blacklist) && !(quirk_name == quirk_blacklisted)) + all_quirks_new -= quirk_name + balance += initial(quirk_type.value) if(balance < 0) var/list/positive_quirks = list() for(var/quirk_owned in all_quirks_new) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 9f0a56d1d476..b35942dbc138 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -151,7 +151,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(ITEM_SLOT_HEAD) == src) + if(H.get_item_by_slot(ITEM_SLOT_HEAD) == src && !QDELETED(src)) //This can be called as a part of destroy user.remove_language(/datum/language/piratespeak/, TRUE, TRUE, LANGUAGE_HAT) to_chat(user, "You can no longer speak like a pirate.") diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index c59f5b3aeeed..9c1bf3acdc0c 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -65,6 +65,7 @@ /obj/item/clothing/suit/space/chronos/Destroy() dropped() + QDEL_NULL(teleport_now) return ..() /obj/item/clothing/suit/space/chronos/emp_act(severity) @@ -332,6 +333,10 @@ check_flags = AB_CHECK_CONSCIOUS //|AB_CHECK_INSIDE var/obj/item/clothing/suit/space/chronos/chronosuit = null +/datum/action/innate/chrono_teleport/Destroy() + chronosuit = null + return ..() + /datum/action/innate/chrono_teleport/IsAvailable() return (chronosuit && chronosuit.activated && chronosuit.camera && !chronosuit.teleporting) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 9b044b8cf0b9..1cdcec95d05f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -31,6 +31,10 @@ /obj/item/clothing/head/helmet/space/hardsuit/Destroy() . = ..() + if(!QDELETED(suit)) + qdel(suit) + suit = null + QDEL_NULL(soundloop) STOP_PROCESSING(SSobj, src) /obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) @@ -111,7 +115,6 @@ greyscale_colors = list(list(11, 19), list(22, 12), list(16, 9)) greyscale_icon_state = "hardsuit" - /obj/item/clothing/suit/space/hardsuit/Initialize() if(jetpack && ispath(jetpack)) jetpack = new jetpack(src) @@ -907,6 +910,7 @@ slowdown = 0 shield_state = "shield-red" shield_on = "shield-red" + jetpack = /obj/item/tank/jetpack/suit /obj/item/clothing/suit/space/hardsuit/shielded/syndi/multitool_act(mob/living/user, obj/item/I) . = ..() @@ -925,10 +929,6 @@ to_chat(user, "You update the hardsuit's hardware, changing back the shield's color to red.") user.update_inv_wear_suit() -/obj/item/clothing/suit/space/hardsuit/shielded/syndi/Initialize() - jetpack = new /obj/item/tank/jetpack/suit(src) - . = ..() - /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi name = "blood-red hardsuit helmet" desc = "An advanced hardsuit helmet with built in energy shielding." @@ -1244,6 +1244,10 @@ . = ..() jump = new(src) +/obj/item/clothing/suit/space/hardsuit/quixote/Destroy() + QDEL_NULL(jump) + return ..() + /obj/item/clothing/suit/space/hardsuit/quixote/equipped(mob/user, slot) . = ..() if(slot == ITEM_SLOT_OCLOTHING) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 9379f52314df..4255335cda74 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -137,10 +137,11 @@ . = ..() /obj/item/clothing/suit/space/hardsuit/Destroy() - if(helmet) + if(!QDELETED(helmet)) helmet.suit = null qdel(helmet) - qdel(jetpack) + helmet = null + QDEL_NULL(jetpack) return ..() /obj/item/clothing/head/helmet/space/hardsuit/Destroy() diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index ea58a2ae65ff..e3e8be62bab7 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -11,6 +11,10 @@ var/datum/component/storage/detached_pockets var/attachment_slot = CHEST +/obj/item/clothing/accessory/Destroy() + set_detached_pockets(null) + return ..() + /obj/item/clothing/accessory/proc/can_attach_accessory(obj/item/clothing/U, mob/user) if(!attachment_slot || (U && U.body_parts_covered & attachment_slot)) return TRUE @@ -23,7 +27,7 @@ if(SEND_SIGNAL(U, COMSIG_CONTAINS_STORAGE)) return FALSE U.TakeComponent(storage) - detached_pockets = storage + set_detached_pockets(storage) U.attached_accessory = src forceMove(U) layer = FLOAT_LAYER @@ -66,6 +70,17 @@ U.attached_accessory = null U.accessory_overlay = null +/obj/item/clothing/accessory/proc/set_detached_pockets(new_pocket) + if(detached_pockets) + UnregisterSignal(detached_pockets, COMSIG_PARENT_QDELETING) + detached_pockets = new_pocket + if(detached_pockets) + RegisterSignal(detached_pockets, COMSIG_PARENT_QDELETING, .proc/handle_pockets_del) + +/obj/item/clothing/accessory/proc/handle_pockets_del(datum/source) + SIGNAL_HANDLER + set_detached_pockets(null) + /obj/item/clothing/accessory/proc/on_uniform_equip(obj/item/clothing/under/U, user) return diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index 2a0bc21722a5..b236f4fa5aa1 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -66,7 +66,7 @@ /obj/add_blood_DNA(list/dna) . = ..() - if(length(dna)) + if(length(dna) && !QDELETED(src)) . = AddComponent(/datum/component/forensics, null, null, dna) /obj/item/clothing/gloves/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) diff --git a/code/modules/economy/selling_pad.dm b/code/modules/economy/selling_pad.dm index 5dadf5911ce3..56cafbc35a72 100644 --- a/code/modules/economy/selling_pad.dm +++ b/code/modules/economy/selling_pad.dm @@ -76,7 +76,7 @@ /obj/machinery/computer/selling_pad_control/ui_data(mob/user) var/list/data = list() data["points"] = sell_account.account_balance - data["pad"] = pad.resolve() ? TRUE : FALSE + data["pad"] = pad?.resolve() ? TRUE : FALSE data["sending"] = sending data["status_report"] = status_report return data diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 7d9454aa6cf7..668aaf6195a6 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -129,7 +129,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) #ifdef UNIT_TESTS if(GLOB.current_test) //good day, sir - GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]") + GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]", file = E.file, line = E.line) #endif diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 3a7090a65319..ff02f77edaa4 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -16,9 +16,9 @@ for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list) Ian.place_on_head(new /obj/item/bedsheet(Ian)) - for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_living_list) - new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc) - qdel(Poly) + for(var/mob/living/simple_animal/parrot/Polly/Polly in GLOB.mob_living_list) + new /mob/living/simple_animal/parrot/Polly/ghost(Polly.loc) + qdel(Polly) /datum/round_event/spooky/announce(fake) priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE") diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 952f83b36503..45e9551ae25a 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -541,7 +541,7 @@ if(!override) qdel(src) -/obj/structure/spacevine/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/spacevine/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(isvineimmune(mover)) return TRUE diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index e54096b6617c..5232f81bb696 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -83,8 +83,9 @@ if(!(resistance_flags & ON_FIRE) && !force) return QDEL_HINT_LETMELIVE - SSticker.round_end_events -= roundend_callback GLOB.poi_list.Remove(src) + LAZYREMOVE(SSticker.round_end_events, roundend_callback) + roundend_callback = null //This ought to free the callback datum, and prevent us from harddeling for(var/i in GLOB.player_list) var/mob/M = i var/message = "A dark temptation has passed from this world" diff --git a/code/modules/fields/fields.dm b/code/modules/fields/fields.dm deleted file mode 100644 index 13c6f35a69df..000000000000 --- a/code/modules/fields/fields.dm +++ /dev/null @@ -1,324 +0,0 @@ - -//Movable and easily code-modified fields! Allows for custom AOE effects that affect movement and anything inside of them, and can do custom turf effects! -//Supports automatic recalculation/reset on movement. -//If there's any way to make this less CPU intensive than I've managed, gimme a call or do it yourself! - kevinz000 - -//Field shapes -#define FIELD_NO_SHAPE 0 //Does not update turfs automatically -#define FIELD_SHAPE_RADIUS_SQUARE 1 //Uses current_range and square_depth_up/down -#define FIELD_SHAPE_CUSTOM_SQUARE 2 //Uses square_height and square_width and square_depth_up/down - -//Proc to make fields. make_field(field_type, field_params_in_associative_list) -/proc/make_field(field_type, list/field_params, override_checks = FALSE, start_field = TRUE) - var/datum/proximity_monitor/advanced/F = new field_type() - if(!F.assume_params(field_params) && !override_checks) - QDEL_NULL(F) - if(!F.check_variables() && !override_checks) - QDEL_NULL(F) - if(start_field && (F || override_checks)) - F.begin_field() - return F - -/datum/proximity_monitor/advanced - var/name = "\improper Energy Field" - //Field setup specifications - var/field_shape = FIELD_NO_SHAPE - var/square_height = 0 - var/square_width = 0 - var/square_depth_up = 0 - var/square_depth_down = 0 - //Processing - var/process_inner_turfs = FALSE //Don't do this unless it's absolutely necessary - var/process_edge_turfs = FALSE //Don't do this either unless it's absolutely necessary, you can just track what things are inside manually or on the initial setup. - var/requires_processing = FALSE - var/setup_edge_turfs = FALSE //Setup edge turfs/all field turfs. Set either or both to ON when you need it, it's defaulting to off unless you do to save CPU. - var/setup_field_turfs = FALSE - var/use_host_turf = FALSE //For fields from items carried on mobs to check turf instead of loc... - - var/list/turf/field_turfs = list() - var/list/turf/edge_turfs = list() - var/list/turf/field_turfs_new = list() - var/list/turf/edge_turfs_new = list() - -/datum/proximity_monitor/advanced/Destroy() - full_cleanup() - STOP_PROCESSING(SSfields, src) - return ..() - -/datum/proximity_monitor/advanced/proc/assume_params(list/field_params) - var/pass_check = TRUE - for(var/param in field_params) - if(vars[param] || isnull(vars[param]) || (param in vars)) - vars[param] = field_params[param] - else - pass_check = FALSE - return pass_check - -/datum/proximity_monitor/advanced/proc/check_variables() - var/pass = TRUE - if(field_shape == FIELD_NO_SHAPE) //If you're going to make a manually updated field you shouldn't be using automatic checks so don't. - pass = FALSE - if(current_range < 0 || square_height < 0 || square_width < 0 || square_depth_up < 0 || square_depth_down < 0) - pass = FALSE - if(!istype(host)) - pass = FALSE - return pass - -/datum/proximity_monitor/advanced/process() - if(process_inner_turfs) - for(var/turf/T in field_turfs) - process_inner_turf(T) - CHECK_TICK //Really crappy lagchecks, needs improvement once someone starts using processed fields. - if(process_edge_turfs) - for(var/turf/T in edge_turfs) - process_edge_turf(T) - CHECK_TICK //Same here. - -/datum/proximity_monitor/advanced/proc/process_inner_turf(turf/T) - -/datum/proximity_monitor/advanced/proc/process_edge_turf(turf/T) - -/datum/proximity_monitor/advanced/New() - if(requires_processing) - START_PROCESSING(SSfields, src) - -/datum/proximity_monitor/advanced/proc/begin_field() - setup_field() - post_setup_field() - -/datum/proximity_monitor/advanced/proc/full_cleanup() //Full cleanup for when you change something that would require complete resetting. - for(var/turf/T in edge_turfs) - cleanup_edge_turf(T) - for(var/turf/T in field_turfs) - cleanup_field_turf(T) - -/datum/proximity_monitor/advanced/proc/check_movement() - if(!use_host_turf) - if(host.loc != last_host_loc) - last_host_loc = host.loc - return TRUE - else - if(get_turf(host) != last_host_loc) - last_host_loc = get_turf(host) - return TRUE - return FALSE - -/datum/proximity_monitor/advanced/proc/recalculate_field(ignore_movement_check = FALSE) //Call every time the field moves (done automatically if you use update_center) or a setup specification is changed. - if(!(ignore_movement_check || check_movement()) && (field_shape != FIELD_NO_SHAPE)) - return - update_new_turfs() - var/list/turf/needs_setup = field_turfs_new.Copy() - if(setup_field_turfs) - for(var/turf/T in field_turfs) - if(!(T in needs_setup)) - cleanup_field_turf(T) - else - needs_setup -= T - CHECK_TICK - for(var/turf/T in needs_setup) - setup_field_turf(T) - CHECK_TICK - if(setup_edge_turfs) - for(var/turf/T in edge_turfs) - cleanup_edge_turf(T) - CHECK_TICK - for(var/turf/T in edge_turfs_new) - setup_edge_turf(T) - CHECK_TICK - -/datum/proximity_monitor/advanced/proc/field_turf_canpass(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F, turf/entering) - return TRUE - -/datum/proximity_monitor/advanced/proc/field_turf_crossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F) - return TRUE - -/datum/proximity_monitor/advanced/proc/field_turf_uncrossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F) - return TRUE - -/datum/proximity_monitor/advanced/proc/field_edge_canpass(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F, turf/entering) - return TRUE - -/datum/proximity_monitor/advanced/proc/field_edge_crossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) - return TRUE - -/datum/proximity_monitor/advanced/proc/field_edge_uncrossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) - return TRUE - -/datum/proximity_monitor/advanced/HandleMove() - var/atom/_host = host - var/atom/new_host_loc = _host.loc - if(last_host_loc != new_host_loc) - INVOKE_ASYNC(src, .proc/recalculate_field) - -/datum/proximity_monitor/advanced/proc/post_setup_field() - -/datum/proximity_monitor/advanced/proc/setup_field() - update_new_turfs() - if(setup_field_turfs) - for(var/turf/T in field_turfs_new) - setup_field_turf(T) - CHECK_TICK - if(setup_edge_turfs) - for(var/turf/T in edge_turfs_new) - setup_edge_turf(T) - CHECK_TICK - -/datum/proximity_monitor/advanced/proc/cleanup_field_turf(turf/T) - qdel(field_turfs[T]) - field_turfs -= T - -/datum/proximity_monitor/advanced/proc/cleanup_edge_turf(turf/T) - qdel(edge_turfs[T]) - edge_turfs -= T - -/datum/proximity_monitor/advanced/proc/setup_field_turf(turf/T) - field_turfs[T] = new /obj/effect/abstract/proximity_checker/advanced/field_turf(T, src) - -/datum/proximity_monitor/advanced/proc/setup_edge_turf(turf/T) - edge_turfs[T] = new /obj/effect/abstract/proximity_checker/advanced/field_edge(T, src) - -/datum/proximity_monitor/advanced/proc/update_new_turfs() - if(!istype(host)) - return FALSE - var/turf/center = get_turf(host) - field_turfs_new = list() - edge_turfs_new = list() - switch(field_shape) - if(FIELD_NO_SHAPE) - return FALSE - if(FIELD_SHAPE_RADIUS_SQUARE) - for(var/turf/T in block(locate(center.x-current_range,center.y-current_range,center.z-square_depth_down),locate(center.x+current_range, center.y+current_range,center.z+square_depth_up))) - field_turfs_new += T - edge_turfs_new = field_turfs_new.Copy() - if(current_range >= 1) - var/list/turf/center_turfs = list() - for(var/turf/T in block(locate(center.x-current_range+1,center.y-current_range+1,center.z-square_depth_down),locate(center.x+current_range-1, center.y+current_range-1,center.z+square_depth_up))) - center_turfs += T - for(var/turf/T in center_turfs) - edge_turfs_new -= T - if(FIELD_SHAPE_CUSTOM_SQUARE) - for(var/turf/T in block(locate(center.x-square_width,center.y-square_height,center.z-square_depth_down),locate(center.x+square_width, center.y+square_height,center.z+square_depth_up))) - field_turfs_new += T - edge_turfs_new = field_turfs_new.Copy() - if(square_height >= 1 && square_width >= 1) - var/list/turf/center_turfs = list() - for(var/turf/T in block(locate(center.x-square_width+1,center.y-square_height+1,center.z-square_depth_down),locate(center.x+square_width-1, center.y+square_height-1,center.z+square_depth_up))) - center_turfs += T - for(var/turf/T in center_turfs) - edge_turfs_new -= T - -//Gets edge direction/corner, only works with square radius/WDH fields! -/datum/proximity_monitor/advanced/proc/get_edgeturf_direction(turf/T, turf/center_override = null) - var/turf/checking_from = get_turf(host) - if(istype(center_override)) - checking_from = center_override - if(field_shape != FIELD_SHAPE_RADIUS_SQUARE && field_shape != FIELD_SHAPE_CUSTOM_SQUARE) - return - if(!(T in edge_turfs)) - return - switch(field_shape) - if(FIELD_SHAPE_RADIUS_SQUARE) - if(((T.x == (checking_from.x + current_range)) || (T.x == (checking_from.x - current_range))) && ((T.y == (checking_from.y + current_range)) || (T.y == (checking_from.y - current_range)))) - return get_dir(checking_from, T) - if(T.x == (checking_from.x + current_range)) - return EAST - if(T.x == (checking_from.x - current_range)) - return WEST - if(T.y == (checking_from.y - current_range)) - return SOUTH - if(T.y == (checking_from.y + current_range)) - return NORTH - if(FIELD_SHAPE_CUSTOM_SQUARE) - if(((T.x == (checking_from.x + square_width)) || (T.x == (checking_from.x - square_width))) && ((T.y == (checking_from.y + square_height)) || (T.y == (checking_from.y - square_height)))) - return get_dir(checking_from, T) - if(T.x == (checking_from.x + square_width)) - return EAST - if(T.x == (checking_from.x - square_width)) - return WEST - if(T.y == (checking_from.y - square_height)) - return SOUTH - if(T.y == (checking_from.y + square_height)) - return NORTH - -//DEBUG FIELDS -/datum/proximity_monitor/advanced/debug - name = "\improper Color Matrix Field" - field_shape = FIELD_SHAPE_RADIUS_SQUARE - current_range = 5 - var/set_fieldturf_color = "#aaffff" - var/set_edgeturf_color = "#ffaaff" - setup_field_turfs = TRUE - setup_edge_turfs = TRUE - - -/datum/proximity_monitor/advanced/debug/setup_edge_turf(turf/T) - T.color = set_edgeturf_color - ..() - -/datum/proximity_monitor/advanced/debug/cleanup_edge_turf(turf/T) - T.color = initial(T.color) - ..() - if(T in field_turfs) - T.color = set_fieldturf_color - -/datum/proximity_monitor/advanced/debug/setup_field_turf(turf/T) - T.color = set_fieldturf_color - ..() - -/datum/proximity_monitor/advanced/debug/cleanup_field_turf(turf/T) - T.color = initial(T.color) - ..() - -//DEBUG FIELD ITEM -/obj/item/multitool/field_debug - name = "strange multitool" - desc = "Seems to project a colored field!" - var/list/field_params = list("field_shape" = FIELD_SHAPE_RADIUS_SQUARE, "current_range" = 5, "set_fieldturf_color" = "#aaffff", "set_edgeturf_color" = "#ffaaff") - var/field_type = /datum/proximity_monitor/advanced/debug - var/operating = FALSE - var/datum/proximity_monitor/advanced/current = null - var/mob/listeningTo - -/obj/item/multitool/field_debug/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/multitool/field_debug/Destroy() - STOP_PROCESSING(SSobj, src) - QDEL_NULL(current) - listeningTo = null - return ..() - -/obj/item/multitool/field_debug/proc/setup_debug_field() - var/list/new_params = field_params.Copy() - new_params["host"] = src - current = make_field(field_type, new_params) - -/obj/item/multitool/field_debug/attack_self(mob/user) - operating = !operating - to_chat(user, "You turn [src] [operating? "on":"off"].") - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - listeningTo = null - if(!istype(current) && operating) - RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/on_mob_move) - listeningTo = user - setup_debug_field() - else if(!operating) - QDEL_NULL(current) - -/obj/item/multitool/field_debug/dropped() - . = ..() - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - listeningTo = null - -/obj/item/multitool/field_debug/proc/on_mob_move() - SIGNAL_HANDLER - - check_turf(get_turf(src)) - -/obj/item/multitool/field_debug/process() - check_turf(get_turf(src)) - -/obj/item/multitool/field_debug/proc/check_turf(turf/T) - current.HandleMove() diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm deleted file mode 100644 index ce872622b0c3..000000000000 --- a/code/modules/fields/turf_objects.dm +++ /dev/null @@ -1,67 +0,0 @@ - -/obj/effect/abstract/proximity_checker/advanced - name = "field" - desc = "Why can you see energy fields?!" - icon = null - icon_state = null - alpha = 0 - invisibility = INVISIBILITY_ABSTRACT - flags_1 = ON_BORDER_1 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/datum/proximity_monitor/advanced/parent = null - -/obj/effect/abstract/proximity_checker/advanced/Initialize(mapload, _monitor) - if(_monitor) - parent = _monitor - return ..() - -/obj/effect/abstract/proximity_checker/advanced/center - name = "field anchor" - desc = "No." - -/obj/effect/abstract/proximity_checker/advanced/field_turf - name = "energy field" - desc = "Get off my turf!" - -/obj/effect/abstract/proximity_checker/advanced/field_turf/CanAllowThrough(atom/movable/AM, turf/target) - . = ..() - if(parent) - return parent.field_turf_canpass(AM, src, target) - -/obj/effect/abstract/proximity_checker/advanced/field_turf/on_entered(datum/source, atom/movable/AM) - if(parent) - return parent.field_turf_crossed(AM, src) - return TRUE - -/obj/effect/abstract/proximity_checker/advanced/field_turf/on_uncrossed(datum/source, atom/movable/AM) - if(parent) - return parent.field_turf_uncrossed(AM, src) - return TRUE - -/obj/effect/abstract/proximity_checker/advanced/field_edge - name = "energy field edge" - desc = "Edgy description here." - -/obj/effect/abstract/proximity_checker/advanced/field_edge/CanAllowThrough(atom/movable/AM, turf/target) - . = ..() - if(parent) - return parent.field_edge_canpass(AM, src, target) - -/obj/effect/abstract/proximity_checker/advanced/field_edge/on_entered(datum/source, atom/movable/AM) - if(parent) - return parent.field_edge_crossed(AM, src) - return TRUE - -/obj/effect/abstract/proximity_checker/advanced/field_edge/on_uncrossed(datum/source, atom/movable/AM) - if(parent) - return parent.field_edge_uncrossed(AM, src) - return TRUE - -/proc/is_turf_in_field(turf/T, datum/proximity_monitor/advanced/F) //Looking for ways to optimize this! - for(var/obj/effect/abstract/proximity_checker/advanced/O in T) - if(istype(O, /obj/effect/abstract/proximity_checker/advanced/field_edge)) - if(O.parent == F) - return FIELD_EDGE - if(O.parent == F) - return FIELD_TURF - return FALSE diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 176a7183f560..1c4c0aa5377f 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -160,7 +160,7 @@ cast_projectile.original = target cast_projectile.fired_from = src cast_projectile.firer = user - cast_projectile.impacted = list(user = TRUE) + LAZYSET(cast_projectile.impacted, user, TRUE) cast_projectile.preparePixelProjectile(target, user) cast_projectile.fire() diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 61c63b5407b0..7c604a15c22b 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -101,6 +101,9 @@ GLOBAL_LIST_INIT(hallucination_list, list( /obj/effect/hallucination/simple/Initialize(mapload, mob/living/carbon/T) . = ..() + if(!T) + stack_trace("A hallucination was created with no target") + return INITIALIZE_HINT_QDEL target = T current_image = GetImage() if(target.client) @@ -660,7 +663,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.playsound_local(get_turf(airlock), 'sound/machines/boltsup.ogg',30,0,3) qdel(src) -/obj/effect/hallucination/fake_door_lock/CanAllowThrough(atom/movable/mover, turf/_target) +/obj/effect/hallucination/fake_door_lock/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(mover == target && airlock.density) return FALSE diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index db58392b12e7..06c2b28e903c 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -123,7 +123,7 @@ /obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE) if(!isGlass) return - if(QDELING(src) || !target) //Invalid loc + if(QDELING(src) || !target || !(flags_1 & INITIALIZED_1)) //Invalid loc return if(bartender_check(target) && ranged) return diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 327c7b422398..4fa5354339c5 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -59,6 +59,11 @@ RefreshParts() fry_loop = new(list(src), FALSE) +/obj/machinery/deepfryer/Destroy() + QDEL_NULL(frying) + QDEL_NULL(fry_loop) + return ..() + /obj/machinery/deepfryer/RefreshParts() var/oil_efficiency for(var/obj/item/stock_parts/micro_laser/M in component_parts) diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index 90fb5c27ae7b..4c1a8695d838 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -93,8 +93,9 @@ . = ..() /obj/machinery/grill/Destroy() - grilled_item = null - . = ..() + QDEL_NULL(grilled_item) + QDEL_NULL(grill_loop) + return ..() /obj/machinery/grill/handle_atom_del(atom/A) if(A == grilled_item) diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index 72219b159b4d..ba728daf7797 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -40,6 +40,8 @@ /obj/machinery/microwave/Destroy() eject() + QDEL_NULL(soundloop) + QDEL_LIST(ingredients) if(wires) QDEL_NULL(wires) . = ..() diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index e8c31b9c4c7b..ea07e2f70b27 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -89,7 +89,6 @@ and clear when youre done! if you dont i will use :newspaper2: on you /obj/machinery/computer/holodeck/LateInitialize()//from here linked is populated and the program list is generated. its also set to load the offline program linked = GLOB.areas_by_type[mapped_start_area] - bottom_left = locate(linked.x, linked.y, src.z) var/area/computer_area = get_area(src) if(istype(computer_area, /area/holodeck)) @@ -99,7 +98,7 @@ and clear when youre done! if you dont i will use :newspaper2: on you // the following is necessary for power reasons if(!linked) - log_world("No matching holodeck area found") + log_mapping("No matching holodeck area found") qdel(src) return else if (!offline_program) @@ -115,6 +114,7 @@ and clear when youre done! if you dont i will use :newspaper2: on you else linked.power_usage = list(AREA_USAGE_LEN) + bottom_left = locate(linked.x, linked.y, z) COOLDOWN_START(src, holodeck_cooldown, HOLODECK_CD) generate_program_list() load_program(offline_program,TRUE) diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index 3f164952fbb4..9c69b8e89812 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -28,31 +28,36 @@ /obj/effect/holodeck_effect/cards icon = 'icons/obj/toy.dmi' icon_state = "deck_nanotrasen_full" - var/obj/item/toy/cards/deck/D + var/obj/item/toy/cards/deck/deck /obj/effect/holodeck_effect/cards/activate(obj/machinery/computer/holodeck/HC) - D = new(loc) + deck = new(loc) safety(!(HC.obj_flags & EMAGGED)) - D.holo = HC - return D + deck.holo = HC + RegisterSignal(deck, COMSIG_PARENT_QDELETING, .proc/handle_card_delete) + return deck + +/obj/effect/holodeck_effect/cards/proc/handle_card_delete(datum/source) + SIGNAL_HANDLER + deck = null /obj/effect/holodeck_effect/cards/safety(active) - if(!D) + if(!deck) return if(active) - D.card_hitsound = null - D.card_force = 0 - D.card_throwforce = 0 - D.card_throw_speed = 3 - D.card_throw_range = 7 - D.card_attack_verb = list("attacked") + deck.card_hitsound = null + deck.card_force = 0 + deck.card_throwforce = 0 + deck.card_throw_speed = 3 + deck.card_throw_range = 7 + deck.card_attack_verb = list("attacked") else - D.card_hitsound = 'sound/weapons/bladeslice.ogg' - D.card_force = 5 - D.card_throwforce = 10 - D.card_throw_speed = 3 - D.card_throw_range = 7 - D.card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut") + deck.card_hitsound = 'sound/weapons/bladeslice.ogg' + deck.card_force = 5 + deck.card_throwforce = 10 + deck.card_throw_speed = 3 + deck.card_throw_range = 7 + deck.card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut") /obj/effect/holodeck_effect/sparks/activate(obj/machinery/computer/holodeck/HC) @@ -68,24 +73,29 @@ /obj/effect/holodeck_effect/mobspawner var/mobtype = /mob/living/simple_animal/hostile/carp/holocarp - var/mob/mob = null + var/mob/our_mob = null /obj/effect/holodeck_effect/mobspawner/activate(obj/machinery/computer/holodeck/HC) if(islist(mobtype)) mobtype = pick(mobtype) - mob = new mobtype(loc) - mob.flags_1 |= HOLOGRAM_1 + our_mob = new mobtype(loc) + our_mob.flags_1 |= HOLOGRAM_1 // these vars are not really standardized but all would theoretically create stuff on death - for(var/v in list("butcher_results","corpse","weapon1","weapon2","blood_volume") & mob.vars) - mob.vars[v] = null - return mob + for(var/v in list("butcher_results","corpse","weapon1","weapon2","blood_volume") & our_mob.vars) + our_mob.vars[v] = null + RegisterSignal(our_mob, COMSIG_PARENT_QDELETING, .proc/handle_mob_delete) + return our_mob /obj/effect/holodeck_effect/mobspawner/deactivate(obj/machinery/computer/holodeck/HC) - if(mob) - HC.derez(mob) + if(our_mob) + HC.derez(our_mob) qdel(src) +/obj/effect/holodeck_effect/mobspawner/proc/handle_mob_delete(datum/source) + SIGNAL_HANDLER + our_mob = null + /obj/effect/holodeck_effect/mobspawner/pet mobtype = list( /mob/living/simple_animal/butterfly, /mob/living/simple_animal/chick/holo, diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index c7f0ebe190bf..7fa710323207 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -33,6 +33,9 @@ // This is for adminspawn or map-placed growns. They get the default stats of their seed type. seed = new seed() seed.adjust_potency(50-seed.potency) + else if(!seed) + stack_trace("Grown object created without a seed. WTF") + return INITIALIZE_HINT_QDEL pixel_x = base_pixel_x + rand(-5, 5) pixel_y = base_pixel_y + rand(-5, 5) diff --git a/code/modules/hydroponics/grown/cotton.dm b/code/modules/hydroponics/grown/cotton.dm index b9d903ddf72a..ec6618df7fc9 100644 --- a/code/modules/hydroponics/grown/cotton.dm +++ b/code/modules/hydroponics/grown/cotton.dm @@ -38,9 +38,17 @@ seed_modifier = round(seed.potency / 25) var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier) var/old_cotton_amount = cotton.amount - for(var/obj/item/stack/ST in user.loc) - if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount) - ST.attackby(cotton, user) + for(var/obj/item/stack/potential_stack in user.loc) + if(QDELETED(potential_stack)) + continue + if(potential_stack == cotton) + continue + if(!istype(potential_stack, cotton_type)) + continue + if(potential_stack.amount >= potential_stack.max_amount) + continue + potential_stack.attackby(cotton, user) + if(cotton.amount > old_cotton_amount) to_chat(user, "You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].") qdel(src) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index c04bd8ee3195..008009a35765 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -8,7 +8,7 @@ w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE var/plantname = "Plants" // Name of plant when planted. - var/obj/item/product // A type path. The thing that is created when the plant is harvested. + var/obj/item/product // A type path. The thing that is created when the plant is harvested. var/productdesc var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden. @@ -24,7 +24,7 @@ var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested. var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways. var/growthstages = 6 // Amount of growth sprites the plant has. - var/instability = 5 //Chance that a plant will mutate in each stage of it's life. + var/instability = 5 // Chance that a plant will mutate in each stage of it's life. var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to CentCom. var/list/mutatelist = list() // The type of plants that this plant can mutate into. var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info. @@ -35,10 +35,10 @@ // Stronger reagents must always come first to avoid being displaced by weaker ones. // Total amount of any reagent in plant is calculated by formula: 1 + round(potency * multiplier) - var/weed_rate = 1 //If the chance below passes, then this many weeds sprout during growth - var/weed_chance = 5 //Percentage chance per tray update to grow weeds - var/research = 0 //defines "discovery value", which will give a one-time point payout if a seed is given to an R&D console. Seed discovery is determined on a ship-by-ship basis. - var/seed_flags = MUTATE_EARLY //Determines if a plant is allowed to mutate early at 30+ instability + var/weed_rate = 1 // If the chance below passes, then this many weeds sprout during growth + var/weed_chance = 5 // Percentage chance per tray update to grow weeds + var/research = 0 // Defines "discovery value", which will give a one-time point payout if a seed is given to an R&D console. Seed discovery is determined on a ship-by-ship basis. + var/seed_flags = MUTATE_EARLY // Determines if a plant is allowed to mutate early at 30+ instability /obj/item/seeds/Initialize(mapload, nogenes = 0) . = ..() @@ -75,6 +75,11 @@ genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) reagents_from_genes() //quality coding +/obj/item/seeds/Destroy() + if(flags_1 & INITIALIZED_1) + QDEL_LIST(genes) + return ..() + /obj/item/seeds/examine(mob/user) . = ..() . += "Use a pen on it to rename it or change its description." @@ -259,7 +264,7 @@ var/list/data = null if(rid == "blood") // Hack to make blood in plants always O- data = list("blood_type" = "O-") - if(rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin) + if(istype(T) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) // apple tastes of apple. data = T.tastes diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index 10b8a019233d..99eae15ba9ca 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -146,7 +146,9 @@ stop_playing() SSinstruments.on_song_del(src) lines = null - using_instrument = null + if(using_instrument) + using_instrument.songs_using -= src + using_instrument = null allowed_instrument_ids = null parent = null return ..() diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index 9a32cacb53e5..1f42ec424706 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -53,7 +53,9 @@ Key procs var/atom/owner /// Initializes, and copies in the languages from the current atom if available. -/datum/language_holder/New(_owner) +/datum/language_holder/New(atom/_owner) + if(_owner && QDELETED(_owner)) + CRASH("Langauge holder added to a qdeleting thing, what the fuck \ref[_owner]") owner = _owner if(istype(owner, /datum/mind)) var/datum/mind/M = owner diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index c05d901a02cb..a5a68d98d609 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -26,9 +26,7 @@ // Will update the light (duh). // Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() - set waitfor = FALSE - if (QDELETED(src)) - return + SHOULD_NOT_SLEEP(TRUE) if(light_system != STATIC_LIGHT) CRASH("update_light() for [src] with following light_system value: [light_system]") diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index bdc18d230029..7b6bc79aec45 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -34,7 +34,7 @@ /atom/movable/lighting_object/Destroy(force) if (force) SSlighting.objects_queue -= src - if (loc != myturf) + if (loc != myturf && loc) var/turf/oldturf = get_turf(myturf) var/turf/newturf = get_turf(loc) stack_trace("A lighting object was qdeleted with a different loc then it is suppose to have ([COORD(oldturf)] -> [COORD(newturf)])") diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index baf98d801337..fd26e1215f7c 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -2,7 +2,7 @@ for(var/turf/T in world) var/area/A = T.loc if(IS_DYNAMIC_LIGHTING(T) && IS_DYNAMIC_LIGHTING(A)) - new/atom/movable/lighting_object(T) + new /atom/movable/lighting_object(T) // Initial starlight updates used to be done in lighting_object initialize, // but doing them here means ChangeTurf doesn't occasionally update starlight twice. diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index a83591fe97ab..9aeed0602f24 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -61,7 +61,8 @@ source_atom = null source_turf = null pixel_turf = null - . = ..() + + return ..() // Yes this doesn't align correctly on anything other than 4 width tabs. // If you want it to go switch everybody to elastic tab stops. diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 57ffb011c438..39d443929e21 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -149,6 +149,7 @@ for(var/turf/turf_to_disable as anything in border) turf_to_disable.blocks_air = TRUE turf_to_disable.set_sleeping(TRUE) + turf_to_disable.air_update_turf(TRUE) // Accept cached maps, but don't save them automatically - we don't want // ruins clogging up memory for the whole round. diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 5adc1b373471..e9ac7662edab 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -240,12 +240,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/obj/structure/bodycontainer/morgue/j = pick(trays) var/mob/living/carbon/human/h = new /mob/living/carbon/human(j, 1) h.death() - for (var/part in h.internal_organs) //randomly remove organs from each body, set those we keep to be in stasis + for (var/obj/item/organ/internal_organ as anything in h.internal_organs) //randomly remove organs from each body, set those we keep to be in stasis if (prob(40)) - qdel(part) + qdel(internal_organ) else - var/obj/item/organ/O = part - O.organ_flags |= ORGAN_FROZEN + internal_organ.organ_flags |= ORGAN_FROZEN j.update_appearance() qdel(src) @@ -277,11 +276,14 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) new /obj/item/toy/balloon/corgi(thing) else openturfs += thing + //cake + knife to cut it! - var/turf/food_turf = get_turf(pick(table)) - new /obj/item/kitchen/knife(food_turf) - var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf) - iancake.desc = "Happy birthday, Ian!" + if(length(table)) + var/turf/food_turf = get_turf(pick(table)) + new /obj/item/kitchen/knife(food_turf) + var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf) + iancake.desc = "Happy birthday, Ian!" + //some balloons! this picks an open turf and pops a few balloons in and around that turf, yay. for(var/i in 1 to balloon_clusters) var/turf/clusterspot = pick_n_take(openturfs) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 5d412ad6fb8f..5d4db89f59d1 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -172,7 +172,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) /obj/structure/extraction_point/Destroy() GLOB.total_extraction_beacons -= src - ..() + return ..() /obj/effect/extraction_holder name = "extraction holder" diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index bad8c876d39d..dc42690d1b68 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -17,9 +17,12 @@ GLOBAL_LIST(labor_sheet_values) /obj/machinery/mineral/labor_claim_console/Initialize() . = ..() - Radio = new/obj/item/radio(src) + Radio = new /obj/item/radio(src) Radio.listening = FALSE locate_stacking_machine() + //If we can't find a stacking machine end it all ok? + if(!stacking_machine) + return INITIALIZE_HINT_QDEL if(!GLOB.labor_sheet_values) var/sheet_list = list() @@ -30,6 +33,13 @@ GLOBAL_LIST(labor_sheet_values) sheet_list += list(list("ore" = initial(sheet.name), "value" = initial(sheet.point_value))) GLOB.labor_sheet_values = sortList(sheet_list, /proc/cmp_sheet_list) +/obj/machinery/mineral/labor_claim_console/Destroy() + QDEL_NULL(Radio) + if(stacking_machine) + stacking_machine.console = null + stacking_machine = null + return ..() + /proc/cmp_sheet_list(list/a, list/b) return a["value"] - b["value"] @@ -88,9 +98,7 @@ GLOBAL_LIST(labor_sheet_values) /obj/machinery/mineral/labor_claim_console/proc/locate_stacking_machine() stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) if(stacking_machine) - stacking_machine.CONSOLE = src - else - qdel(src) + stacking_machine.console = src /obj/machinery/mineral/labor_claim_console/emag_act(mob/user) if(!(obj_flags & EMAGGED)) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 77947d71043b..698e0a2dae25 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -419,6 +419,12 @@ var/obj/item/warp_cube/linked var/teleporting = FALSE +/obj/item/warp_cube/Destroy() + if(!QDELETED(linked)) + qdel(linked) + linked = null + return ..() + /obj/item/warp_cube/attack_self(mob/user) var/turf/current_location = get_turf(user) var/area/current_area = current_location.loc @@ -944,6 +950,12 @@ . += "This weapon contains a gradual heat accelerator that increases shot power as the weapon's energy stores are depleted. Shots at low power are significantly stronger, but also have incredibly short range." /obj/item/gun/energy/spur/update_appearance() + if(!cell) + chargesound = null + recoil = 1 + fire_sound = 'sound/weapons/spur_high.ogg' + return + var/maxcharge = cell.maxcharge var/charge = cell.charge diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 508cea2c3507..6ac92bd75e34 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -19,16 +19,17 @@ if(needs_item_input && anchored) register_input_turf() -/// Gets the turf in the `input_dir` direction adjacent to the machine, and registers signals for ATOM_ENTERED and ATOM_CREATED. Calls the `pickup_item()` proc when it receives these signals. +/// Gets the turf in the `input_dir` direction adjacent to the machine, and registers signals for ATOM_ENTERED. Calls the `pickup_item()` proc when it receives these signals. +/// DO NOT ADD COMSIG_ATOM_CREATED, SINCE PICKUP_ITEM WILL QDEL THE ITEM AND QDELING AN INITIALISING THING IS STUPID /obj/machinery/mineral/proc/register_input_turf() input_turf = get_step(src, input_dir) if(input_turf) // make sure there is actually a turf - RegisterSignal(input_turf, list(COMSIG_ATOM_CREATED, COMSIG_ATOM_ENTERED), .proc/pickup_item) + RegisterSignal(input_turf, COMSIG_ATOM_ENTERED, .proc/pickup_item) /// Unregisters signals that are registered the machine's input turf, if it has one. /obj/machinery/mineral/proc/unregister_input_turf() if(input_turf) - UnregisterSignal(input_turf, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_CREATED)) + UnregisterSignal(input_turf, COMSIG_ATOM_ENTERED) /obj/machinery/mineral/Moved() . = ..() @@ -135,6 +136,8 @@ var/datum/material/selected_material = null var/selected_alloy = null var/datum/techweb/stored_research + ///Proximity monitor associated with this atom, needed for proximity checks. + var/datum/proximity_monitor/proximity_monitor /obj/machinery/mineral/processing_unit/Initialize() . = ..() diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 68c9666aa9eb..4f1cc8a08bc1 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -16,7 +16,13 @@ . = ..() machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) if (machine) - machine.CONSOLE = src + machine.console = src + +/obj/machinery/mineral/stacking_unit_console/Destroy() + if(machine) + machine.console = null + machine = null + return ..() /obj/machinery/mineral/stacking_unit_console/multitool_act(mob/living/user, obj/item/I) if(!multitool_check_buffer(user, I)) @@ -78,13 +84,15 @@ circuit = /obj/item/circuitboard/machine/stacking_machine input_dir = EAST output_dir = WEST - var/obj/machinery/mineral/stacking_unit_console/CONSOLE + var/obj/machinery/mineral/stacking_unit_console/console var/stk_types = list() var/stk_amt = list() var/stack_list[0] //Key: Type. Value: Instance of type. var/stack_amt = 50 //amount to stack before releassing var/datum/component/remote_materials/materials var/force_connect = FALSE + ///Proximity monitor associated with this atom, needed for proximity checks. + var/datum/proximity_monitor/proximity_monitor /obj/machinery/mineral/stacking_machine/Initialize(mapload) . = ..() @@ -92,7 +100,9 @@ materials = AddComponent(/datum/component/remote_materials, "stacking", mapload, FALSE, mapload && force_connect) /obj/machinery/mineral/stacking_machine/Destroy() - CONSOLE = null + if(console) + console.machine = null + console = null materials = null return ..() @@ -103,8 +113,8 @@ /obj/machinery/mineral/stacking_machine/multitool_act(mob/living/user, obj/item/multitool/M) if(istype(M)) if(istype(M.buffer, /obj/machinery/mineral/stacking_unit_console)) - CONSOLE = M.buffer - CONSOLE.machine = src + console = M.buffer + console.machine = src to_chat(user, "You link [src] to the console in [M]'s buffer.") return TRUE diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 6df19e1a11de..707d68a871f7 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -48,6 +48,7 @@ /mob/living/simple_animal/hostile/mining_drone/Initialize() . = ..() + stored_gun = new(src) var/datum/action/innate/minedrone/toggle_light/toggle_light_action = new() toggle_light_action.Grant(src) @@ -68,6 +69,7 @@ /mob/living/simple_animal/hostile/mining_drone/Destroy() + QDEL_NULL(stored_gun) for (var/datum/action/innate/minedrone/action in actions) qdel(action) return ..() @@ -140,16 +142,14 @@ to_chat(M, "[src] has been set to attack hostile wildlife.") return -/mob/living/simple_animal/hostile/mining_drone/CanAllowThrough(atom/movable/O) +/mob/living/simple_animal/hostile/mining_drone/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(istype(O, /obj/projectile/kinetic)) - var/obj/projectile/kinetic/K = O - if(K.kinetic_gun) - for(var/A in K.kinetic_gun.get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - if(istype(M, /obj/item/borg/upgrade/modkit/minebot_passthrough)) - return TRUE - if(istype(O, /obj/projectile/destabilizer)) + if(istype(mover, /obj/projectile/kinetic)) + var/obj/projectile/kinetic/projectile = mover + if(projectile.kinetic_gun) + if (locate(/obj/item/borg/upgrade/modkit/minebot_passthrough) in projectile.kinetic_gun.modkits) + return TRUE + else if(istype(mover, /obj/projectile/destabilizer)) return TRUE /mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior() diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 2b93f03deb72..67379f1df8b5 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -129,7 +129,7 @@ icon_state = "wasteplanet_sand" item_state = "wasteplanet_sand" singular_name = "rocky dust" - grind_results = list(/datum/reagent/silicon = 10, /datum/reagent/lithium = 2, /datum/reagent/radium = 1, /datum/reagent/chlorine = 1, /datum/reagent/aluminium = 1)//may be unsafe for human consumption + grind_results = list(/datum/reagent/silicon = 10, /datum/reagent/lithium = 2, /datum/reagent/uranium/radium = 1, /datum/reagent/chlorine = 1, /datum/reagent/aluminium = 1)//may be unsafe for human consumption /obj/item/stack/ore/glass/beach name = "beige sand pile" diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 3d22ed748ea7..ee74d0475a34 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -99,6 +99,10 @@ INITIALIZE_IMMEDIATE(/mob/dead) /mob/dead/auto_deadmin_on_login() return +/mob/dead/Destroy() + LAZYREMOVEASSOC(SSmobs.dead_players_by_virtual_z, "[virtual_z()]", src) + return ..() + /mob/dead/Login() . = ..() if(!client) diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index 373950e296dc..5c47ccd6d526 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -6,8 +6,8 @@ client.set_db_player_flags() if(!mind) mind = new /datum/mind(key) - mind.active = 1 - mind.current = src + mind.active = TRUE + mind.set_current(src) . = ..() if(!. || !client) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 6597e5282a9f..6f37de4c4c77 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -422,8 +422,10 @@ if(mind) if(transfer_after) mind.late_joiner = TRUE - mind.active = 0 //we wish to transfer the key manually - mind.transfer_to(H) //won't transfer key since the mind is not active + mind.active = FALSE //we wish to transfer the key manually + mind.original_character_slot_index = client.prefs.default_slot + mind.transfer_to(H) //won't transfer key since the mind is not active + mind.set_original_character(H) H.name = real_name client.init_verbs() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index a577cbcc9f25..a986fc5be298 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -179,7 +179,6 @@ if(blood_id == /datum/reagent/blood) //actual blood reagent var/blood_data = list() //set the blood data - blood_data["donor"] = src blood_data["viruses"] = list() for(var/thing in diseases) @@ -280,6 +279,8 @@ break if(!B) B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses()) + if(QDELETED(B)) //Give it up + return B.bloodiness = min((B.bloodiness + BLOOD_AMOUNT_PER_DECAL), BLOOD_POOL_MAX) B.transfer_mob_blood_dna(src) //give blood info to the blood decal. if(temp_blood_DNA) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index b87ebfc0a97d..80daa8de3e3c 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -28,13 +28,14 @@ stored_dna.species = new rando_race() /mob/living/brain/Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat!=DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - if(mind) //You aren't allowed to return to brains that don't exist - mind.current = null - ghostize() //Ghostize checks for key so nothing else is necessary. + if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. + if(stat!=DEAD) //If not dead. + death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA + if(mind) //You aren't allowed to return to brains that don't exist + mind.set_current(null) + ghostize() //Ghostize checks for key so nothing else is necessary. container = null + QDEL_NULL(stored_dna) return ..() /mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up. diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 3f55549c3b6f..a70520462f39 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -184,6 +184,9 @@ if(brainmob) QDEL_NULL(brainmob) QDEL_LIST(traumas) + + if(owner?.mind) //You aren't allowed to return to brains that don't exist + owner.mind.set_current(null) return ..() /obj/item/organ/brain/on_life() diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 3c1bebae21ac..186dedcc86d5 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -37,7 +37,7 @@ if(!hit_atom) return if(!isliving(hit_atom)) - if(hit_atom.density && !hit_atom.CanPass(src)) + if(hit_atom.density && !hit_atom.CanPass(src, get_dir(hit_atom, src))) visible_message("[src] smashes into [hit_atom]!", "[src] smashes into [hit_atom]!") Paralyze(40, ignore_canstun = TRUE) return diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index ee011b69715c..39958b84fc0d 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -71,6 +71,10 @@ var/obj/item/clothing/mask/facehugger_item/hugger_item = BecomeItem() user.put_in_hands(hugger_item) +/mob/living/simple_animal/hostile/facehugger/Destroy() + mask_facehugger?.facehugger_mob = null + return ..() + /** * Attempts to have the facehugger couple with the given target. Checks all possibilities and plays them out accordingly. * diff --git a/code/modules/mob/living/carbon/alien/utilities/structures.dm b/code/modules/mob/living/carbon/alien/utilities/structures.dm index 6989434995f9..3ebba3ed7958 100644 --- a/code/modules/mob/living/carbon/alien/utilities/structures.dm +++ b/code/modules/mob/living/carbon/alien/utilities/structures.dm @@ -310,6 +310,8 @@ var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive layer = MOB_LAYER var/mob/living/simple_animal/hostile/facehugger/child + ///Proximity monitor associated with this atom, needed for proximity checks. + var/datum/proximity_monitor/proximity_monitor /obj/structure/alien/egg/Initialize(mapload) . = ..() @@ -364,13 +366,13 @@ /obj/structure/alien/egg/proc/Grow() status = GROWN update_appearance() - proximity_monitor.SetRange(1) + proximity_monitor.set_range(1) //drops and kills the hugger if any is remaining /obj/structure/alien/egg/proc/Burst(kill = TRUE) if(status == GROWN || status == GROWING) - proximity_monitor.SetRange(0) status = BURST + proximity_monitor.set_range(0) update_appearance() flick("egg_opening", src) addtimer(CALLBACK(src, .proc/finish_bursting, kill), 15) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f6bf7d8d08ab..84f67c8f8814 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -11,6 +11,7 @@ QDEL_LIST(hand_bodyparts) QDEL_LIST(internal_organs) + internal_organs_slot.Cut() QDEL_LIST(bodyparts) QDEL_LIST(implants) remove_from_all_data_huds() diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index d38b04d9c714..3a4591fabb98 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -385,7 +385,7 @@ blown_kiss.original = target blown_kiss.fired_from = user blown_kiss.firer = user // don't hit ourself that would be really annoying - blown_kiss.impacted = list(user = TRUE) // just to make sure we don't hit the wearer + LAZYSET(blown_kiss.impacted, user, TRUE) // just to make sure we don't hit the wearer blown_kiss.preparePixelProjectile(target, user) blown_kiss.fire() qdel(src) @@ -411,7 +411,7 @@ blown_kiss.original = taker blown_kiss.fired_from = offerer blown_kiss.firer = offerer // don't hit ourself that would be really annoying - blown_kiss.impacted = list(offerer = TRUE) // just to make sure we don't hit the wearer + LAZYSET(blown_kiss.impacted, offerer, TRUE) // just to make sure we don't hit the wearer blown_kiss.preparePixelProjectile(taker, offerer) blown_kiss.suppressed = SUPPRESSED_VERY // this also means it's a direct offer blown_kiss.fire() diff --git a/code/modules/mob/living/carbon/hologram/hologram.dm b/code/modules/mob/living/carbon/hologram/hologram.dm index 9479a2357c36..840488a3c120 100644 --- a/code/modules/mob/living/carbon/hologram/hologram.dm +++ b/code/modules/mob/living/carbon/hologram/hologram.dm @@ -225,7 +225,7 @@ var/formatted_laws = "Hologram law:\n" formatted_laws += flavortext ? "[flavortext]" : "No laws set!" //If flavortext set, show it, else show "No laws set!" formatted_laws += "\nEmergency holograms are ghost spawns that can majorly affect the round due to their versatility. Act with common sense.\n"+\ - "Using the role to grief or metagame against your set laws will be met with a silicon ban.\n" + "Using the role to grief or metagame against your set laws will be met with a silicon ban.\n" var/policy = get_policy(ROLE_POSIBRAIN) //if we need something different than the use of posibrains for policy and bans, ping mark and he'll add a new define for it if(policy) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d1ec98b84d4b..ecd847b3b37f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -40,6 +40,7 @@ /mob/living/carbon/human/Destroy() QDEL_NULL(physiology) + QDEL_LIST(bioware) GLOB.human_list -= src return ..() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 25651680b46d..fb2071302cb1 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -141,7 +141,7 @@ if(istype(AM, /obj/item)) I = AM throwpower = I.throwforce - if(I.thrownby == src) //No throwing stuff at yourself to trigger hit reactions + if(I.thrownby == WEAKREF(src)) //No throwing stuff at yourself to trigger hit reactions return ..() if(check_shields(AM, throwpower, "\the [AM.name]", THROWN_PROJECTILE_ATTACK)) hitpush = FALSE diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index c54c453dc15f..551e60501940 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -60,7 +60,7 @@ if(dongle.translate_binary) return TRUE -/mob/living/carbon/human/radio(message, list/message_mods = list(), list/spans, language) //Poly has a copy of this, lazy bastard +/mob/living/carbon/human/radio(message, list/message_mods = list(), list/spans, language) //Polly has a copy of this, lazy bastard . = ..() if(. != FALSE) return . diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 5f4a7d708e80..0379bca7bb34 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -54,6 +54,7 @@ /datum/species/golem/random name = "Random Golem" + id = "random golem" changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN var/static/list/random_golem_types @@ -445,7 +446,7 @@ var/obj/item/I if(istype(AM, /obj/item)) I = AM - if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport + if(I.thrownby == WEAKREF(H)) //No throwing stuff at yourself to trigger the teleport return 0 else reactive_teleport(H) @@ -577,7 +578,7 @@ var/obj/item/I if(istype(AM, /obj/item)) I = AM - if(I.thrownby == H) //No throwing stuff at yourself to make bananas + if(I.thrownby == WEAKREF(H)) //No throwing stuff at yourself to make bananas return 0 else new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 084113dd1b7f..94cd1523344a 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -525,18 +525,25 @@ examine_limb_id = SPECIES_JELLYPERSON +//Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW +/datum/species/jelly/luminescent/Destroy(force, ...) + current_extract = null + QDEL_NULL(glow) + QDEL_NULL(integrate_extract) + QDEL_NULL(extract_major) + QDEL_NULL(extract_minor) + return ..() + + /datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) ..() if(current_extract) current_extract.forceMove(C.drop_location()) current_extract = null - qdel(glow) - if(integrate_extract) - integrate_extract.Remove(C) - if(extract_minor) - extract_minor.Remove(C) - if(extract_major) - extract_major.Remove(C) + QDEL_NULL(glow) + QDEL_NULL(integrate_extract) + QDEL_NULL(extract_major) + QDEL_NULL(extract_minor) /datum/species/jelly/luminescent/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() @@ -558,7 +565,7 @@ /datum/species/jelly/luminescent/proc/update_glow(mob/living/carbon/C, intensity) if(intensity) glow_intensity = intensity - glow.set_light(glow_intensity, glow_intensity, C.dna.features["mcolor"]) + glow.set_light_range_power_color(glow_intensity, glow_intensity, C.dna.features["mcolor"]) /obj/effect/dummy/luminescent_glow name = "luminescent glow" @@ -582,13 +589,9 @@ button_icon_state = "slimeconsume" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" - var/datum/species/jelly/luminescent/species - -/datum/action/innate/integrate_extract/New(_species) - ..() - species = _species /datum/action/innate/integrate_extract/proc/update_name() + var/datum/species/jelly/luminescent/species = target if(!species || !species.current_extract) name = "Integrate Extract" desc = "Eat a slime extract to use its properties." @@ -597,6 +600,7 @@ desc = "Eject your current slime extract." /datum/action/innate/integrate_extract/UpdateButtonIcon(status_only, force) + var/datum/species/jelly/luminescent/species = target if(!species || !species.current_extract) button_icon_state = "slimeconsume" else @@ -605,11 +609,13 @@ /datum/action/innate/integrate_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) ..(current_button, TRUE) - if(species && species.current_extract) + var/datum/species/jelly/luminescent/species = target + if(species?.current_extract) current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) /datum/action/innate/integrate_extract/Activate() var/mob/living/carbon/human/H = owner + var/datum/species/jelly/luminescent/species = target if(!is_species(H, /datum/species/jelly/luminescent) || !species) return CHECK_DNA_AND_SPECIES(H) @@ -645,25 +651,23 @@ icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" var/activation_type = SLIME_ACTIVATE_MINOR - var/datum/species/jelly/luminescent/species - -/datum/action/innate/use_extract/New(_species) - ..() - species = _species /datum/action/innate/use_extract/IsAvailable() if(..()) + var/datum/species/jelly/luminescent/species = target if(species && species.current_extract && (world.time > species.extract_cooldown)) return TRUE return FALSE /datum/action/innate/use_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) ..(current_button, TRUE) - if(species && species.current_extract) + var/datum/species/jelly/luminescent/species = owner + if(species?.current_extract) current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) /datum/action/innate/use_extract/Activate() var/mob/living/carbon/human/H = owner + var/datum/species/jelly/luminescent/species = owner if(!is_species(H, /datum/species/jelly/luminescent) || !species) return CHECK_DNA_AND_SPECIES(H) @@ -690,24 +694,35 @@ var/datum/action/innate/link_minds/link_minds var/list/mob/living/linked_mobs = list() var/list/datum/action/innate/linked_speech/linked_actions = list() - var/mob/living/carbon/human/slimelink_owner + var/datum/weakref/slimelink_owner var/current_link_id = 0 examine_limb_id = SPECIES_JELLYPERSON +//Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW +/datum/species/jelly/stargazer/Destroy() + for(var/mob/living/link_to_clear as anything in linked_mobs) + unlink_mob(link_to_clear) + linked_mobs.Cut() + QDEL_NULL(project_thought) + QDEL_NULL(link_minds) + slimelink_owner = null + return ..() + /datum/species/jelly/stargazer/on_species_loss(mob/living/carbon/C) ..() - for(var/M in linked_mobs) - unlink_mob(M) + for(var/mob/living/link_to_clear as anything in linked_mobs) + unlink_mob(link_to_clear) if(project_thought) - project_thought.Remove(C) + QDEL_NULL(project_thought) if(link_minds) - link_minds.Remove(C) + QDEL_NULL(link_minds) + slimelink_owner = null /datum/species/jelly/stargazer/spec_death(gibbed, mob/living/carbon/human/H) ..() - for(var/M in linked_mobs) - unlink_mob(M) + for(var/mob/living/link_to_clear as anything in linked_mobs) + unlink_mob(link_to_clear) /datum/species/jelly/stargazer/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() @@ -715,7 +730,7 @@ project_thought.Grant(C) link_minds = new(src) link_minds.Grant(C) - slimelink_owner = C + slimelink_owner = WEAKREF(C) link_mob(C) /datum/species/jelly/stargazer/proc/link_mob(mob/living/M) @@ -727,8 +742,11 @@ return FALSE if(M in linked_mobs) return FALSE + var/mob/living/carbon/human/owner = slimelink_owner.resolve() + if(!owner) + return FALSE linked_mobs.Add(M) - to_chat(M, "You are now connected to [slimelink_owner.real_name]'s Slime Link.") + to_chat(M, "You are now connected to [owner.real_name]'s Slime Link.") var/datum/action/innate/linked_speech/action = new(src) linked_actions.Add(action) action.Grant(M) @@ -743,9 +761,12 @@ UnregisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING)) var/datum/action/innate/linked_speech/action = linked_actions[link_id] action.Remove(M) - to_chat(M, "You are no longer connected to [slimelink_owner.real_name]'s Slime Link.") - linked_mobs[link_id] = null - linked_actions[link_id] = null + var/mob/living/carbon/human/owner = slimelink_owner.resolve() + if(owner) + to_chat(M, "You are no longer connected to [owner.real_name]'s Slime Link.") + linked_mobs -= M + linked_actions -= action + qdel(action) /datum/action/innate/linked_speech name = "Slimelink" @@ -753,14 +774,12 @@ button_icon_state = "link_speech" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" - var/datum/species/jelly/stargazer/species - -/datum/action/innate/linked_speech/New(_species) - ..() - species = _species /datum/action/innate/linked_speech/Activate() var/mob/living/carbon/human/H = owner + if(H.stat == DEAD) + return + var/datum/species/jelly/stargazer/species = target if(!species || !(H in species.linked_mobs)) to_chat(H, "The link seems to have been severed...") Remove(H) @@ -773,9 +792,11 @@ Remove(H) return - if(message) - var/msg = "\[[species.slimelink_owner.real_name]'s Slime Link\] [H]: [message]" - log_directed_talk(H, species.slimelink_owner, msg, LOG_SAY, "slime link") + var/mob/living/carbon/human/star_owner = species.slimelink_owner.resolve() + + if(message && star_owner) + var/msg = "\[[star_owner.real_name]'s Slime Link\] [H]: [message]" + log_directed_talk(H, star_owner, msg, LOG_SAY, "slime link") for(var/X in species.linked_mobs) var/mob/living/M = X to_chat(M, msg) @@ -830,11 +851,6 @@ button_icon_state = "mindlink" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" - var/datum/species/jelly/stargazer/species - -/datum/action/innate/link_minds/New(_species) - ..() - species = _species /datum/action/innate/link_minds/Activate() var/mob/living/carbon/human/H = owner @@ -847,6 +863,7 @@ return var/mob/living/target = H.pulling + var/datum/species/jelly/stargazer/species = target to_chat(H, "You begin linking [target]'s mind to yours...") to_chat(target, "You feel a foreign presence within your mind...") diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 36766f34ca53..4d9d41bd411d 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -67,6 +67,12 @@ max_integrity = 200 resistance_flags = FIRE_PROOF | ACID_PROOF +/obj/item/storage/backpack/snail/dropped(mob/user, silent) + . = ..() + emptyStorage() + if(!QDELETED(src)) + qdel(src) + /obj/item/storage/backpack/snail/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NODROP, "snailshell") diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 96410f0cdcb7..8c53a6ca9a07 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -108,22 +108,4 @@ species_l_leg = /obj/item/bodypart/leg/left/zombie species_r_leg = /obj/item/bodypart/leg/right/zombie -/datum/species/human/krokodil_addict/replace_body(mob/living/carbon/C, datum/species/new_species, robotic = FALSE) - ..() - var/skintone - if(ishuman(C)) - var/mob/living/carbon/human/H = C - skintone = H.skin_tone - - for(var/obj/item/bodypart/BP as anything in C.bodyparts) - if(IS_ORGANIC_LIMB(BP)) - if(BP.body_zone == BODY_ZONE_HEAD || BP.body_zone == BODY_ZONE_CHEST) - BP.is_dimorphic = TRUE - BP.skin_tone ||= skintone - BP.limb_id = SPECIES_HUMAN - BP.should_draw_greyscale = TRUE - BP.name = "human [parse_zone(BP.body_zone)]" - BP.update_limb() - - #undef REGENERATION_DELAY diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index feaf0973c9c9..0fc21db37d8c 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -8,6 +8,10 @@ damageoverlaytemp = 0 update_damage_hud() + //Just don't run if we're qdeleted already + if(QDELETED(src)) + return ..() + if(!IS_IN_STASIS(src)) //Reagent processing needs to come before breathing, to prevent edge cases. @@ -15,7 +19,7 @@ . = ..() - if (QDELETED(src)) + if(QDELETED(src)) return if(.) //not dead diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 057abfc3c1f3..4916d062da29 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -17,7 +17,7 @@ /mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1)//WS Edit - Breakable Bones SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone) var/hit_percent = (100-blocked)/100 - if(!damage || (!forced && hit_percent <= 0)) + if(!damage || (!forced && hit_percent <= 0) || !(flags_1 & INITIALIZED_1)) return FALSE var/damage_amount = forced ? damage : damage * hit_percent switch(damagetype) diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index f4b5f85b91a6..e16dcf9e3326 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -85,6 +85,12 @@ /obj/item/clothing/head/mob_holder/container_resist_act() release() +/obj/item/clothing/head/mob_holder/drone/Initialize(mapload, mob/living/M, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags = NONE) + //If we're not being put onto a drone, end it all + if(!isdrone(M)) + return INITIALIZE_HINT_QDEL + return ..() + /obj/item/clothing/head/mob_holder/drone/deposit(mob/living/L) . = ..() if(!isdrone(L)) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a26d45c16add..8e01f457ef2e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -314,7 +314,7 @@ if(!iscarbon(src)) M.LAssailant = null else - M.LAssailant = usr + M.LAssailant = WEAKREF(usr) if(isliving(M)) var/mob/living/L = M SEND_SIGNAL(M, COMSIG_LIVING_GET_PULLED, src) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 6bb9e9aad856..31676cd64007 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -93,8 +93,9 @@ "Your armor has softened a hit to your [parse_zone(zone)]." ) apply_damage(I.throwforce, dtype, zone, armor) - if(I.thrownby) - log_combat(I.thrownby, src, "threw and hit", I) + var/mob/thrown_by = I.thrownby?.resolve() + if(thrown_by) + log_combat(thrown_by, src, "threw and hit", I) else return 1 else diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 709550cbc562..9634040582e0 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -3,7 +3,7 @@ update_turf_movespeed(loc) -/mob/living/CanAllowThrough(atom/movable/mover, turf/target) +/mob/living/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(.) return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d782d21dfd53..81d1cc78ca92 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -38,14 +38,14 @@ var/can_be_carded = TRUE var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) var/viewalerts = 0 - var/icon/holo_icon//Default is assigned when AI is created. + var/icon/holo_icon //Default is assigned when AI is created. var/obj/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye. var/radio_enabled = TRUE //Determins if a carded AI can speak with its built in radio or not. radiomod = ";" //AIs will, by default, state their laws on the internal radio. var/obj/item/multitool/aiMulti var/mob/living/simple_animal/bot/Bot var/tracking = FALSE //this is 1 if the AI is currently tracking somebody, but the track has not yet been completed. - var/datum/effect_system/spark_spread/spark_system//So they can initialize sparks whenever/N + var/datum/effect_system/spark_spread/spark_system //So they can initialize sparks whenever/N //MALFUNCTION var/datum/module_picker/malf_picker @@ -106,7 +106,7 @@ new/obj/structure/AIcore/deactivated(loc) //New empty terminal. return INITIALIZE_HINT_QDEL //Delete AI. - ADD_TRAIT(src, TRAIT_NO_TELEPORT, src) + ADD_TRAIT(src, TRAIT_NO_TELEPORT, AI_ANCHOR_TRAIT) if(L && istype(L, /datum/ai_laws)) laws = L laws.associate(src) @@ -193,7 +193,11 @@ /mob/living/silicon/ai/Destroy() GLOB.ai_list -= src - qdel(eyeobj) // No AI, no Eye + QDEL_NULL(eyeobj) // No AI, no Eye + QDEL_NULL(aiMulti) + QDEL_NULL(spark_system) + if(robot_control) + QDEL_NULL(robot_control) malfhack = null . = ..() @@ -335,11 +339,11 @@ var/is_anchored = FALSE if(move_resist == MOVE_FORCE_OVERPOWERING) move_resist = MOVE_FORCE_NORMAL - REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, src) + REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, AI_ANCHOR_TRAIT) else is_anchored = TRUE move_resist = MOVE_FORCE_OVERPOWERING - ADD_TRAIT(src, TRAIT_NO_TELEPORT, src) + ADD_TRAIT(src, TRAIT_NO_TELEPORT, AI_ANCHOR_TRAIT) to_chat(src, "You are now [is_anchored ? "" : "un"]anchored.") // the message in the [] will change depending whether or not the AI is anchored @@ -381,9 +385,11 @@ trackeable += track.humans + track.others var/list/target = list() for(var/I in trackeable) - var/mob/M = trackeable[I] - if(M.name == string) - target += M + var/datum/weakref/to_resolve = trackeable[I] + var/mob/to_track = to_resolve.resolve() + if(!to_track || to_track.name != string) + continue + target += to_track if(name == string) target += src if(target.len) @@ -989,9 +995,9 @@ return /mob/living/silicon/ai/spawned/Initialize(mapload, datum/ai_laws/L, mob/target_ai) - . = ..() if(!target_ai) target_ai = src //cheat! just give... ourselves as the spawned AI, because that's technically correct + . = ..() /mob/living/silicon/ai/proc/camera_visibility(mob/camera/aiEye/moved_eye) GLOB.cameranet.visibility(moved_eye, client, all_eyes, USE_STATIC_OPAQUE) diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index a3ffd460dd67..27136c4bbc94 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -9,20 +9,20 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) /datum/cameranet var/name = "Camera Net" // Name to show for VV and stat() - // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del(). + /// The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del(). var/list/cameras = list() - // The chunks of the map, mapping the areas that the cameras can see. + /// The chunks of the map, mapping the areas that the cameras can see. var/list/chunks = list() var/ready = 0 - // The object used for the clickable stat() button. + /// The object used for the clickable stat() button. var/obj/effect/statclick/statclick - // The objects used in vis_contents of obscured turfs + /// The objects used in vis_contents of obscured turfs var/list/vis_contents_objects var/obj/effect/overlay/camera_static/vis_contents_opaque var/obj/effect/overlay/camera_static/vis_contents_transparent - // The image given to the effect in vis_contents on AI clients + /// The image given to the effect in vis_contents on AI clients var/image/obscured var/image/obscured_transparent @@ -37,14 +37,14 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) obscured_transparent = new('icons/effects/cameravis.dmi', vis_contents_transparent, null, CAMERA_STATIC_LAYER) obscured_transparent.plane = CAMERA_STATIC_PLANE -// Checks if a chunk has been Generated in x, y, z. +/// Checks if a chunk has been Generated in x, y, z. /datum/cameranet/proc/chunkGenerated(x, y, z) x &= ~(CHUNK_SIZE - 1) y &= ~(CHUNK_SIZE - 1) return chunks["[x],[y],[z]"] -// Returns the chunk in the x, y, z. -// If there is no chunk, it creates a new chunk and returns that. +/// Returns the chunk in the x, y, z. +/// If there is no chunk, it creates a new chunk and returns that. /datum/cameranet/proc/getCameraChunk(x, y, z) x &= ~(CHUNK_SIZE - 1) y &= ~(CHUNK_SIZE - 1) @@ -53,8 +53,7 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) if(!.) chunks[key] = . = new /datum/camerachunk(x, y, z) -// Updates what the aiEye can see. It is recommended you use this when the aiEye moves or it's location is set. - +/// Updates what the aiEye can see. It is recommended you use this when the aiEye moves or it's location is set. /datum/cameranet/proc/visibility(list/moved_eyes, client/C, list/other_eyes, use_static = USE_STATIC_OPAQUE) if(!islist(moved_eyes)) moved_eyes = moved_eyes ? list(moved_eyes) : list() @@ -106,8 +105,7 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) if(USE_STATIC_OPAQUE) client.images -= GLOB.cameranet.obscured -// Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. - +/// Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. /datum/cameranet/proc/updateVisibility(atom/A, opacity_check = 1) if(!SSticker || (opacity_check && !A.opacity)) return @@ -119,29 +117,25 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) return chunk.hasChanged() -// Removes a camera from a chunk. - +/// Removes a camera from a chunk. /datum/cameranet/proc/removeCamera(obj/machinery/camera/c) majorChunkChange(c, 0) -// Add a camera to a chunk. - +/// Add a camera to a chunk. /datum/cameranet/proc/addCamera(obj/machinery/camera/c) if(c.can_use()) majorChunkChange(c, 1) -// Used for Cyborg cameras. Since portable cameras can be in ANY chunk. - +/// Used for Cyborg cameras. Since portable cameras can be in ANY chunk. /datum/cameranet/proc/updatePortableCamera(obj/machinery/camera/c) if(c.can_use()) majorChunkChange(c, 1) -// Never access this proc directly!!!! -// This will update the chunk and all the surrounding chunks. -// It will also add the atom to the cameras list if you set the choice to 1. -// Setting the choice to 0 will remove the camera from the chunks. -// If you want to update the chunks around an object, without adding/removing a camera, use choice 2. - +/// Never access this proc directly!!!! +/// This will update the chunk and all the surrounding chunks. +/// It will also add the atom to the cameras list if you set the choice to 1. +/// Setting the choice to 0 will remove the camera from the chunks. +/// If you want to update the chunks around an object, without adding/removing a camera, use choice 2. /datum/cameranet/proc/majorChunkChange(atom/c, choice) if(!c) return @@ -164,8 +158,19 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) chunk.cameras |= c chunk.hasChanged() -// Will check if a mob is on a viewable turf. Returns 1 if it is, otherwise returns 0. - +/// A faster, turf only version of [/datum/cameranet/proc/majorChunkChange] +/// For use in sensitive code, be careful with it +/datum/cameranet/proc/bareMajorChunkChange(turf/changed) + var/x1 = max(1, changed.x - (CHUNK_SIZE / 2)) + var/y1 = max(1, changed.y - (CHUNK_SIZE / 2)) + var/x2 = min(world.maxx, changed.x + (CHUNK_SIZE / 2)) + var/y2 = min(world.maxy, changed.y + (CHUNK_SIZE / 2)) + for(var/x = x1; x <= x2; x += CHUNK_SIZE) + for(var/y = y1; y <= y2; y += CHUNK_SIZE) + var/datum/camerachunk/chunk = chunkGenerated(x, y, changed.z) + chunk?.hasChanged() + +/// Will check if a mob is on a viewable turf. Returns 1 if it is, otherwise returns 0. /datum/cameranet/proc/checkCameraVis(mob/living/target) var/turf/position = get_turf(target) return checkTurfVis(position) diff --git a/code/modules/mob/living/silicon/ai/robot_control.dm b/code/modules/mob/living/silicon/ai/robot_control.dm index e84a62694d3c..b70ae816b790 100644 --- a/code/modules/mob/living/silicon/ai/robot_control.dm +++ b/code/modules/mob/living/silicon/ai/robot_control.dm @@ -1,6 +1,12 @@ /datum/robot_control var/mob/living/silicon/ai/owner +/datum/robot_control/Destroy(force, ...) + if(!QDELETED(owner)) + CRASH("Robot Control panel destroyed even though owner AI is not being destroyed.") + owner = null + return ..() + /datum/robot_control/New(mob/living/silicon/ai/new_owner) if(!istype(new_owner)) qdel(src) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 7ec7f6b83459..cc646cfcc98c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -90,6 +90,7 @@ /mob/living/silicon/pai/Destroy() QDEL_NULL(internal_instrument) + QDEL_NULL(laws) if(cable) QDEL_NULL(cable) if (loc != card) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 02f1918ccef4..1af879fc878e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -200,12 +200,14 @@ if(T && istype(radio) && istype(radio.keyslot)) radio.keyslot.forceMove(T) radio.keyslot = null - qdel(wires) - qdel(module) - qdel(eye_lights) - wires = null - module = null - eye_lights = null + QDEL_NULL(wires) + QDEL_NULL(module) + QDEL_NULL(eye_lights) + QDEL_NULL(inv1) + QDEL_NULL(inv2) + QDEL_NULL(inv3) + QDEL_NULL(spark_system) + QDEL_LIST(upgrades) cell = null return ..() @@ -438,11 +440,11 @@ return update_icons() /mob/living/silicon/robot/update_icons() + if(QDELETED(src)) + return cut_overlays() icon_state = module.cyborg_base_icon - //WS changes - Thanks Cit - Allows modules to use different icon files icon = (module.cyborg_icon_override ? module.cyborg_icon_override : initial(icon)) - //EndWS Changes if(module.cyborg_base_icon == "robot") icon = 'icons/mob/robots.dmi' pixel_x = initial(pixel_x) @@ -505,7 +507,7 @@ /mob/living/silicon/robot/proc/SetLockdown(state = TRUE) // They stay locked down if their wire is cut. - if(wires.is_cut(WIRE_LOCKDOWN)) + if(wires?.is_cut(WIRE_LOCKDOWN)) state = TRUE if(state) throw_alert("locked", /atom/movable/screen/alert/locked) @@ -1146,7 +1148,7 @@ /mob/living/silicon/robot/proc/logevent(string = "") if(!string) return - if(stat == DEAD) //Dead borgs log no longer + if(stat == DEAD || QDELETED(src)) //Dead borgs log no longer //Gone return if(!modularInterface) stack_trace("Cyborg [src] ([type]) was somehow missing their integrated tablet. Please make a bug report.") diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 6ef4c9a67f27..1923df3b50eb 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -71,6 +71,7 @@ QDEL_NULL(aicamera) QDEL_NULL(builtInCamera) QDEL_NULL(aiPDA) + QDEL_NULL(laws) GLOB.silicon_mobs -= src return ..() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index be4807b33369..5b4d66893f5b 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -701,7 +701,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/proc/get_next_patrol_target() // search the beacon list for the next target in the list. - for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) + for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[virtual_z()]"]) if(NB.location == next_destination) //Does the Beacon location text match the destination? destination = new_destination //We now know the name of where we want to go. patrol_target = NB.loc //Get its location and set it as the target. @@ -709,7 +709,7 @@ Pass a positive integer as an argument to override a bot's default speed. return TRUE /mob/living/simple_animal/bot/proc/find_nearest_beacon() - for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) + for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[virtual_z()]"]) var/dist = get_dist(src, NB) if(nearest_beacon) //Loop though the beacon net to find the true closest beacon. //Ignore the beacon if were are located on it. diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 7697ac90f37f..02bf813396f8 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -158,8 +158,9 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, if(istype(AM, /obj/item)) playsound(src, honksound, 50, TRUE, -1) var/obj/item/I = AM - if(I.throwforce < health && I.thrownby && (istype(I.thrownby, /mob/living/carbon/human))) - var/mob/living/carbon/human/H = I.thrownby + var/mob/thrown_by = I.thrownby?.resolve() + if(I.throwforce < health && thrown_by && (istype(thrown_by, /mob/living/carbon/human))) + var/mob/living/carbon/human/H = thrown_by retaliate(H) ..() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index f55d71a8590f..4629dd87c157 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -249,8 +249,9 @@ Auto Patrol: []"}, /mob/living/simple_animal/bot/secbot/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) if(istype(AM, /obj/item)) var/obj/item/I = AM - if(I.throwforce < src.health && I.thrownby && ishuman(I.thrownby)) - var/mob/living/carbon/human/H = I.thrownby + var/mob/thrown_by = I.thrownby?.resolve() + if(I.throwforce < src.health && thrown_by && ishuman(thrown_by)) + var/mob/living/carbon/human/H = thrown_by retaliate(H) ..() diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 778cd3ff4910..df3cfe349808 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -42,6 +42,7 @@ var/can_repair_constructs = FALSE var/can_repair_self = FALSE var/runetype + var/datum/action/innate/cult/create_rune/our_rune var/holy = FALSE /mob/living/simple_animal/hostile/construct/Initialize() @@ -60,13 +61,17 @@ S.action.button.moved = "6:[pos],4:-2" spellnum++ if(runetype) - var/datum/action/innate/cult/create_rune/CR = new runetype(src) - CR.Grant(src) + our_rune = new runetype(src) + our_rune.Grant(src) var/pos = 2+spellnum*31 - CR.button.screen_loc = "6:[pos],4:-2" - CR.button.moved = "6:[pos],4:-2" + our_rune.button.screen_loc = "6:[pos],4:-2" + our_rune.button.moved = "6:[pos],4:-2" add_overlay("glow_[icon_state][holy]") +/mob/living/simple_animal/hostile/construct/Destroy() + QDEL_NULL(our_rune) + return ..() + /mob/living/simple_animal/hostile/construct/Login() . = ..() if(!. || !client) @@ -450,15 +455,11 @@ background_icon_state = "bg_demon" buttontooltipstyle = "cult" button_icon_state = "cult_mark" - var/mob/living/simple_animal/hostile/construct/harvester/the_construct - -/datum/action/innate/seek_prey/Grant(mob/living/C) - the_construct = C - ..() /datum/action/innate/seek_prey/Activate() if(GLOB.cult_narsie == null) return + var/mob/living/simple_animal/hostile/construct/harvester/the_construct = owner if(the_construct.seeking) desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" button_icon_state = "cult_mark" diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 193c3fdb51fc..1916a7c52adb 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -88,7 +88,7 @@ gold_core_spawnable = NO_SPAWN unique_pet = TRUE var/list/family = list()//var restored from savefile, has count of each child type - var/list/children = list()//Actual mob instances of children + var/list/children = list()//Actual mob weak references of children var/cats_deployed = 0 var/memory_saved = FALSE held_state = "cat" @@ -112,7 +112,7 @@ /mob/living/simple_animal/pet/cat/Runtime/make_babies() var/mob/baby = ..() if(baby) - children += baby + children += WEAKREF(baby) return baby /mob/living/simple_animal/pet/cat/Runtime/death() @@ -139,13 +139,14 @@ var/list/file_data = list() family = list() if(!dead) - for(var/mob/living/simple_animal/pet/cat/kitten/C in children) - if(istype(C,type) || C.stat || !C.z || (C.flags_1 & HOLOGRAM_1)) + for(var/datum/weakref/childRef in children) + var/mob/living/simple_animal/pet/cat/kitten/child = childRef.resolve() + if(istype(child, type) || child.stat || !child.z || (child.flags_1 & HOLOGRAM_1)) continue - if(C.type in family) - family[C.type] += 1 + if(child.type in family) + family[child.type] += 1 else - family[C.type] = 1 + family[child.type] = 1 file_data["family"] = family fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm index c9695c6e1a61..c24271d9b09e 100644 --- a/code/modules/mob/living/simple_animal/friendly/snake.dm +++ b/code/modules/mob/living/simple_animal/friendly/snake.dm @@ -41,6 +41,10 @@ var/glasses_overlay_file = 'icons/mob/pets.dmi' var/obj/item/clothing/glasses/glasses = null //snek glasses +/mob/living/simple_animal/hostile/retaliate/poison/snake/Destroy() + if(glasses) + QDEL_NULL(glasses) + return ..() /mob/living/simple_animal/hostile/retaliate/poison/snake/ListTargets(atom/the_target) . = oview(vision_range, targets_from) //get list of things in vision range diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index 9d39d055b7c4..00344f48da59 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -101,7 +101,7 @@ /obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G) . = ..() - if(G.guardiancolor) + if(G?.guardiancolor) add_atom_colour(G.guardiancolor, FIXED_COLOUR_PRIORITY) /obj/structure/receiving_pad/proc/disappear() diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 8fa2ce4b516f..c87b82091597 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -92,7 +92,8 @@ return ..() else . = list() // The following code is only very slightly slower than just returning oview(vision_range, targets_from), but it saves us much more work down the line - var/list/searched_for = oview(vision_range, targets_from) + var/atom/target_from = GET_TARGETS_FROM(src) + var/list/searched_for = oview(vision_range, target_from) for(var/obj/A in searched_for) . += A for(var/mob/A in searched_for) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index ec4516703253..09fdf0d763ba 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -116,12 +116,12 @@ melee_damage_lower = 5 melee_damage_upper = 10 poison_per_bite = 3 - var/atom/movable/cocoon_target + var/datum/weakref/cocoon_target_ref var/fed = 0 var/obj/effect/proc_holder/wrap/wrap var/datum/action/innate/spider/lay_eggs/lay_eggs var/datum/action/innate/spider/set_directive/set_directive - var/static/list/consumed_mobs = list() //the tags of mobs that have been consumed by nurse spiders to lay eggs + var/static/list/consumed_mobs = list() //the refs of mobs that have been consumed by nurse spiders to lay eggs gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/nurse/Initialize() @@ -137,6 +137,7 @@ RemoveAbility(wrap) QDEL_NULL(lay_eggs) QDEL_NULL(set_directive) + QDEL_NULL(wrap) return ..() //broodmothers are the queen of the spiders, can send messages to all them and web faster. That rare round where you get a queen spider and turn your 'for honor' players into 'r6siege' players will be a fun one. @@ -258,10 +259,10 @@ stop_automated_movement = FALSE walk(src,0) -/mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(C) +/mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(mob/living/target) if(busy == MOVING_TO_TARGET) - if(cocoon_target == C && get_dist(src,cocoon_target) > 1) - cocoon_target = null + if(cocoon_target_ref == WEAKREF(target) && get_dist(src, target) > 1) + cocoon_target_ref = null busy = FALSE stop_automated_movement = FALSE @@ -272,7 +273,7 @@ //first, check for potential food nearby to cocoon for(var/mob/living/C in can_see) if(C.stat && !istype(C, /mob/living/simple_animal/hostile/poison/giant_spider) && !C.anchored) - cocoon_target = C + cocoon_target_ref = WEAKREF(C) busy = MOVING_TO_TARGET Goto(C, move_to_delay) //give up if we can't reach them after 10 seconds @@ -295,14 +296,17 @@ continue if(isitem(O) || isstructure(O) || ismachinery(O)) - cocoon_target = O + cocoon_target_ref = WEAKREF(O) busy = MOVING_TO_TARGET stop_automated_movement = 1 Goto(O, move_to_delay) //give up if we can't reach them after 10 seconds addtimer(CALLBACK(src, .proc/GiveUp, O), 10 SECONDS) - else if(busy == MOVING_TO_TARGET && cocoon_target) + else if(busy == MOVING_TO_TARGET && cocoon_target_ref) + var/mob/living/cocoon_target = cocoon_target_ref.resolve() + if(!cocoon_target) + return if(get_dist(src, cocoon_target) <= 1) cocoon() @@ -311,6 +315,7 @@ stop_automated_movement = FALSE /mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/cocoon() + var/mob/living/cocoon_target = cocoon_target_ref?.resolve() if(stat != DEAD && cocoon_target && !cocoon_target.anchored) if(cocoon_target == src) to_chat(src, "You can't wrap yourself!") @@ -333,8 +338,8 @@ var/obj/structure/spider/cocoon/C = new(cocoon_target.loc) if(isliving(cocoon_target)) var/mob/living/L = cocoon_target - if(L.blood_volume && (L.stat != DEAD || !consumed_mobs[L.tag])) //if they're not dead, you can consume them anyway - consumed_mobs[L.tag] = TRUE + if(L.blood_volume && (L.stat != DEAD || !consumed_mobs[REF(L)])) //if they're not dead, you can consume them anyway + consumed_mobs[REF(L)] = TRUE fed++ lay_eggs.UpdateButtonIcon(TRUE) visible_message("[src] sticks a proboscis into [L] and sucks a viscous substance out.","You suck the nutriment out of [L], feeding you enough to lay a cluster of eggs.") @@ -395,6 +400,8 @@ action_icon = 'icons/mob/actions/actions_animal.dmi' action_icon_state = "wrap_0" action_background_icon_state = "bg_alien" + //Set this to false since we're our own action, for some reason + has_action = FALSE /obj/effect/proc_holder/wrap/Initialize() . = ..() @@ -435,7 +442,7 @@ var/atom/movable/target_atom = target if(target_atom.anchored) return - user.cocoon_target = target_atom + user.cocoon_target_ref = WEAKREF(target_atom) INVOKE_ASYNC(user, /mob/living/simple_animal/hostile/poison/giant_spider/nurse/.proc/cocoon) remove_ranged_ability() return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm index 64c74b5700e7..bf0337488dcb 100644 --- a/code/modules/mob/living/simple_animal/hostile/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/goose.dm @@ -37,28 +37,34 @@ var/message_cooldown = 0 var/list/nummies = list() var/choking = FALSE + var/moved /mob/living/simple_animal/hostile/retaliate/goose/Initialize() . = ..() RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/goosement) +/mob/living/simple_animal/hostile/retaliate/goose/Destroy() + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) + return ..() + /mob/living/simple_animal/hostile/retaliate/goose/proc/goosement(atom/movable/AM, OldLoc, Dir, Forced) if(stat == DEAD) return - nummies.Cut() - nummies += loc.contents + moved = TRUE if(prob(5) && random_retaliate) Retaliate() /mob/living/simple_animal/hostile/retaliate/goose/handle_automated_action() - if(length(nummies)) + if(moved && length(loc?.contents)) + moved = FALSE var/obj/item/E = locate() in nummies if(E && E.loc == loc) feed(E) nummies -= E /mob/living/simple_animal/hostile/retaliate/goose/vomit/handle_automated_action() - if(length(nummies)) + if(moved && length(loc?.contents)) + var/list/nummies = loc.contents var/obj/item/E = pick(nummies) if(!(E.custom_materials && E.custom_materials[SSmaterials.GetMaterialRef(/datum/material/plastic)])) nummies -= E // remove non-plastic item from queue @@ -106,7 +112,6 @@ deadchat_plays_goose() /mob/living/simple_animal/hostile/retaliate/goose/vomit/Destroy() - UnregisterSignal(src, COMSIG_MOVABLE_MOVED) QDEL_NULL(goosevomit) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index e012268a5e42..106c9ad54f60 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -47,8 +47,9 @@ var/stat_attack = CONSCIOUS var/stat_exclusive = FALSE //Mobs with this set to TRUE will exclusively attack things defined by stat_attack, stat_attack DEAD means they will only attack corpses var/attack_same = 0 //Set us to 1 to allow us to attack our own faction - //Use set_targets_from to modify this var - var/atom/targets_from = null //all range/attack/etc. calculations should be done from this atom, defaults to the mob itself, useful for Vehicles and such + //Use GET_TARGETS_FROM(mob) to access this + //Attempting to call GET_TARGETS_FROM(mob) when this var is null will just return mob as a base + var/datum/weakref/targets_from //all range/attack/etc. calculations should be done from the atom this weakrefs, useful for Vehicles and such. var/attack_all_objects = FALSE //if true, equivalent to having a wanted_objects list containing ALL objects. var/lose_patience_timer_id //id for a timer to call LoseTarget(), used to stop mobs fixating on a target they can't reach @@ -69,16 +70,12 @@ /mob/living/simple_animal/hostile/Initialize() . = ..() - - if(!targets_from) - set_targets_from(src) wanted_objects = typecacheof(wanted_objects) - /mob/living/simple_animal/hostile/Destroy() - set_targets_from(null) //We can't use losetarget here because fucking cursed blobs override it to do nothing the motherfuckers GiveTarget(null) + walk(src, 0) return ..() /mob/living/simple_animal/hostile/Life() @@ -96,7 +93,8 @@ EscapeConfinement() if(AICanContinue(possible_targets)) - if(!QDELETED(target) && !targets_from.Adjacent(target)) + var/atom/target_from = GET_TARGETS_FROM(src) + if(!QDELETED(target) && !target_from.Adjacent(target)) DestroyPathToTarget() if(!MoveToTarget(possible_targets)) //if we lose our target if(AIShouldSleep(possible_targets)) // we try to acquire a new one @@ -146,15 +144,19 @@ //////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// /mob/living/simple_animal/hostile/proc/ListTargets() //Step 1, find out what we can see + var/atom/target_from = GET_TARGETS_FROM(src) if(!search_objects) - . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide + . = hearers(vision_range, target_from) - src //Remove self, so we don't suicide var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) . += typecache_filter_list(view(vision_range, targets_from), hostile_machines) + for(var/HM in typecache_filter_list(range(vision_range, target_from), hostile_machines)) + if(can_see(target_from, HM, vision_range)) + . += HM else - . = oview(vision_range, targets_from) + . = oview(vision_range, target_from) /mob/living/simple_animal/hostile/proc/FindTarget(list/possible_targets, HasTargetsList = 0)//Step 2, filter down possible targets to things we actually care about . = list() @@ -188,10 +190,11 @@ /mob/living/simple_animal/hostile/proc/PickTarget(list/Targets)//Step 3, pick amongst the possible, attackable targets if(target != null)//If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets + var/atom/target_from = GET_TARGETS_FROM(src) for(var/pos_targ in Targets) var/atom/A = pos_targ - var/target_dist = get_dist(targets_from, target) - var/possible_target_distance = get_dist(targets_from, A) + var/target_dist = get_dist(target_from, target) + var/possible_target_distance = get_dist(target_from, A) if(target_dist < possible_target_distance) Targets -= A if(!Targets.len)//We didnt find nothin! @@ -270,7 +273,8 @@ GainPatience() /mob/living/simple_animal/hostile/proc/CheckAndAttack() - if(target && targets_from && isturf(targets_from.loc) && target.Adjacent(targets_from) && !incapacitated()) + var/atom/target_from = GET_TARGETS_FROM(src) + if(target && isturf(target_from.loc) && target.Adjacent(target_from) && !incapacitated()) AttackingTarget() /mob/living/simple_animal/hostile/proc/MoveToTarget(list/possible_targets)//Step 5, handle movement between us and our target @@ -278,14 +282,15 @@ if(!target || !CanAttack(target)) LoseTarget() return 0 + var/atom/target_from = GET_TARGETS_FROM(src) if(target in possible_targets) var/turf/T = get_turf(src) if(target.virtual_z() != T.virtual_z()) LoseTarget() return 0 - var/target_distance = get_dist(targets_from,target) + var/target_distance = get_dist(target_from,target) if(ranged) //We ranged? Shoot at em - if(!target.Adjacent(targets_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown + if(!target.Adjacent(target_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown OpenFire(target) if(charger && (target_distance > minimum_distance) && (target_distance <= charge_distance))//Attempt to close the distance with a charge. enter_charge(target) @@ -301,7 +306,7 @@ else Goto(target,move_to_delay,minimum_distance) if(target) - if(targets_from && isturf(targets_from.loc) && target.Adjacent(targets_from)) //If they're next to us, attack + if(isturf(target_from.loc) && target.Adjacent(target_from)) //If they're next to us, attack MeleeAction() else if(rapid_melee > 1 && target_distance <= melee_queue_distance) @@ -310,7 +315,7 @@ return 1 return 0 if(environment_smash) - if(target.loc != null && get_dist(targets_from, target.loc) <= vision_range) //We can't see our target, but he's in our vision range still + if(target.loc != null && get_dist(target_from, target.loc) <= vision_range) //We can't see our target, but he's in our vision range still if(ranged_ignores_vision && ranged_cooldown <= world.time) //we can't see our target... but we can fire at them! OpenFire(target) if((environment_smash & ENVIRONMENT_SMASH_WALLS) || (environment_smash & ENVIRONMENT_SMASH_RWALLS)) //If we're capable of smashing through walls, forget about vision completely after finding our target @@ -345,6 +350,9 @@ /mob/living/simple_animal/hostile/proc/AttackingTarget() SEND_SIGNAL(src, COMSIG_HOSTILE_ATTACKINGTARGET, target) + //Target can be removed by the signal's effects + if(QDELETED(target)) + return in_melee = TRUE return target.attack_animal(src) @@ -376,7 +384,8 @@ /mob/living/simple_animal/hostile/proc/summon_backup(distance, exact_faction_match) do_alert_animation(src) playsound(loc, 'sound/machines/chime.ogg', 50, TRUE, -1) - for(var/mob/living/simple_animal/hostile/M in oview(distance, targets_from)) + var/atom/target_from = GET_TARGETS_FROM(src) + for(var/mob/living/simple_animal/hostile/M in oview(distance, target_from)) if(faction_check_mob(M, TRUE)) if(M.AIStatus == AI_OFF) return @@ -408,9 +417,10 @@ /mob/living/simple_animal/hostile/proc/Shoot(atom/targeted_atom) - if(QDELETED(targeted_atom) || targeted_atom == targets_from.loc || targeted_atom == targets_from) + var/atom/target_from = GET_TARGETS_FROM(src) + if(QDELETED(targeted_atom) || targeted_atom == target_from.loc || targeted_atom == target_from) return - var/turf/startloc = get_turf(targets_from) + var/turf/startloc = get_turf(target_from) if(casingtype) var/obj/item/ammo_casing/casing = new casingtype(startloc) playsound(src, projectilesound, 100, TRUE) @@ -424,7 +434,7 @@ P.yo = targeted_atom.y - startloc.y P.xo = targeted_atom.x - startloc.x if(AIStatus != AI_ON)//Don't want mindless mobs to have their movement screwed up firing in space - newtonian_move(get_dir(targeted_atom, targets_from)) + newtonian_move(get_dir(targeted_atom, target_from)) P.original = targeted_atom P.preparePixelProjectile(targeted_atom, src) P.fire() @@ -452,15 +462,16 @@ dodging = TRUE /mob/living/simple_animal/hostile/proc/DestroyObjectsInDirection(direction) - var/turf/T = get_step(targets_from, direction) + var/atom/target_from = GET_TARGETS_FROM(src) + var/turf/T = get_step(target_from, direction) if(QDELETED(T)) return - if(T.Adjacent(targets_from)) + if(T.Adjacent(target_from)) if(CanSmashTurfs(T)) T.attack_animal(src) return for(var/obj/O in T.contents) - if(!O.Adjacent(targets_from)) + if(!O.Adjacent(target_from)) continue if((ismachinery(O) || isstructure(O)) && O.density && environment_smash >= ENVIRONMENT_SMASH_STRUCTURES && !O.IsObscured()) O.attack_animal(src) @@ -469,7 +480,8 @@ /mob/living/simple_animal/hostile/proc/DestroyPathToTarget() if(environment_smash) EscapeConfinement() - var/dir_to_target = get_dir(targets_from, target) + var/atom/target_from = GET_TARGETS_FROM(src) + var/dir_to_target = get_dir(target_from, target) var/dir_list = list() if(ISDIAGONALDIR(dir_to_target)) //it's diagonal, so we need two directions to hit for(var/direction in GLOB.cardinals) @@ -489,18 +501,19 @@ /mob/living/simple_animal/hostile/proc/EscapeConfinement() + var/atom/target_from = GET_TARGETS_FROM(src) if(buckled) buckled.attack_animal(src) - if(!isturf(targets_from.loc) && targets_from.loc != null)//Did someone put us in something? - var/atom/A = targets_from.loc + if(!isturf(target_from.loc) && target_from.loc != null)//Did someone put us in something? + var/atom/A = target_from.loc A.attack_animal(src)//Bang on it till we get out - /mob/living/simple_animal/hostile/proc/FindHidden() if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper)) var/atom/A = target.loc + var/atom/target_from = GET_TARGETS_FROM(src) Goto(A,move_to_delay,minimum_distance) - if(A.Adjacent(targets_from)) + if(A.Adjacent(target_from)) A.attack_animal(src) return 1 @@ -646,24 +659,19 @@ Stun((knockdown_time * 2), ignore_canstun = TRUE) charge_end() else if(hit_atom.density && !hit_atom.CanPass(src, get_dir(hit_atom, src))) - visible_message(("[src] smashes into [hit_atom]!")) + visible_message(span_danger("[src] smashes into [hit_atom]!")) Stun((knockdown_time * 2), ignore_canstun = TRUE) if(charge_state) charge_state = FALSE update_icons() -/mob/living/simple_animal/hostile/proc/set_targets_from(atom/target_from) - if(targets_from) - UnregisterSignal(targets_from, COMSIG_PARENT_QDELETING) - targets_from = target_from - if(targets_from) - RegisterSignal(targets_from, COMSIG_PARENT_QDELETING, .proc/handle_targets_from_del) - -/mob/living/simple_animal/hostile/proc/handle_targets_from_del(datum/source) - SIGNAL_HANDLER - if(targets_from != src) - set_targets_from(src) +/mob/living/simple_animal/hostile/proc/get_targets_from() + var/atom/target_from = targets_from.resolve() + if(!target_from) + targets_from = null + return src + return target_from /mob/living/simple_animal/hostile/proc/handle_target_del(datum/source) SIGNAL_HANDLER diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm index 0df00f99c1c7..06b2924033d9 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm @@ -34,11 +34,11 @@ footstep_type = FOOTSTEP_MOB_BAREFOOT -/mob/living/simple_animal/hostile/jungle/mook/CanAllowThrough(atom/movable/O) +/mob/living/simple_animal/hostile/jungle/mook/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(istype(O, /mob/living/simple_animal/hostile/jungle/mook)) - var/mob/living/simple_animal/hostile/jungle/mook/M = O - if(M.attack_state == MOOK_ATTACK_ACTIVE && M.throwing) + if(istype(mover, /mob/living/simple_animal/hostile/jungle/mook)) + var/mob/living/simple_animal/hostile/jungle/mook/mook_moover = mover + if(mook_moover.attack_state == MOOK_ATTACK_ACTIVE && mook_moover.throwing) return TRUE /mob/living/simple_animal/hostile/jungle/mook/death() @@ -93,9 +93,10 @@ melee_damage_lower = 15 melee_damage_upper = 15 var/mob_direction = get_dir(src,target) + var/atom/target_from = GET_TARGETS_FROM(src) if(get_dist(src,target) > 1) step(src,mob_direction) - if(targets_from && isturf(targets_from.loc) && target.Adjacent(targets_from) && isliving(target)) + if(isturf(target_from.loc) && target.Adjacent(target_from) && isliving(target)) var/mob/living/L = target L.attack_animal(src) return diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index aa86ccfd4d06..a4678a69799a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -73,7 +73,7 @@ Featuring: return 0 LoseTarget() //Target was our mecha, so null it out M.aimob_enter_mech(src) - set_targets_from(M) + targets_from = WEAKREF(M) allow_movement_on_non_turfs = TRUE //duh var/do_ranged = 0 for(var/equip in mecha.equipment) @@ -99,7 +99,7 @@ Featuring: mecha.aimob_exit_mech(src) allow_movement_on_non_turfs = FALSE - set_targets_from(src) + targets_from = null //Find a new mecha wanted_objects = typecacheof(/obj/mecha/combat, TRUE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 27bdf0b3dd3e..fd810a352380 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -423,7 +423,7 @@ Difficulty: Hard severity = EXPLODE_LIGHT // puny mortals return ..() -/mob/living/simple_animal/hostile/megafauna/bubblegum/CanAllowThrough(atom/movable/mover, turf/target) +/mob/living/simple_animal/hostile/megafauna/bubblegum/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination)) return TRUE @@ -525,7 +525,7 @@ Difficulty: Hard new /obj/effect/decal/cleanable/blood(get_turf(src)) . = ..() -/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/CanAllowThrough(atom/movable/mover, turf/target) +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum)) // hallucinations should not be stopping bubblegum or eachother return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index e25165cbbdfe..4ded55413f8e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -270,10 +270,9 @@ Difficulty: Very Hard else SSexplosions.medturf += target - - +//There can only ever be one blackbox, and we want to know if there already is one when we spawn +GLOBAL_DATUM(blackbox, /obj/machinery/smartfridge/black_box) //Black Box - /obj/machinery/smartfridge/black_box name = "black box" desc = "A completely indestructible chunk of crystal, rumoured to predate the start of this universe. It looks like you could store things inside it." @@ -302,11 +301,9 @@ Difficulty: Very Hard /obj/machinery/smartfridge/black_box/Initialize() . = ..() - var/static/obj/machinery/smartfridge/black_box/current - if(current && current != src) - qdel(src, force=TRUE) - return - current = src + if(GLOB.blackbox != src) + return INITIALIZE_HINT_QDEL_FORCE + GLOB.blackbox = src ReadMemory() /obj/machinery/smartfridge/black_box/process() @@ -351,6 +348,8 @@ Difficulty: Very Hard /obj/machinery/smartfridge/black_box/Destroy(force = FALSE) if(force) + if(GLOB.blackbox == src) + GLOB.blackbox = null for(var/thing in src) qdel(thing) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index c22d5dcd9dc9..1da36f8787d5 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -85,7 +85,6 @@ Difficulty: Hard var/did_reset = TRUE //if we timed out, returned to our beacon, and healed some var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...", "Kix fiex. Liepmrk...") var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.") - var/list/stored_nearby = list() // stores people nearby the hierophant when it enters the death animation /mob/living/simple_animal/hostile/megafauna/hierophant/Initialize() . = ..() @@ -411,6 +410,7 @@ Difficulty: Hard blinking = TRUE //we do a fancy animation, release a huge burst(), and leave our staff. visible_message("\"Mrmxmexmrk wipj-hiwxvygx wiuyirgi...\"") visible_message("[src] shrinks, releasing a massive burst of energy!") + var/list/stored_nearby = list() for(var/mob/living/L in view(7,src)) stored_nearby += L // store the people to grant the achievements to once we die hierophant_burst(null, get_turf(src), 10) @@ -535,7 +535,7 @@ Difficulty: Hard QUEUE_SMOOTH_NEIGHBORS(src) return ..() -/obj/effect/temp_visual/hierophant/wall/CanAllowThrough(atom/movable/mover, turf/target) +/obj/effect/temp_visual/hierophant/wall/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(QDELETED(caster)) return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index b487f38d002d..42836c58cf6b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -138,6 +138,8 @@ Difficulty: Hard /// Slams the ground around the wendigo throwing back enemies caught nearby /mob/living/simple_animal/hostile/megafauna/wendigo/proc/ground_slam(range, delay) var/turf/orgin = get_turf(src) + if(!orgin) + return var/list/all_turfs = RANGE_TURFS(range, orgin) for(var/i = 0 to range) for(var/turf/T in all_turfs) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index c9391c4cab28..ca595d4d682f 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -315,7 +315,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca AM.forceMove(C) return ..() -/mob/living/simple_animal/hostile/mimic/xenobio/CanAllowThrough(atom/movable/mover, turf/target) +/mob/living/simple_animal/hostile/mimic/xenobio/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(istype(mover, /obj/structure/closet)) return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index ce83232c3430..4376e9e0ae21 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -69,7 +69,8 @@ /mob/living/simple_animal/hostile/asteroid/basilisk/GiveTarget(new_target) if(..()) //we have a target - if(isliving(target) && !target.Adjacent(targets_from) && ranged_cooldown <= world.time)//No more being shot at point blank or spammed with RNG beams + var/atom/target_from = GET_TARGETS_FROM(src) + if(isliving(target) && !target.Adjacent(target_from) && ranged_cooldown <= world.time)//No more being shot at point blank or spammed with RNG beams OpenFire(target) /mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity, target) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index b24f055d3bb9..11cdc80c97cc 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -56,7 +56,8 @@ /mob/living/simple_animal/hostile/asteroid/curseblob/proc/check_for_target() if(QDELETED(set_target) || set_target.stat != CONSCIOUS || z != set_target.z) - qdel(src) + if(!QDELETED(src)) + qdel(src) return TRUE /mob/living/simple_animal/hostile/asteroid/curseblob/GiveTarget(new_target) @@ -71,7 +72,7 @@ return //if it's not our target, we ignore it -/mob/living/simple_animal/hostile/asteroid/curseblob/CanAllowThrough(atom/movable/mover, turf/target) +/mob/living/simple_animal/hostile/asteroid/curseblob/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(mover == set_target) return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 5bbe307790f2..33bd3e6ba0f0 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -68,19 +68,18 @@ While using this makes the system rely on OnFire, it still gives options for tim icon_icon = 'icons/mob/actions/actions_elites.dmi' button_icon_state = "" background_icon_state = "bg_default" - var/mob/living/simple_animal/hostile/asteroid/elite/M var/chosen_message var/chosen_attack_num = 0 /datum/action/innate/elite_attack/Grant(mob/living/L) - if(istype(L, /mob/living/simple_animal/hostile/asteroid/elite)) - M = L - return ..() - return FALSE + if(!istype(L, /mob/living/simple_animal/hostile/asteroid/elite)) + return FALSE + return ..() /datum/action/innate/elite_attack/Activate() - M.chosen_attack = chosen_attack_num - to_chat(M, chosen_message) + var/mob/living/simple_animal/hostile/asteroid/elite/elite_owner = owner + elite_owner.chosen_attack = chosen_attack_num + to_chat(elite_owner, chosen_message) //The Pulsing Tumor, the actual "spawn-point" of elites, handles the spawning, arena, and procs for dealing with basic scenarios. @@ -327,7 +326,7 @@ While using this makes the system rely on OnFire, it still gives options for tim ourelite = null return ..() -/obj/effect/temp_visual/elite_tumor_wall/CanAllowThrough(atom/movable/mover, turf/target) +/obj/effect/temp_visual/elite_tumor_wall/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(mover == ourelite || mover == activator) return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 28e8bc82ef71..91fdf286aae7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -53,6 +53,10 @@ var/rand_tent = 0 var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list() +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/Destroy() + children_list.Cut() + return ..() + /datum/action/innate/elite_attack/tentacle_patch name = "Tentacle Patch" button_icon_state = "tentacle_patch" @@ -128,11 +132,10 @@ for(var/i in 1 to 2) if(children_list.len >= 8) return - var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/newchild = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc) + var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/newchild = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc, src) newchild.GiveTarget(target) newchild.faction = faction.Copy() visible_message("[newchild] appears below [src]!") - newchild.mother = src children_list += newchild /mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage() @@ -186,7 +189,17 @@ guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1) deathmessage = "falls to the ground." status_flags = CANPUSH - var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = null + var/datum/weakref/mother_ref + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/Initialize(mapload, mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother) + . = ..() + mother_ref = WEAKREF(mother) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/Destroy() + var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = mother_ref?.resolve() + if(mother) + mother.children_list -= src + return ..() /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/OpenFire(target) ranged_cooldown = world.time + 40 @@ -199,8 +212,6 @@ /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/death() . = ..() - if(mother != null) - mother.children_list -= src visible_message("[src] explodes!") explosion(get_turf(loc),0,0,0,flame_range = 3, adminlog = FALSE) gib() diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm index 3d85af5dc84c..8c1e47926935 100644 --- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm @@ -39,6 +39,13 @@ riot.Grant(src) INVOKE_ASYNC(src, .proc/get_player) +/mob/living/simple_animal/hostile/regalrat/Destroy() + coffer.Remove(src) + riot.Remove(src) + QDEL_NULL(coffer) + QDEL_NULL(riot) + return ..() + /mob/living/simple_animal/hostile/regalrat/proc/get_player() var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the Royal Rat, cheesey be his crown?", ROLE_SENTIENCE, null, FALSE, 100, POLL_IGNORE_SENTIENCE_POTION) if(LAZYLEN(candidates) && !mind) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 63a796a80954..0eb4232e65fd 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -7,7 +7,7 @@ if(!L.stat) return L else - enemies -= L + remove_enemy(L) else if(ismecha(A)) var/obj/mecha/M = A if(M.occupant) @@ -29,19 +29,37 @@ if(isliving(A)) var/mob/living/M = A if(faction_check_mob(M) && attack_same || !faction_check_mob(M)) - enemies |= M + add_enemy(M) else if(ismecha(A)) var/obj/mecha/M = A if(M.occupant) - enemies |= M - enemies |= M.occupant + add_enemy(M) + add_enemy(M.occupant) for(var/mob/living/simple_animal/hostile/retaliate/H in around) if(faction_check_mob(H) && !attack_same && !H.attack_same) - H.enemies |= enemies - return 0 + H.add_enemies(enemies) /mob/living/simple_animal/hostile/retaliate/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() if(. > 0 && stat == CONSCIOUS) Retaliate() + +/mob/living/simple_animal/hostile/retaliate/proc/add_enemy(new_enemy) + RegisterSignal(new_enemy, COMSIG_PARENT_QDELETING, .proc/remove_enemy, override = TRUE) + enemies |= new_enemy + +/mob/living/simple_animal/hostile/retaliate/proc/add_enemies(new_enemies) + for(var/new_enemy in new_enemies) + RegisterSignal(new_enemy, COMSIG_PARENT_QDELETING, .proc/remove_enemy, override = TRUE) + enemies |= new_enemy + +/mob/living/simple_animal/hostile/retaliate/proc/clear_enemies() + for(var/enemy in enemies) + UnregisterSignal(enemy, COMSIG_PARENT_QDELETING) + enemies.Cut() + +/mob/living/simple_animal/hostile/retaliate/proc/remove_enemy(datum/enemy_to_remove) + SIGNAL_HANDLER + UnregisterSignal(enemy_to_remove, COMSIG_PARENT_QDELETING) + enemies -= enemy_to_remove diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 020b160bbed9..e518955d91af 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -19,6 +19,8 @@ smoothing_flags = NONE /// The amount of time it takes to create a venus human trap. var/growth_time = 120 SECONDS + /// The current vines + var/list/vines = list() /obj/structure/alien/resin/flower_bud_enemy/Initialize() . = ..() @@ -29,9 +31,13 @@ anchors += locate(x+2,y-2,z) for(var/turf/T in anchors) - Beam(T, "vine", maxdistance=5, beam_type=/obj/effect/ebeam/vine) + vines += Beam(T, "vine", maxdistance=5, beam_type=/obj/effect/ebeam/vine) addtimer(CALLBACK(src, .proc/bear_fruit), growth_time) +/obj/structure/alien/resin/flower_bud_enemy/Destroy() + QDEL_LIST(vines) + return ..() + /** * Spawns a venus human trap, then qdels itself. * @@ -47,10 +53,10 @@ mouse_opacity = MOUSE_OPACITY_ICON desc = "A thick vine, painful to the touch." -/obj/effect/ebeam/vine/Initialize() +/obj/effect/ebeam/vine/Initialize(mapload) . = ..() var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = .proc/on_entered, + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) @@ -60,7 +66,7 @@ var/mob/living/L = AM if(!isvineimmune(L)) L.adjustBruteLoss(5) - to_chat(L, "You cut yourself on the thorny vines.") + to_chat(L, span_alert("You cut yourself on the thorny vines.")) /** * Venus Human Trap @@ -145,6 +151,7 @@ /mob/living/simple_animal/hostile/venus_human_trap/Destroy() for(var/datum/beam/vine as anything in vines) qdel(vine) // reference is automatically deleted by remove_vine + vines.Cut() return ..() /** @@ -191,5 +198,8 @@ * Arguments: * * datum/beam/vine - The vine to be removed from the list. */ -/mob/living/simple_animal/hostile/venus_human_trap/proc/remove_vine(datum/beam/vine, force) +/mob/living/simple_animal/hostile/venus_human_trap/proc/remove_vine(datum/beam/vine) + SIGNAL_HANDLER + + UnregisterSignal(vine, COMSIG_PARENT_QDELETING) vines -= vine diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index d506eee8ad4b..d63c300e8ba6 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -70,7 +70,6 @@ var/parrot_state = PARROT_WANDER //Hunt for a perch when created var/parrot_sleep_max = 25 //The time the parrot sits while perched before looking around. Mosly a way to avoid the parrot's AI in life() being run every single tick. var/parrot_sleep_dur = 25 //Same as above, this is the var that physically counts down - var/parrot_dam_zone = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG) //For humans, select a bodypart to attack var/parrot_speed = 5 //"Delay in world ticks between movement." according to byond. Yeah, that's BS but it does directly affect movement. Higher number = slower. var/parrot_lastmove = null //Updates/Stores position of the parrot while it's moving @@ -81,7 +80,7 @@ var/speech_shuffle_rate = 20 var/list/available_channels = list() - //Headset for Poly to yell at engineers :) + //Headset for Polly to yell at engineers :) var/obj/item/radio/headset/ears = null //The thing the parrot is currently interested in. This gets used for items the parrot wants to pick up, mobs it wants to steal from, @@ -123,6 +122,18 @@ /mob/living/simple_animal/parrot/proc/perch_mob_player)) +/mob/living/simple_animal/parrot/Destroy() + walk(src, 0) + if(ears) + QDEL_NULL(ears) + if(held_item) + QDEL_NULL(held_item) + + set_perch(null) + set_interest(null) + + return ..() + /mob/living/simple_animal/parrot/examine(mob/user) . = ..() if(stat) @@ -276,18 +287,18 @@ * Attack responces */ //Humans, monkeys, aliens -/mob/living/simple_animal/parrot/attack_hand(mob/living/carbon/M) +/mob/living/simple_animal/parrot/attack_hand(mob/living/carbon/attacker) ..() if(client) return - if(!stat && M.a_intent == INTENT_HARM) + if(!stat && attacker.a_intent == INTENT_HARM) icon_state = icon_living //It is going to be flying regardless of whether it flees or attacks if(parrot_state == PARROT_PERCH) parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - parrot_interest = M + set_interest(attacker) parrot_state = PARROT_SWOOP //The parrot just got hit, it WILL move, now to pick a direction.. if(health > 30) //Let's get in there and squawk it up! @@ -295,18 +306,18 @@ else parrot_state |= PARROT_FLEE //Otherwise, fly like a bat out of hell! drop_held_item(0) - if(stat != DEAD && M.a_intent == INTENT_HELP) + if(stat != DEAD && attacker.a_intent == INTENT_HELP) handle_automated_speech(1) //assured speak/emote return -/mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/monkey/M) - return attack_hand(M) +/mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/monkey/attacker) + return attack_hand(attacker) -/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/M) - return attack_hand(M) +/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/attacker) + return attack_hand(attacker) //Simple animals -/mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/M) +/mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/attacker) . = ..() //goodbye immortal parrots if(client) @@ -315,8 +326,8 @@ if(parrot_state == PARROT_PERCH) parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - if(M.melee_damage_upper > 0 && !stat) - parrot_interest = M + if(attacker.melee_damage_upper > 0 && !stat) + set_interest(attacker) parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless icon_state = icon_living @@ -335,7 +346,7 @@ parrot_state |= PARROT_FLEE icon_state = icon_living drop_held_item(0) - else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Poly wants a cracker. + else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Polly wants a cracker. qdel(O) if(health < maxHealth) adjustBruteLoss(-10) @@ -352,7 +363,7 @@ if(parrot_state == PARROT_PERCH) parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - parrot_interest = null + set_interest(null) parrot_state = PARROT_WANDER | PARROT_FLEE //Been shot and survived! RUN LIKE HELL! //parrot_been_shot += 5 icon_state = icon_living @@ -444,7 +455,7 @@ speak = newspeak //Search for item to steal - parrot_interest = search_for_item() + set_interest(search_for_item()) if(parrot_interest) manual_emote("looks in [parrot_interest]'s direction and takes flight.") parrot_state = PARROT_SWOOP | PARROT_STEAL @@ -455,7 +466,7 @@ else if(parrot_state == PARROT_WANDER) //Stop movement, we'll set it later walk(src, 0) - parrot_interest = null + set_interest(null) //Wander around aimlessly. This will help keep the loops from searches down //and possibly move the mob into a new are in view of something they can use @@ -464,15 +475,15 @@ return if(!held_item && !parrot_perch) //If we've got nothing to do.. look for something to do. - var/atom/movable/AM = search_for_perch_and_item() //This handles checking through lists so we know it's either a perch or stealable item - if(AM) - if(istype(AM, /obj/item) || isliving(AM)) //If stealable item - parrot_interest = AM + var/atom/movable/potential_perch = search_for_perch_and_item() //This handles checking through lists so we know it's either a perch or stealable item + if(potential_perch) + if(istype(potential_perch, /obj/item) || isliving(potential_perch)) //If stealable item + set_interest(potential_perch) manual_emote("turns and flies towards [parrot_interest].") parrot_state = PARROT_SWOOP | PARROT_STEAL return else //Else it's a perch - parrot_perch = AM + set_perch(potential_perch) parrot_state = PARROT_SWOOP | PARROT_RETURN return return @@ -512,7 +523,7 @@ parrot_interest.forceMove(src) visible_message("[src] grabs [held_item]!", "You grab [held_item]!", "You hear the sounds of wings flapping furiously.") - parrot_interest = null + set_interest(null) parrot_state = PARROT_SWOOP | PARROT_RETURN return @@ -526,7 +537,7 @@ else if(parrot_state == (PARROT_SWOOP | PARROT_RETURN)) walk(src, 0) if(!parrot_perch || !isturf(parrot_perch.loc)) //Make sure the perch exists and somehow isnt inside of something else. - parrot_perch = null + set_perch(null) parrot_state = PARROT_WANDER return @@ -560,7 +571,7 @@ //If we're attacking a nothing, an object, a turf or a ghost for some stupid reason, switch to wander if(!parrot_interest || !isliving(parrot_interest)) - parrot_interest = null + set_interest(null) parrot_state = PARROT_WANDER return @@ -574,7 +585,7 @@ //If the mob we've been chasing/attacking dies or falls into crit, check for loot! if(L.stat) - parrot_interest = null + set_interest(null) if(!held_item) held_item = steal_from_ground() if(!held_item) @@ -598,8 +609,8 @@ //-----STATE MISHAP else //This should not happen. If it does lets reset everything and try again walk(src,0) - parrot_interest = null - parrot_perch = null + set_interest(null) + set_perch(null) drop_held_item() parrot_state = PARROT_WANDER return @@ -872,13 +883,29 @@ to_chat(src, "You will now [a_intent] others.") return +/mob/living/simple_animal/parrot/proc/set_interest(atom/movable/new_interest) + if(parrot_interest) + UnregisterSignal(parrot_interest, COMSIG_PARENT_QDELETING) + parrot_interest = null + if(new_interest) + parrot_interest = new_interest + RegisterSignal(parrot_interest, COMSIG_PARENT_QDELETING, PROC_REF(set_interest)) + +/mob/living/simple_animal/parrot/proc/set_perch(obj/new_perch) + if(parrot_perch) + UnregisterSignal(parrot_perch, COMSIG_PARENT_QDELETING) + parrot_perch = null + if(new_perch) + parrot_perch = new_perch + RegisterSignal(parrot_perch, COMSIG_PARENT_QDELETING, PROC_REF(set_perch)) + /* * Sub-types */ -/mob/living/simple_animal/parrot/Poly - name = "Poly" - desc = "Poly the Parrot. An expert on quantum cracker theory." - speak = list("Poly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE") +/mob/living/simple_animal/parrot/Polly + name = "Polly" + desc = "Polly the Parrot. An expert on quantum cracker theory." + speak = list("Polly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE") gold_core_spawnable = NO_SPAWN speak_chance = 3 var/memory_saved = FALSE @@ -886,7 +913,7 @@ var/longest_survival = 0 var/longest_deathstreak = 0 -/mob/living/simple_animal/parrot/Poly/Initialize() +/mob/living/simple_animal/parrot/Polly/Initialize() ears = new /obj/item/radio/headset/headset_eng(src) available_channels = list(":e") Read_Memory() @@ -907,33 +934,33 @@ . = ..() -/mob/living/simple_animal/parrot/Poly/Life() +/mob/living/simple_animal/parrot/Polly/Life() if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory(FALSE) memory_saved = TRUE ..() -/mob/living/simple_animal/parrot/Poly/death(gibbed) +/mob/living/simple_animal/parrot/Polly/death(gibbed) if(!memory_saved) Write_Memory(TRUE) if(rounds_survived == longest_survival || rounds_survived == longest_deathstreak || prob(0.666)) - var/mob/living/simple_animal/parrot/Poly/ghost/G = new(loc) + var/mob/living/simple_animal/parrot/Polly/ghost/G = new(loc) if(mind) mind.transfer_to(G) else G.key = key ..(gibbed) -/mob/living/simple_animal/parrot/Poly/proc/Read_Memory() - if(fexists("data/npc_saves/Poly.sav")) //legacy compatability to convert old format to new - var/savefile/S = new /savefile("data/npc_saves/Poly.sav") +/mob/living/simple_animal/parrot/Polly/proc/Read_Memory() + if(fexists("data/npc_saves/Polly.sav")) //legacy compatability to convert old format to new + var/savefile/S = new /savefile("data/npc_saves/Polly.sav") S["phrases"] >> speech_buffer S["roundssurvived"] >> rounds_survived S["longestsurvival"] >> longest_survival S["longestdeathstreak"] >> longest_deathstreak - fdel("data/npc_saves/Poly.sav") + fdel("data/npc_saves/Polly.sav") else - var/json_file = file("data/npc_saves/Poly.json") + var/json_file = file("data/npc_saves/Polly.json") if(!fexists(json_file)) return var/list/json = json_decode(file2text(json_file)) @@ -944,8 +971,8 @@ if(!islist(speech_buffer)) speech_buffer = list() -/mob/living/simple_animal/parrot/Poly/proc/Write_Memory(dead) - var/json_file = file("data/npc_saves/Poly.json") +/mob/living/simple_animal/parrot/Polly/proc/Write_Memory(dead) + var/json_file = file("data/npc_saves/Polly.json") var/list/file_data = list() if(islist(speech_buffer)) file_data["phrases"] = speech_buffer @@ -966,8 +993,8 @@ fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) -/mob/living/simple_animal/parrot/Poly/ghost - name = "The Ghost of Poly" +/mob/living/simple_animal/parrot/Polly/ghost + name = "The Ghost of Polly" desc = "Doomed to squawk the Earth." color = "#FFFFFF77" speak_chance = 20 @@ -975,16 +1002,16 @@ incorporeal_move = INCORPOREAL_MOVE_BASIC butcher_results = list(/obj/item/ectoplasm = 1) -/mob/living/simple_animal/parrot/Poly/ghost/Initialize() +/mob/living/simple_animal/parrot/Polly/ghost/Initialize() memory_saved = TRUE //At this point nothing is saved . = ..() -/mob/living/simple_animal/parrot/Poly/ghost/handle_automated_speech() +/mob/living/simple_animal/parrot/Polly/ghost/handle_automated_speech() if(ismob(loc)) return ..() -/mob/living/simple_animal/parrot/Poly/ghost/handle_automated_movement() +/mob/living/simple_animal/parrot/Polly/ghost/handle_automated_movement() if(isliving(parrot_interest)) if(!ishuman(parrot_interest)) parrot_interest = null @@ -993,7 +1020,7 @@ Possess(parrot_interest) ..() -/mob/living/simple_animal/parrot/Poly/ghost/proc/Possess(mob/living/carbon/human/H) +/mob/living/simple_animal/parrot/Polly/ghost/proc/Possess(mob/living/carbon/human/H) if(!ishuman(H)) return var/datum/disease/parrot_possession/P = new diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 00e64d63c6ed..c21a2a6f365d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -168,6 +168,9 @@ nest.spawned_mobs -= src nest = null + if(access_card) + QDEL_NULL(access_card) + return ..() /mob/living/simple_animal/attackby(obj/item/O, mob/user, params) @@ -623,7 +626,14 @@ if(AIStatus == togglestatus) return + GLOB.simple_animals[AIStatus] -= src + GLOB.simple_animals[togglestatus] += list(src) + AIStatus = togglestatus + var/virt_z = "[virtual_z()]" + if(!virt_z) + return + switch(togglestatus) if(AI_Z_OFF) LAZYADDASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src) @@ -631,16 +641,14 @@ else LAZYREMOVEASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src) - GLOB.simple_animals[AIStatus] -= src - GLOB.simple_animals[togglestatus] += list(src) - AIStatus = togglestatus - /mob/living/simple_animal/proc/check_should_sleep() if (pulledby || shouldwakeup) toggle_ai(AI_ON) return var/virt_z = "[virtual_z()]" + if(!virt_z) + return var/players_on_virtual_z = LAZYACCESS(SSmobs.players_by_virtual_z, virt_z) if(!length(players_on_virtual_z)) toggle_ai(AI_Z_OFF) @@ -655,5 +663,8 @@ /mob/living/simple_animal/on_virtual_z_change(new_virtual_z, previous_virtual_z) . = ..() + if(previous_virtual_z) + LAZYREMOVEASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, "[previous_virtual_z]", src) toggle_ai(initial(AIStatus)) - check_should_sleep() + if(new_virtual_z) + check_should_sleep() diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 777144a068cf..5260c76e8a01 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -54,13 +54,13 @@ break if(Target.health <= -70 || Target.stat == DEAD) - Target = null + set_target(null) AIproc = 0 break if(Target) if(locate(/mob/living/simple_animal/slime) in Target.buckled_mobs) - Target = null + set_target(null) AIproc = 0 break if(!AIproc) @@ -98,7 +98,7 @@ // Bug of the month candidate: slimes were attempting to move to target only if it was directly next to them, which caused them to target things, but not approach them step_to(src, Target) else - Target = null + set_target(null) AIproc = 0 break @@ -174,12 +174,10 @@ if(M.stat == DEAD) // our victim died if(!client) if(!rabid && !attacked) - if(M.LAssailant && M.LAssailant != M) + var/mob/last_to_hurt = M.LAssailant?.resolve() + if(last_to_hurt && last_to_hurt != M) if(prob(50)) - if(!(M.LAssailant in Friends)) - Friends[M.LAssailant] = 1 - else - ++Friends[M.LAssailant] + add_friendship(last_to_hurt, 1) else to_chat(src, "This subject does not have a strong enough life energy anymore...") @@ -290,7 +288,7 @@ --target_patience if (target_patience <= 0 || SStun > world.time || Discipline || attacked || docile) // Tired of chasing or something draws out attention target_patience = 0 - Target = null + set_target(null) if(AIproc && SStun > world.time) return @@ -305,7 +303,7 @@ if(hungry == 2 && !client) // if a slime is starving, it starts losing its friends if(Friends.len > 0 && prob(1)) var/mob/nofriend = pick(Friends) - --Friends[nofriend] + add_friendship(nofriend, -1) if(!Target) if(will_hunt() && hungry || attacked || rabid) // Only add to the list if we need to @@ -339,16 +337,16 @@ if(targets.len > 0) if(attacked || rabid || hungry == 2) - Target = targets[1] // I am attacked and am fighting back or so hungry I don't even care + set_target(targets[1]) // I am attacked and am fighting back or so hungry I don't even care else for(var/mob/living/carbon/C in targets) if(!Discipline && prob(5)) if(ishuman(C) || isalienadult(C)) - Target = C + set_target(C) break if(islarva(C) || ismonkey(C)) - Target = C + set_target(C) break if (Target) @@ -422,13 +420,13 @@ if (Leader == who) // Already following him to_say = pick("Yes...", "Lead...", "Follow...") else if (Friends[who] > Friends[Leader]) // VIVA - Leader = who + set_leader(who) to_say = "Yes... I follow [who]..." else to_say = "No... I follow [Leader]..." else if (Friends[who] >= SLIME_FRIENDSHIP_FOLLOW) - Leader = who + set_leader(who) to_say = "I follow..." else // Not friendly enough to_say = pick("No...", "I no follow...") @@ -436,27 +434,27 @@ if (buckled) // We are asked to stop feeding if (Friends[who] >= SLIME_FRIENDSHIP_STOPEAT) Feedstop() - Target = null + set_target(null) if (Friends[who] < SLIME_FRIENDSHIP_STOPEAT_NOANGRY) - --Friends[who] + add_friendship(who, -1) to_say = "Grrr..." // I'm angry but I do it else to_say = "Fine..." else if (Target) // We are asked to stop chasing if (Friends[who] >= SLIME_FRIENDSHIP_STOPCHASE) - Target = null + set_target(null) if (Friends[who] < SLIME_FRIENDSHIP_STOPCHASE_NOANGRY) - --Friends[who] + add_friendship(who, -1) to_say = "Grrr..." // I'm angry but I do it else to_say = "Fine..." else if (Leader) // We are asked to stop following if (Leader == who) to_say = "Yes... I stay..." - Leader = null + set_leader(null) else if (Friends[who] > Friends[Leader]) - Leader = null + set_leader(null) to_say = "Yes... I stop..." else to_say = "No... keep follow..." @@ -478,7 +476,7 @@ to_say = "No... won't stay..." else if (findtext(phrase, "attack")) if (rabid && prob(20)) - Target = who + set_target(who) AIprocess() //Wake up the slime's Target AI, needed otherwise this doesn't work to_say = "ATTACK!?!?" else if (Friends[who] >= SLIME_FRIENDSHIP_ATTACK) @@ -486,14 +484,14 @@ if (findtext(phrase, lowertext(L.name))) if (isslime(L)) to_say = "NO... [L] slime friend" - --Friends[who] //Don't ask a slime to attack its friend + add_friendship(who, -1) //Don't ask a slime to attack its friend else if(!Friends[L] || Friends[L] < 1) - Target = L + set_target(L) AIprocess()//Wake up the slime's Target AI, needed otherwise this doesn't work to_say = "Ok... I attack [Target]" else to_say = "No... like [L] ..." - --Friends[who] //Don't ask a slime to attack its friend + add_friendship(who, -1) //Don't ask a slime to attack its friend break else to_say = "No... no listen" diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 1503455c4a23..c7174470dc5c 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -197,7 +197,7 @@ M.powerlevel = new_powerlevel if(i != 1) step_away(M,src) - M.Friends = Friends.Copy() + M.set_friends(Friends) babies += M M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 654b7d9bd7e6..d8d34a804958 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -1,3 +1,4 @@ +#define SLIME_CARES_ABOUT(to_check) (to_check && (to_check == Target || to_check == Leader || (to_check in Friends))) /mob/living/simple_animal/slime name = "grey baby slime (123)" icon = 'icons/mob/slimes.dmi' @@ -109,10 +110,9 @@ for (var/A in actions) var/datum/action/AC = A AC.Remove(src) - Target = null - Leader = null - Friends.Cut() - speech_buffer.Cut() + set_target(null) + set_leader(null) + clear_friends() return ..() /mob/living/simple_animal/slime/proc/set_colour(new_colour) @@ -334,10 +334,7 @@ /mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/stack/sheet/mineral/plasma) && !stat) //Let's you feed slimes plasma. - if (user in Friends) - ++Friends[user] - else - Friends[user] = 1 + add_friendship(user, 1) to_chat(user, "You feed the slime the plasma. It chirps happily.") var/obj/item/stack/sheet/mineral/plasma/S = W S.use(1) @@ -405,7 +402,7 @@ adjustBruteLoss(rand(15,20)) if(!client) if(Target) // Like cats - Target = null + set_target(null) ++Discipline return @@ -450,8 +447,7 @@ if(Discipline == 1) attacked = 0 - if(Target) - Target = null + set_target(null) if(buckled) Feedstop(silent = TRUE) //we unbuckle the slime from the mob it latched onto. @@ -487,3 +483,55 @@ /mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_is_adult) . = ..(mapload, pick(slime_colours), prob(50)) + +/mob/living/simple_animal/slime/proc/set_target(new_target) + var/old_target = Target + Target = new_target + if(old_target && !SLIME_CARES_ABOUT(old_target)) + UnregisterSignal(old_target, COMSIG_PARENT_QDELETING) + if(Target) + RegisterSignal(Target, COMSIG_PARENT_QDELETING, .proc/clear_memories_of, override = TRUE) + +/mob/living/simple_animal/slime/proc/set_leader(new_leader) + var/old_leader = Leader + Leader = new_leader + if(old_leader && !SLIME_CARES_ABOUT(old_leader)) + UnregisterSignal(old_leader, COMSIG_PARENT_QDELETING) + if(Leader) + RegisterSignal(Leader, COMSIG_PARENT_QDELETING, .proc/clear_memories_of, override = TRUE) + +/mob/living/simple_animal/slime/proc/add_friendship(new_friend, amount = 1) + if(!Friends[new_friend]) + Friends[new_friend] = 0 + Friends[new_friend] += amount + if(new_friend) + RegisterSignal(new_friend, COMSIG_PARENT_QDELETING, .proc/clear_memories_of, override = TRUE) + +/mob/living/simple_animal/slime/proc/set_friendship(new_friend, amount = 1) + Friends[new_friend] = amount + if(new_friend) + RegisterSignal(new_friend, COMSIG_PARENT_QDELETING, .proc/clear_memories_of, override = TRUE) + +/mob/living/simple_animal/slime/proc/remove_friend(friend) + Friends -= friend + if(friend && !SLIME_CARES_ABOUT(friend)) + UnregisterSignal(friend, COMSIG_PARENT_QDELETING) + +/mob/living/simple_animal/slime/proc/set_friends(new_buds) + clear_friends() + for(var/mob/friend as anything in new_buds) + set_friendship(friend, new_buds[friend]) + +/mob/living/simple_animal/slime/proc/clear_friends() + for(var/mob/friend as anything in Friends) + remove_friend(friend) + +/mob/living/simple_animal/slime/proc/clear_memories_of(datum/source) + SIGNAL_HANDLER + if(source == Target) + set_target(null) + if(source == Leader) + set_leader(null) + remove_friend(source) + +#undef SLIME_CARES_ABOUT diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 00cac3ed2b84..ae0871880818 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -4,9 +4,7 @@ SStgui.on_logout(src) unset_machine() remove_from_player_list() - if(client?.movingmob) //In the case the client was transferred to another mob and not deleted. - LAZYREMOVE(client.movingmob.client_mobs_in_contents, src) - client.movingmob = null + clear_client_in_contents() ..() if(loc) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d5e26b6aef3f..49fe6a0f059e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -16,13 +16,11 @@ * * qdels any client colours in place on this mob * - * Unsets the currently active machine - * - * Clears roundstart quirks list + * Clears any refs to the mob inside its current location * * Ghostizes the client attached to this mob * - * Removes references to the mob from its former mind, and vice versa + * If our mind still exists, clear its current var to prevent harddels * * Parent call */ @@ -47,12 +45,10 @@ QDEL_LIST(client_colours) active_storage = null unset_machine() - ghostize() - if(mind) - mind.handle_mob_deletion(src) - if(istype(loc, /atom/movable)) - var/atom/movable/movable_loc = loc - LAZYREMOVE(movable_loc.client_mobs_in_contents, src) + clear_client_in_contents() //Gotta do this here as well as Logout, since client will be null by the time it gets there, cause of that ghostize + ghostize() //False, since we're deleting it currently + if(mind?.current == src) //Let's just be safe yeah? This will occasionally be cleared, but not always. Can't do it with ghostize without changing behavior + mind.set_current(null) return ..() @@ -1349,3 +1345,64 @@ /// Used for typing indicator, relevant on /living level /mob/proc/set_typing_indicator(state) return + +/mob/vv_edit_var(var_name, var_value) + switch(var_name) + if(NAMEOF(src, control_object)) + var/obj/O = var_value + if(!istype(O) || (O.obj_flags & DANGEROUS_POSSESSION)) + return FALSE + if(NAMEOF(src, machine)) + set_machine(var_value) + . = TRUE + if(NAMEOF(src, focus)) + set_focus(var_value) + . = TRUE + if(NAMEOF(src, nutrition)) + set_nutrition(var_value) + . = TRUE + if(NAMEOF(src, stat)) + set_stat(var_value) + . = TRUE + if(NAMEOF(src, dizziness)) + set_dizziness(var_value) + . = TRUE + if(NAMEOF(src, eye_blind)) + set_blindness(var_value) + . = TRUE + if(NAMEOF(src, eye_blurry)) + set_blurriness(var_value) + . = TRUE + + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown)) + var/diff + if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value)) + remove_movespeed_modifier(/datum/movespeed_modifier/admin_varedit) + diff = var_value - cached_multiplicative_slowdown + + . = ..() + + if(. && slowdown_edit && isnum(diff)) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/admin_varedit, multiplicative_slowdown = diff) + +/mob/proc/set_active_storage(new_active_storage) + if(active_storage) + UnregisterSignal(active_storage, COMSIG_PARENT_QDELETING) + active_storage = new_active_storage + if(active_storage) + RegisterSignal(active_storage, COMSIG_PARENT_QDELETING, .proc/active_storage_deleted) + +/mob/proc/active_storage_deleted(datum/source) + SIGNAL_HANDLER + set_active_storage(null) + +///Clears the client in contents list of our current "eye". Prevents hard deletes +/mob/proc/clear_client_in_contents() + if(client?.movingmob) //In the case the client was transferred to another mob and not deleted. + client.movingmob.client_mobs_in_contents -= src + UNSETEMPTY(client.movingmob.client_mobs_in_contents) + client.movingmob = null diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 4e8a0a057c6e..6873ee602dac 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -151,8 +151,8 @@ /// Can this mob enter shuttles var/move_on_shuttle = 1 - ///The last mob/living/carbon to push/drag/grab this mob (exclusively used by slimes friend recognition) - var/mob/living/carbon/LAssailant = null + ///A weakref to the last mob/living/carbon to push/drag/grab this mob (exclusively used by slimes friend recognition) + var/datum/weakref/LAssailant = null /** * construct spells and mime spells. diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index f7ef27f0c298..4c4a58378410 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -396,7 +396,7 @@ A.name = header A.desc = message A.action = action - A.target = source + A.target_ref = WEAKREF(source) if(!alert_overlay) alert_overlay = new(source) alert_overlay.layer = FLOAT_LAYER diff --git a/code/modules/mob/mob_lists.dm b/code/modules/mob/mob_lists.dm index 861a87649ebf..5484c41680d2 100644 --- a/code/modules/mob/mob_lists.dm +++ b/code/modules/mob/mob_lists.dm @@ -22,7 +22,6 @@ if(client) remove_from_current_living_players() - ///Adds the mob reference to the list of all the dead mobs. If mob is cliented, it adds it to the list of all dead player-mobs. /mob/proc/add_to_dead_mob_list() if(QDELETED(src)) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 498538185578..0b68a919b17c 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -305,7 +305,7 @@ var/mob/M = AM if(M.buckled) continue - if(!AM.CanPass(src) || AM.density) + if(AM.density || !AM.CanPass(src, get_dir(AM, src))) if(AM.anchored) return AM if(pulling == AM) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ab15d70a29ba..aa8a869da38a 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -92,7 +92,7 @@ if(tr_flags & TR_KEEPORGANS) for(var/X in O.internal_organs) var/obj/item/organ/I = X - I.Remove(O, 1) + I.Remove(O, TRUE) if(mind) mind.transfer_to(O) @@ -105,11 +105,11 @@ for(var/X in internal_organs) var/obj/item/organ/I = X int_organs += I - I.Remove(src, 1) + I.Remove(src, TRUE) for(var/X in int_organs) var/obj/item/organ/I = X - I.Insert(O, 1) + I.Insert(O, TRUE) var/obj/item/bodypart/chest/torso = O.get_bodypart(BODY_ZONE_CHEST) if(cavity_object) diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm index 27eb3a6ae970..92369d9917ff 100644 --- a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm +++ b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm @@ -22,6 +22,8 @@ /datum/ntnet_conversation/Destroy() if(SSnetworks.station_network) SSnetworks.station_network.chat_channels.Remove(src) + for(var/datum/computer_file/program/chatclient/chatterbox in clients) + purge_client(chatterbox) return ..() /datum/ntnet_conversation/proc/add_message(message, username) @@ -38,23 +40,30 @@ return messages = messages.Copy(messages.len-50 ,0) -/datum/ntnet_conversation/proc/add_client(datum/computer_file/program/chatclient/C) - if(!istype(C)) +/datum/ntnet_conversation/proc/add_client(datum/computer_file/program/chatclient/new_user) + if(!istype(new_user)) return - clients.Add(C) - add_status_message("[C.username] has joined the channel.") + new_user.conversations |= src + clients.Add(new_user) + add_status_message("[new_user.username] has joined the channel.") // No operator, so we assume the channel was empty. Assign this user as operator. if(!operator) - changeop(C) + changeop(new_user) -/datum/ntnet_conversation/proc/remove_client(datum/computer_file/program/chatclient/C) - if(!istype(C) || !(C in clients)) +//Clear all of our references to a client, used for client deletion +/datum/ntnet_conversation/proc/purge_client(datum/computer_file/program/chatclient/forget) + remove_client(forget) + forget.conversations -= src + +/datum/ntnet_conversation/proc/remove_client(datum/computer_file/program/chatclient/leaving) + if(!istype(leaving)) return - clients.Remove(C) - add_status_message("[C.username] has left the channel.") + if(leaving in clients) + clients.Remove(leaving) + add_status_message("[leaving.username] has left the channel.") // Channel operator left, pick new operator - if(C == operator) + if(leaving == operator) operator = null if(clients.len) var/datum/computer_file/program/chatclient/newop = pick(clients) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index fba43fdd5403..92afe88776b0 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -25,8 +25,6 @@ /obj/machinery/modular_computer/console/preset/proc/install_programs() return - - // ===== ENGINEERING CONSOLE ===== /obj/machinery/modular_computer/console/preset/engineering console_department = "Engineering" diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 34fd2d25a034..bc65f94ad440 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -43,7 +43,7 @@ var/list/alarm = our_sort[areaname] var/list/sources = alarm[3] if (!(source in sources)) - sources += source + sources += WEAKREF(source) return TRUE var/obj/machinery/camera/cam = null @@ -54,7 +54,7 @@ cam = our_cams[1] else if(cameras && istype(cameras, /obj/machinery/camera)) cam = cameras - our_sort[home.name] = list(home, (cam ? cam : cameras), list(source)) + our_sort[home.name] = list(home, (cam ? cam : cameras), list(WEAKREF(source))) update_alarm_display() return TRUE @@ -76,7 +76,7 @@ /datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin) var/list/L = alarms[class] - var/cleared = 0 + var/cleared = FALSE var/arealevelalarm = FALSE // set to TRUE for alarms that set/clear whole areas if (class=="Fire") arealevelalarm = TRUE @@ -85,14 +85,18 @@ if (!arealevelalarm) // the traditional behaviour var/list/alarm = L[I] var/list/srcs = alarm[3] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) - cleared = 1 + if (WEAKREF(origin) in srcs) + srcs -= WEAKREF(origin) + for(var/datum/weakref/ref as anything in srcs) + if(ref.resolve()) + continue + srcs -= ref + if (!length(srcs)) + cleared = TRUE L -= I else L -= I // wipe the instances entirely - cleared = 1 + cleared = TRUE update_alarm_display() diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index b34c7e7dfb30..ff776b417a17 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -14,12 +14,20 @@ var/username var/active_channel var/list/channel_history = list() - var/operator_mode = FALSE // Channel operator mode - var/netadmin_mode = FALSE // Administrator mode (invisible to other users + bypasses passwords) + var/operator_mode = FALSE // Channel operator mode + var/netadmin_mode = FALSE // Administrator mode (invisible to other users + bypasses passwords) + //A list of all the converstations we're a part of + var/list/datum/ntnet_conversation/conversations = list() /datum/computer_file/program/chatclient/New() username = "DefaultUser[rand(100, 999)]" +/datum/computer_file/program/chatclient/Destroy() + for(var/datum/ntnet_conversation/discussion as anything in conversations) + discussion.purge_client(src) + conversations.Cut() + return ..() + /datum/computer_file/program/chatclient/ui_act(action, params) . = ..() if(.) diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 7e2954611bfc..d1c6335587a4 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -36,11 +36,15 @@ refresh() /datum/computer_file/program/supermatter_monitor/kill_program(forced = FALSE) + for(var/supermatter in supermatters) + clear_supermatter(supermatter) supermatters = null ..() // Refreshes list of active supermatter crystals /datum/computer_file/program/supermatter_monitor/proc/refresh() + for(var/supermatter in supermatters) + clear_supermatter(supermatter) supermatters = list() var/turf/T = get_turf(ui_host()) if(!T) @@ -50,9 +54,7 @@ if (!isturf(S.loc) || !S.virtual_z() == T.virtual_z()) continue supermatters.Add(S) - - if(!(active in supermatters)) - active = null + RegisterSignal(S, COMSIG_PARENT_QDELETING, .proc/react_to_del) /datum/computer_file/program/supermatter_monitor/proc/get_status() . = SUPERMATTER_INACTIVE @@ -185,3 +187,13 @@ active = S set_signals() return TRUE + +/datum/computer_file/program/supermatter_monitor/proc/react_to_del(datum/source) + SIGNAL_HANDLER + clear_supermatter(source) + +/datum/computer_file/program/supermatter_monitor/proc/clear_supermatter(matter) + supermatters -= matter + if(matter == active) + active = null + UnregisterSignal(matter, COMSIG_PARENT_QDELETING) diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index 2e735158b6fe..bad68010557c 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -117,7 +117,7 @@ return null /obj/item/computer_hardware/hard_drive/Destroy() - stored_files = null + QDEL_LIST(stored_files) return ..() /obj/item/computer_hardware/hard_drive/Initialize() diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index f6a8b7333f9c..c00d32d25809 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -49,7 +49,7 @@ /obj/item/energy_katana/dropped(mob/user) . = ..() - jaunt.Remove(user) + jaunt?.Remove(user) user.update_icons() //If we hit the Ninja who owns this Katana, they catch it. @@ -96,6 +96,7 @@ /obj/item/energy_katana/Destroy() QDEL_NULL(spark_system) + QDEL_NULL(jaunt) return ..() /datum/action/innate/dash/ninja diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index c4ba5eede53a..cb355014d4e7 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -72,6 +72,11 @@ Contents: cell.name = "black power cell" cell.icon_state = "bscell" +/obj/item/clothing/suit/space/space_ninja/Destroy() + QDEL_NULL(spark_system) + QDEL_NULL(cell) + return ..() + // Space Suit temperature regulation and power usage /obj/item/clothing/suit/space/space_ninja/process() var/mob/living/carbon/human/user = src.loc diff --git a/code/modules/overmap/_overmap_datum.dm b/code/modules/overmap/_overmap_datum.dm index 60756a2ce9e1..420b7aad4055 100644 --- a/code/modules/overmap/_overmap_datum.dm +++ b/code/modules/overmap/_overmap_datum.dm @@ -65,10 +65,13 @@ /datum/overmap/Destroy(force, ...) SSovermap.overmap_objects -= src if(docked_to) - Undock(TRUE) - SSovermap.overmap_container[x][y] -= src + docked_to.post_undocked() + docked_to.contents -= src + if(isnum(x) && isnum(y)) + SSovermap.overmap_container[x][y] -= src token.parent = null QDEL_NULL(token) + QDEL_LIST(contents) return ..() /** @@ -328,7 +331,7 @@ docked_to.contents -= src var/datum/overmap/old_docked_to = docked_to docked_to = null - token.Move(OVERMAP_TOKEN_TURF(x, y)) + token.forceMove(OVERMAP_TOKEN_TURF(x, y)) INVOKE_ASYNC(old_docked_to, .proc/post_undocked, src) docking = FALSE SEND_SIGNAL(src, COMSIG_OVERMAP_UNDOCK, old_docked_to) diff --git a/code/modules/overmap/helm.dm b/code/modules/overmap/helm.dm index 5c672f12a189..e39b6bc88866 100644 --- a/code/modules/overmap/helm.dm +++ b/code/modules/overmap/helm.dm @@ -81,7 +81,7 @@ current_ship = null /obj/machinery/computer/helm/proc/cancel_jump() - priority_announce("Bluespace Pylon spooling down. Jump calibration aborted.", sender_override="[current_ship.name] Bluespace Pylon", zlevel=virtual_z()) + priority_announce("Bluespace Pylon spooling down. Jump calibration aborted.", sender_override = "[current_ship.name] Bluespace Pylon", zlevel = virtual_z()) calibrating = FALSE deltimer(jump_timer) @@ -92,20 +92,20 @@ SStgui.close_uis(src) if(JUMP_STATE_CHARGING) jump_state = JUMP_STATE_IONIZING - priority_announce("Bluespace Jump Calibration completed. Ionizing Bluespace Pylon.", sender_override="[current_ship.name] Bluespace Pylon", zlevel=virtual_z()) + priority_announce("Bluespace Jump Calibration completed. Ionizing Bluespace Pylon.", sender_override = "[current_ship.name] Bluespace Pylon", zlevel = virtual_z()) if(JUMP_STATE_IONIZING) jump_state = JUMP_STATE_FIRING - priority_announce("Bluespace Ionization finalized; preparing to fire Bluespace Pylon.", sender_override="[current_ship.name] Bluespace Pylon", zlevel=virtual_z()) + priority_announce("Bluespace Ionization finalized; preparing to fire Bluespace Pylon.", sender_override = "[current_ship.name] Bluespace Pylon", zlevel = virtual_z()) if(JUMP_STATE_FIRING) jump_state = JUMP_STATE_FINALIZED - priority_announce("Bluespace Pylon launched.", sender_override="[current_ship.name] Bluespace Pylon", sound='sound/magic/lightning_chargeup.ogg', zlevel=virtual_z()) + priority_announce("Bluespace Pylon launched.", sender_override = "[current_ship.name] Bluespace Pylon", sound = 'sound/magic/lightning_chargeup.ogg', zlevel = virtual_z()) addtimer(CALLBACK(src, .proc/do_jump), 10 SECONDS) return - addtimer(CALLBACK(src, .proc/jump_sequence, TRUE), JUMP_CHARGE_DELAY) + jump_timer = addtimer(CALLBACK(src, .proc/jump_sequence, TRUE), JUMP_CHARGE_DELAY, TIMER_STOPPABLE) /obj/machinery/computer/helm/proc/do_jump() - priority_announce("Bluespace Jump Initiated.", sender_override="[current_ship.name] Bluespace Pylon", sound='sound/magic/lightningbolt.ogg', zlevel=virtual_z()) - current_ship.shuttle_port.intoTheSunset() + priority_announce("Bluespace Jump Initiated.", sender_override = "[current_ship.name] Bluespace Pylon", sound = 'sound/magic/lightningbolt.ogg', zlevel = virtual_z()) + qdel(current_ship) /obj/machinery/computer/helm/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) if(current_ship && current_ship != port.current_ship) @@ -183,7 +183,7 @@ //Detect any ships in this location we can dock to if(istype(object)) - for(var/obj/docking_port/stationary/docking_port in object.shuttle_port.docking_points) + for(var/obj/docking_port/stationary/docking_port as anything in object.shuttle_port.docking_points) if(current_ship.shuttle_port.check_dock(docking_port, silent = TRUE)) available_dock = TRUE break @@ -211,23 +211,27 @@ .["aiControls"] = allow_ai_control .["burnDirection"] = current_ship.burn_direction .["burnPercentage"] = current_ship.burn_percentage - for(var/obj/machinery/power/shuttle/engine/E as anything in current_ship.shuttle_port.engine_list) + for(var/datum/weakref/engine in current_ship.shuttle_port.engine_list) + var/obj/machinery/power/shuttle/engine/real_engine = engine.resolve() + if(!real_engine) + current_ship.shuttle_port.engine_list -= engine + continue var/list/engine_data - if(!E.thruster_active) + if(!real_engine.thruster_active) engine_data = list( - name = E.name, + name = real_engine.name, fuel = 0, maxFuel = 100, - enabled = E.enabled, - ref = REF(E) + enabled = real_engine.enabled, + ref = REF(engine) ) else engine_data = list( - name = E.name, - fuel = E.return_fuel(), - maxFuel = E.return_fuel_cap(), - enabled = E.enabled, - ref = REF(E) + name = real_engine.name, + fuel = real_engine.return_fuel(), + maxFuel = real_engine.return_fuel_cap(), + enabled = real_engine.enabled, + ref = REF(engine) ) .["engineInfo"] += list(engine_data) @@ -300,9 +304,13 @@ say(current_ship.Dock(to_act)) return if("toggle_engine") - var/obj/machinery/power/shuttle/engine/E = locate(params["engine"]) in current_ship.shuttle_port.engine_list - E.enabled = !E.enabled - E.update_icon_state() + var/datum/weakref/engine = locate(params["engine"]) in current_ship.shuttle_port.engine_list + var/obj/machinery/power/shuttle/engine/real_engine = engine.resolve() + if(!real_engine) + current_ship.shuttle_port.engine_list -= engine + return + real_engine.enabled = !real_engine.enabled + real_engine.update_icon_state() current_ship.refresh_engines() return if("change_burn_percentage") diff --git a/code/modules/overmap/missions.dm b/code/modules/overmap/missions.dm index 98146f3ac4ad..e3461ced00de 100644 --- a/code/modules/overmap/missions.dm +++ b/code/modules/overmap/missions.dm @@ -50,9 +50,11 @@ qdel(src) /datum/mission/Destroy() + UnregisterSignal(source_outpost, COMSIG_PARENT_QDELETING) LAZYREMOVE(source_outpost.missions, src) source_outpost = null if(servant) + UnregisterSignal(servant, COMSIG_PARENT_QDELETING) LAZYREMOVE(servant.missions, src) servant = null for(var/bound in bound_atoms) diff --git a/code/modules/overmap/objects/dynamic_datum.dm b/code/modules/overmap/objects/dynamic_datum.dm index 4b62f777da73..c6f0ed4a193e 100644 --- a/code/modules/overmap/objects/dynamic_datum.dm +++ b/code/modules/overmap/objects/dynamic_datum.dm @@ -55,12 +55,13 @@ /datum/overmap/dynamic/Destroy() for(var/obj/docking_port/stationary/dock as anything in reserve_docks) reserve_docks -= dock - qdel(dock, TRUE) + qdel(dock) + ruin_turfs = null + . = ..() + //This NEEDS to be last so any docked ships get deleted properly if(mapzone) mapzone.clear_reservation() QDEL_NULL(mapzone) - ruin_turfs = null - return ..() /datum/overmap/dynamic/get_jump_to_turf() if(reserve_docks) @@ -102,7 +103,7 @@ for(var/obj/docking_port/stationary/dock as anything in reserve_docks) reserve_docks -= dock - qdel(dock, TRUE) + qdel(dock) reserve_docks = null if(mapzone) mapzone.clear_reservation() diff --git a/code/modules/overmap/overmap_token.dm b/code/modules/overmap/overmap_token.dm index b69b63142cf0..4d4ca6d23bda 100644 --- a/code/modules/overmap/overmap_token.dm +++ b/code/modules/overmap/overmap_token.dm @@ -37,7 +37,7 @@ update_appearance() /obj/overmap/Destroy(force) - if(parent) + if(!QDELETED(parent)) stack_trace("attempted to qdel a token that still has a parent") return QDEL_HINT_LETMELIVE if(render_map) diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm index d48df5159671..a04355197dd6 100644 --- a/code/modules/overmap/ships/controlled_ship_datum.dm +++ b/code/modules/overmap/ships/controlled_ship_datum.dm @@ -59,7 +59,7 @@ /// Short memo of the ship shown to new joins var/memo = null ///Assoc list of remaining open job slots (job = remaining slots) - var/list/job_slots = list(new /datum/job/captain() = 1, new /datum/job/assistant() = 5) + var/list/job_slots ///Time that next job slot change can occur COOLDOWN_DECLARE(job_slot_adjustment_cooldown) @@ -110,17 +110,29 @@ SSovermap.controlled_ships += src /datum/overmap/ship/controlled/Destroy() + //SHOULD be called first + . = ..() SSovermap.controlled_ships -= src + helms.Cut() + LAZYCLEARLIST(owner_candidates) if(!QDELETED(shuttle_port)) - shuttle_port.intoTheSunset() + shuttle_port.current_ship = null + qdel(shuttle_port, TRUE) + shuttle_port = null if(!QDELETED(ship_account)) QDEL_NULL(ship_account) + if(!QDELETED(shipkey)) + QDEL_NULL(shipkey) + QDEL_LIST(manifest) + job_slots.Cut() for(var/a_key in applications) + if(isnull(applications[a_key])) + continue // it handles removal itself qdel(applications[a_key]) + LAZYCLEARLIST(applications) // set ourselves to ownerless to unregister signals set_owner_mob(null) - return ..() /datum/overmap/ship/controlled/get_jump_to_turf() return get_turf(shuttle_port) @@ -187,10 +199,10 @@ var/thrust_used = 0 //The amount of thrust that the engines will provide with one burn refresh_engines() calculate_avg_fuel() - for(var/obj/machinery/power/shuttle/engine/E as anything in shuttle_port.engine_list) - if(!E.enabled) + for(var/obj/machinery/power/shuttle/engine/real_engine as anything in shuttle_port.get_engines()) + if(!real_engine.enabled) continue - thrust_used += E.burn_engine(percentage, deltatime) + thrust_used += real_engine.burn_engine(percentage, deltatime) thrust_used = thrust_used / (shuttle_port.turf_count * 100) est_thrust = thrust_used / percentage * 100 //cheeky way of rechecking the thrust, check it every time it's used @@ -202,10 +214,10 @@ */ /datum/overmap/ship/controlled/proc/refresh_engines() var/calculated_thrust - for(var/obj/machinery/power/shuttle/engine/E as anything in shuttle_port.engine_list) - E.update_engine() - if(E.enabled) - calculated_thrust += E.thrust + for(var/obj/machinery/power/shuttle/engine/real_engine as anything in shuttle_port.get_engines()) + real_engine.update_engine() + if(real_engine.enabled) + calculated_thrust += real_engine.thrust est_thrust = calculated_thrust / (shuttle_port.turf_count * 100) /** @@ -214,10 +226,10 @@ /datum/overmap/ship/controlled/proc/calculate_avg_fuel() var/fuel_avg = 0 var/engine_amnt = 0 - for(var/obj/machinery/power/shuttle/engine/E as anything in shuttle_port.engine_list) - if(!E.enabled) + for(var/obj/machinery/power/shuttle/engine/real_engine as anything in shuttle_port.get_engines()) + if(!real_engine.enabled) continue - fuel_avg += E.return_fuel() / E.return_fuel_cap() + fuel_avg += real_engine.return_fuel() / real_engine.return_fuel_cap() engine_amnt++ if(!engine_amnt || !fuel_avg) avg_fuel_amnt = 0 diff --git a/code/modules/overmap/ships/ship_datum.dm b/code/modules/overmap/ships/ship_datum.dm index c3b00b0b6f26..9c68b0ed8ae2 100644 --- a/code/modules/overmap/ships/ship_datum.dm +++ b/code/modules/overmap/ships/ship_datum.dm @@ -33,9 +33,9 @@ RegisterSignal(docked_to, COMSIG_OVERMAP_MOVED, .proc/on_docked_to_moved) /datum/overmap/ship/Destroy() - . = ..() if(movement_callback_id) deltimer(movement_callback_id, SSovermap_movement) + return ..() /datum/overmap/ship/complete_dock(datum/overmap/dock_target, datum/docking_ticket/ticket) . = ..() diff --git a/code/modules/pixelshifting/pixelshift.dm b/code/modules/pixelshifting/pixelshift.dm index 2dbba6fa993b..491dcfd5c3c3 100644 --- a/code/modules/pixelshifting/pixelshift.dm +++ b/code/modules/pixelshifting/pixelshift.dm @@ -63,7 +63,7 @@ /mob/living/CanAllowThrough(atom/movable/mover, border_dir) // Make sure to not allow projectiles of any kind past where they normally wouldn't. - if(!istype(mover, /obj/projectile) && !mover.throwing && passthroughable & get_dir(src, border_dir)) + if(!istype(mover, /obj/projectile) && !mover.throwing && (passthroughable & border_dir)) return TRUE return ..() diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm index e47f24c01044..4a9be6160916 100644 --- a/code/modules/plumbing/plumbers/grinder_chemical.dm +++ b/code/modules/plumbing/plumbers/grinder_chemical.dm @@ -27,12 +27,11 @@ . = ..() eat_dir = newdir -/obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/AM) +/obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(!anchored) return - var/move_dir = get_dir(loc, AM.loc) - if(move_dir == eat_dir) + if(border_dir == eat_dir) return TRUE /obj/machinery/plumbing/grinder_chemical/proc/on_entered(datum/source, atom/movable/AM) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index f57a82b00d8f..f8156a97a5d4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -250,17 +250,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/auto_name, 25) if(malfai && operating) malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) - area.power_light = FALSE - area.power_equip = FALSE - area.power_environ = FALSE - area.power_change() - area.poweralert(FALSE, src) + if(area) + area.power_light = FALSE + area.power_equip = FALSE + area.power_environ = FALSE + area.power_change() + area.poweralert(FALSE, src) if(occupier) malfvacate(1) - qdel(wires) - wires = null + if(wires) + QDEL_NULL(wires) if(cell) - qdel(cell) + QDEL_NULL(cell) if(terminal) disconnect_terminal() . = ..() diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index d83ce869e93e..8d711ad804fa 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -18,7 +18,7 @@ . = ..() find_circs() connect_to_network() - SSair.start_processing_machine(src) + SSair.start_processing_machine(src, mapload) update_appearance() component_parts = list(new /obj/item/circuitboard/machine/generator) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index d03c7d5c3af4..289c43c3e3bc 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -14,8 +14,8 @@ CanAtmosPass = ATMOS_PASS_NO light_range = 4 layer = ABOVE_OBJ_LAYER - var/obj/machinery/field/generator/FG1 = null - var/obj/machinery/field/generator/FG2 = null + var/obj/machinery/field/generator/field_gen_1 = null + var/obj/machinery/field/generator/field_gen_2 = null /obj/machinery/field/containment/Initialize() . = ..() @@ -27,8 +27,12 @@ AddElement(/datum/element/connect_loc, loc_connections) /obj/machinery/field/containment/Destroy() - FG1.fields -= src - FG2.fields -= src + if(field_gen_1) + field_gen_1.fields -= src + field_gen_1 = null + if(field_gen_2) + field_gen_2.fields -= src + field_gen_2 = null CanAtmosPass = ATMOS_PASS_YES air_update_turf(TRUE) return ..() @@ -59,12 +63,12 @@ return FALSE /obj/machinery/field/containment/attack_animal(mob/living/simple_animal/M) - if(!FG1 || !FG2) + if(!field_gen_1 || !field_gen_2) qdel(src) return if(ismegafauna(M)) M.visible_message("[M] glows fiercely as the containment field flickers out!") - FG1.calc_power(INFINITY) //rip that 'containment' field + field_gen_1.calc_power(INFINITY) //rip that 'containment' field M.adjustHealth(-M.obj_damage) else return ..() @@ -80,12 +84,12 @@ /obj/machinery/field/containment/proc/set_master(master1,master2) if(!master1 || !master2) return FALSE - FG1 = master1 - FG2 = master2 + field_gen_1 = master1 + field_gen_2 = master2 return TRUE /obj/machinery/field/containment/shock(mob/living/user) - if(!FG1 || !FG2) + if(!field_gen_1 || !field_gen_2) qdel(src) return FALSE ..() @@ -112,7 +116,7 @@ return -/obj/machinery/field/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/field/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(hasShocked || isliving(mover) || ismachinery(mover) || isstructure(mover) || ismecha(mover)) return FALSE diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 995beb23eb07..ee61bccbad51 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -16,6 +16,7 @@ light_range = 15 light_color = COLOR_RED gender = FEMALE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF /obj/singularity/narsie/large name = "Nar'Sie" diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index e10a79eaf74a..d14bacdf0a0e 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -28,7 +28,7 @@ var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six var/drifting_dir = 0 // Chosen direction to drift in - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | LANDING_PROOF | HYPERSPACE_PROOF obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION /obj/singularity/Initialize(mapload, starting_energy = 50) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index d923dc2df185..dfe24e46cb5b 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -189,8 +189,6 @@ /obj/machinery/power/smes/Destroy() if(SSticker.IsRoundInProgress()) var/turf/T = get_turf(src) - message_admins("SMES deleted at [ADMIN_VERBOSEJMP(T)]") - log_game("SMES deleted at [AREACOORD(T)]") investigate_log("deleted at [AREACOORD(T)]", INVESTIGATE_SINGULO) if(terminal) disconnect_terminal() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index bb50b3b2c2e8..b35974b8b930 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -36,6 +36,7 @@ RegisterSignal(SSsun, COMSIG_SUN_MOVED, .proc/queue_update_solar_exposure) /obj/machinery/power/solar/Destroy() + UnregisterSignal(SSsun, COMSIG_SUN_MOVED) unset_control() //remove from control computer return ..() @@ -109,6 +110,9 @@ /obj/machinery/power/solar/update_overlays() . = ..() + //This can get called while it's not initialized + if(!panel) + return var/matrix/turner = matrix() turner.Turn(azimuth_current) panel.transform = turner @@ -349,6 +353,7 @@ M.unset_control() if(connected_tracker) connected_tracker.unset_control() + UnregisterSignal(SSsun, COMSIG_SUN_MOVED) return ..() //search for unconnected panels and trackers in the computer powernet and connect them diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 05b9be90cd62..f34a268738d5 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -269,10 +269,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) -/obj/machinery/power/supermatter_crystal/Initialize() +/obj/machinery/power/supermatter_crystal/Initialize(mapload) . = ..() uid = gl_uid++ - SSair.start_processing_machine(src) + SSair.start_processing_machine(src, mapload) countdown = new(src) countdown.start() GLOB.poi_list |= src diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 9cb80fe57c41..6222f147861e 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -54,7 +54,9 @@ /obj/item/ammo_casing/Destroy() . = ..() - if(!BB) + if(BB) + QDEL_NULL(BB) + else SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) /obj/item/ammo_casing/update_icon_state() diff --git a/code/modules/projectiles/ammunition/energy/portal.dm b/code/modules/projectiles/ammunition/energy/portal.dm index 6f2b02644640..492878613658 100644 --- a/code/modules/projectiles/ammunition/energy/portal.dm +++ b/code/modules/projectiles/ammunition/energy/portal.dm @@ -4,7 +4,8 @@ harmful = FALSE fire_sound = 'sound/weapons/pulse3.ogg' select_name = "blue" - var/obj/item/gun/energy/wormhole_projector/gun + //Weakref to the gun that shot us + var/datum/weakref/gun /obj/item/ammo_casing/energy/wormhole/orange projectile_type = /obj/projectile/beam/wormhole/orange @@ -12,7 +13,7 @@ /obj/item/ammo_casing/energy/wormhole/Initialize(mapload, obj/item/gun/energy/wormhole_projector/wh) . = ..() - gun = wh + gun = WEAKREF(wh) /obj/item/ammo_casing/energy/wormhole/throw_proj() . = ..() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 9d51296f3424..f91fa467cfef 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -96,6 +96,8 @@ QDEL_NULL(chambered) if(azoom) QDEL_NULL(azoom) + if(isatom(suppressed)) //SUPPRESSED IS USED AS BOTH A TRUE/FALSE AND AS A REF, WHAT THE FUCKKKKKKKKKKKKKKKKK + QDEL_NULL(suppressed) return ..() /obj/item/gun/handle_atom_del(atom/A) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f810dc221dbf..b186569afad4 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -20,7 +20,6 @@ var/use_cyborg_cell = FALSE //whether the gun's cell drains the cyborg user's cell to recharge var/dead_cell = FALSE //set to true so the gun is given an empty cell - //WS Begin - Gun Cells var/internal_cell = FALSE ///if the gun's cell cannot be replaced var/small_gun = FALSE ///if the gun is small and can only fit the small gun cell var/big_gun = FALSE ///if the gun is big and can fit the comically large gun cell @@ -30,7 +29,6 @@ var/eject_sound = 'sound/weapons/gun/general/magazine_remove_full.ogg' //Sound of ejecting a cell. UPDATE PLEASE var/sound_volume = 40 //Volume of loading/unloading sounds var/load_sound_vary = TRUE //Should the load/unload sounds vary? - //WS End /obj/item/gun/energy/emp_act(severity) . = ..() @@ -75,7 +73,8 @@ if (cell) QDEL_NULL(cell) STOP_PROCESSING(SSobj, src) - return ..() + . = ..() + ammo_type.Cut() /obj/item/gun/energy/handle_atom_del(atom/A) if(A == cell) @@ -216,7 +215,7 @@ /obj/item/gun/energy/update_overlays() . = ..() - if(!automatic_charge_overlays) + if(!automatic_charge_overlays || QDELETED(src)) return // Every time I see code this "flexible", a kitten fucking dies var/overlay_icon_state = "[icon_state]_charge" diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index db923335b369..1ecb29a27a64 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -183,11 +183,12 @@ /obj/item/gun/energy/dueling/Destroy() . = ..() - if(duel.gun_A == src) - duel.gun_A = null - if(duel.gun_B == src) - duel.gun_B = null - duel = null + if(duel) + if(duel.gun_A == src) + duel.gun_A = null + if(duel.gun_B == src) + duel.gun_B = null + duel = null /obj/item/gun/energy/dueling/can_trigger_gun(mob/living/user) . = ..() diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 2ef1f8293bcf..029c5f8a2693 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -25,6 +25,10 @@ START_PROCESSING(SSobj, src) /obj/item/minigunpack/Destroy() + if(!QDELETED(gun)) + qdel(gun) + gun = null + QDEL_NULL(battery) STOP_PROCESSING(SSobj, src) return ..() @@ -119,6 +123,12 @@ AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) return ..() +/obj/item/gun/energy/minigun/Destroy() + if(!QDELETED(ammo_pack)) + qdel(ammo_pack) + ammo_pack = null + return ..() + /obj/item/gun/energy/minigun/attack_self(mob/living/user) return diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 1311920eb8b2..44c667892e4a 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -221,10 +221,10 @@ for(var/i in 1 to ammo_type.len) var/obj/item/ammo_casing/energy/wormhole/W = ammo_type[i] if(istype(W)) - W.gun = src + W.gun = WEAKREF(src) var/obj/projectile/beam/wormhole/WH = W.BB if(istype(WH)) - WH.gun = src + WH.gun = WEAKREF(src) /obj/item/gun/energy/wormhole_projector/process_chamber() ..() diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 6ef3367b67d6..63c4ef8aa2d0 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -51,7 +51,8 @@ /obj/item/gun/magic/Initialize() . = ..() charges = max_charges - chambered = new ammo_type(src) + if(ammo_type) + chambered = new ammo_type(src) if(can_charge) START_PROCESSING(SSobj, src) diff --git a/code/modules/projectiles/guns/misc/medbeam.dm b/code/modules/projectiles/guns/misc/medbeam.dm index d0fd3052ed97..7061d7769ba4 100644 --- a/code/modules/projectiles/guns/misc/medbeam.dm +++ b/code/modules/projectiles/guns/misc/medbeam.dm @@ -101,21 +101,33 @@ return 0 var/obj/dummy = new(user_turf) dummy.pass_flags |= PASSTABLE|PASSGLASS|PASSGRILLE //Grille/Glass so it can be used through common windows - for(var/turf/turf in getline(user_turf,target)) - if(mounted && turf == user_turf) + var/turf/previous_step = user_turf + var/first_step = TRUE + for(var/turf/next_step as anything in (getline(user_turf, target) - user_turf)) + if(first_step) + for(var/obj/blocker in user_turf) + if(!blocker.density || !(blocker.flags_1 & ON_BORDER_1)) + continue + if(blocker.CanPass(dummy, get_dir(user_turf, next_step))) + continue + return FALSE // Could not leave the first turf. + first_step = FALSE + if(mounted && next_step == user_turf) + continue //Mechs are dense and thus fail the check - if(turf.density) + if(next_step.density) qdel(dummy) - return 0 - for(var/atom/movable/AM in turf) - if(!AM.CanPass(dummy,turf,1)) + return FALSE + for(var/atom/movable/movable as anything in next_step) + if(!movable.CanPass(dummy, get_dir(next_step, previous_step))) qdel(dummy) - return 0 - for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams! + return FALSE + for(var/obj/effect/ebeam/medical/B in next_step)// Don't cross the str-beams! if(B.owner.origin != current_beam.origin) explosion(B.loc,0,3,5,8) qdel(dummy) - return 0 + return FALSE + previous_step = next_step qdel(dummy) return 1 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8f2488be7f69..a50b6eed4ae6 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -157,14 +157,14 @@ /// If true directly targeted turfs can be hit var/can_hit_turfs = FALSE + var/static/list/projectile_connections = list( + COMSIG_ATOM_ENTERED = .proc/on_entered, + ) + /obj/projectile/Initialize() . = ..() decayedRange = range - - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = .proc/on_entered - ) - AddElement(/datum/element/connect_loc, loc_connections) + AddElement(/datum/element/connect_loc, projectile_connections) /obj/projectile/proc/Range() range-- @@ -334,7 +334,7 @@ if(!trajectory) qdel(src) return FALSE - if(impacted[A]) // NEVER doublehit + if(LAZYISIN(impacted, A)) // NEVER doublehit return FALSE var/datum/point/pcache = trajectory.copy_to() var/turf/T = get_turf(A) @@ -342,7 +342,7 @@ ricochets++ if(A.handle_ricochet(src)) on_ricochet(A) - impacted = list() // Shoot a x-ray laser at a pair of mirrors I dare you + impacted = null // Shoot a x-ray laser at a pair of mirrors I dare you ignore_source_check = TRUE // Firer is no longer immune decayedRange = max(0, decayedRange - reflect_range_decrease) ricochet_chance *= ricochet_decay_chance @@ -383,7 +383,7 @@ if(QDELETED(src) || !T || !target) return // 2. - impacted[target] = TRUE //hash lookup > in for performance in hit-checking + LAZYSET(impacted, target, TRUE) //hash lookup > in for performance in hit-checking // 3. var/mode = prehit_pierce(target) if(mode == PROJECTILE_DELETE_WITHOUT_HITTING) @@ -459,7 +459,7 @@ //Returns true if the target atom is on our current turf and above the right layer //If direct target is true it's the originally clicked target. /obj/projectile/proc/can_hit_target(atom/target, direct_target = FALSE, ignore_loc = FALSE) - if(QDELETED(target) || impacted[target]) + if(QDELETED(target) || LAZYISIN(impacted, target)) return FALSE if(!ignore_loc && (loc != target.loc) && !(can_hit_turfs && direct_target && loc == target)) return FALSE @@ -533,8 +533,8 @@ * Projectile can pass through * Used to not even attempt to Bump() or fail to Cross() anything we already hit. */ -/obj/projectile/CanPassThrough(atom/blocker, turf/target, blocker_opinion) - return impacted[blocker]? TRUE : ..() +/obj/projectile/CanPassThrough(atom/blocker, movement_dir, blocker_opinion) + return LAZYISIN(impacted, blocker) ? TRUE : ..() /** * Projectile moved: @@ -758,8 +758,6 @@ process_homing() var/forcemoved = FALSE for(var/i in 1 to SSprojectiles.global_iterations_per_move) - if(QDELETED(src)) - return trajectory.increment(trajectory_multiplier) var/turf/T = trajectory.return_turf() if(!istype(T)) @@ -780,6 +778,8 @@ else if(T != loc) step_towards(src, T) hitscan_last = loc + if(QDELETED(src)) + return if(!hitscanning && !forcemoved) pixel_x = trajectory.return_px() - trajectory.mpx * trajectory_multiplier * SSprojectiles.global_iterations_per_move pixel_y = trajectory.return_py() - trajectory.mpy * trajectory_multiplier * SSprojectiles.global_iterations_per_move @@ -871,13 +871,14 @@ finalize_hitscan_and_generate_tracers() STOP_PROCESSING(SSprojectiles, src) cleanup_beam_segments() - qdel(trajectory) + if(trajectory) + QDEL_NULL(trajectory) return ..() /obj/projectile/proc/cleanup_beam_segments() QDEL_LIST_ASSOC(beam_segments) beam_segments = list() - QDEL_NULL(beam_index) //WS edit - Hitscan emitters + QDEL_NULL(beam_index) /obj/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE) if(trajectory && beam_index) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 93e3de355636..00f323d995fa 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -423,6 +423,7 @@ /obj/projectile/magic/locker/Destroy() locker_suck = FALSE + RemoveElement(/datum/element/connect_loc, projectile_connections) //We do this manually so the forcemoves don't "hit" us. This behavior is kinda dumb, someone refactor this for(var/atom/movable/AM in contents) AM.forceMove(get_turf(src)) . = ..() diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm index 8001593d86a7..5c928e293e12 100644 --- a/code/modules/projectiles/projectile/special/curse.dm +++ b/code/modules/projectiles/projectile/special/curse.dm @@ -20,6 +20,10 @@ handedness = prob(50) icon_state = "cursehand[handedness]" +/obj/projectile/curse_hand/Destroy() + QDEL_NULL(arm) + return ..() + /obj/projectile/curse_hand/update_icon_state() icon_state = "[initial(icon_state)][handedness]" return ..() diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index d3abf739d34d..2b56599f9812 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -15,7 +15,7 @@ . = ..() var/obj/item/ammo_casing/energy/gravity/repulse/C = loc if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) + power = min(C.gun?.power, 15) /obj/projectile/gravityrepulse/on_hit() . = ..() @@ -50,7 +50,7 @@ . = ..() var/obj/item/ammo_casing/energy/gravity/attract/C = loc if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) + power = min(C.gun?.power, 15) /obj/projectile/gravityattract/on_hit() . = ..() @@ -84,7 +84,7 @@ . = ..() var/obj/item/ammo_casing/energy/gravity/chaos/C = loc if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) + power = min(C.gun?.power, 15) /obj/projectile/gravitychaos/on_hit() . = ..() diff --git a/code/modules/projectiles/projectile/special/hallucination.dm b/code/modules/projectiles/projectile/special/hallucination.dm index 918ce629ebcf..74fa2b2ad17a 100644 --- a/code/modules/projectiles/projectile/special/hallucination.dm +++ b/code/modules/projectiles/projectile/special/hallucination.dm @@ -28,7 +28,7 @@ hal_target.client.images += fake_icon /obj/projectile/hallucination/Destroy() - if(hal_target.client) + if(hal_target?.client) hal_target.client.images -= fake_icon QDEL_NULL(fake_icon) return ..() diff --git a/code/modules/projectiles/projectile/special/wormhole.dm b/code/modules/projectiles/projectile/special/wormhole.dm index 2bc9713f1a03..f35436683377 100644 --- a/code/modules/projectiles/projectile/special/wormhole.dm +++ b/code/modules/projectiles/projectile/special/wormhole.dm @@ -5,7 +5,8 @@ damage = 0 nodamage = TRUE pass_flags = PASSGLASS | PASSTABLE | PASSGRILLE | PASSMOB - var/obj/item/gun/energy/wormhole_projector/gun + //Weakref to the thing that shot us + var/datum/weakref/gun color = "#33CCFF" tracer_type = /obj/effect/projectile/tracer/wormhole impact_type = /obj/effect/projectile/impact/wormhole @@ -23,7 +24,8 @@ /obj/projectile/beam/wormhole/on_hit(atom/target) - if(!gun) + var/obj/item/gun/energy/wormhole_projector/projector = gun.resolve() + if(!projector) qdel(src) return - gun.create_portal(src, get_turf(src)) + projector.create_portal(src, get_turf(src)) diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index 3ddadea35b04..4fc71a1eba0d 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -1,12 +1,13 @@ // Category 2 medicines are medicines that have an ill effect regardless of volume/OD to dissuade doping. Mostly used as emergency chemicals OR to convert damage (and heal a bit in the process). The type is used to prompt borgs that the medicine is harmful. -/datum/reagent/medicine/C2 +/datum/reagent/medicine/c2 + name = "Category two reagent" harmful = TRUE metabolization_rate = 0.2 /******BRUTE******/ /*Suffix: -bital*/ -/datum/reagent/medicine/C2/helbital //kinda a C2 only if you're not in hardcrit. +/datum/reagent/medicine/c2/helbital //kinda a C2 only if you're not in hardcrit. name = "Helbital" description = "Named after the norse goddess Hel, this medicine heals the patient's bruises the closer they are to death. Patients will find the medicine 'aids' their healing if not near death by causing asphyxiation." color = "#9400D3" @@ -16,7 +17,7 @@ var/helbent = FALSE var/reaping = FALSE -/datum/reagent/medicine/C2/helbital/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/helbital/on_mob_life(mob/living/carbon/M) . = TRUE var/death_is_coming = (M.getToxLoss() + M.getOxyLoss() + M.getFireLoss() + M.getBruteLoss()) var/thou_shall_heal = 0 @@ -66,26 +67,26 @@ ..() return -/datum/reagent/medicine/C2/helbital/overdose_process(mob/living/carbon/M) +/datum/reagent/medicine/c2/helbital/overdose_process(mob/living/carbon/M) if(!helbent) M.apply_necropolis_curse(CURSE_WASTING | CURSE_BLINDING) helbent = TRUE ..() return TRUE -/datum/reagent/medicine/C2/helbital/on_mob_delete(mob/living/L) +/datum/reagent/medicine/c2/helbital/on_mob_delete(mob/living/L) if(helbent) L.remove_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE) ..() -/datum/reagent/medicine/C2/libital //messes with your liber +/datum/reagent/medicine/c2/libital //messes with your liber name = "Libital" description = "A bruise reliever. Does minor liver damage." color = "#ECEC8D" // rgb: 236 236 141 taste_description = "bitter with a hint of alcohol" reagent_state = SOLID -/datum/reagent/medicine/C2/libital/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/libital/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.3*REM) M.adjustBruteLoss(-3*REM) ..() @@ -93,14 +94,14 @@ /*WS Begin - Medicine Fixes -/datum/reagent/medicine/C2/probital +/datum/reagent/medicine/c2/probital name = "Probital" description = "Originally developed as a prototype-gym supliment for those looking for quick workout turnover, this oral medication quickly repairs broken muscle tissue but causes lactic acid buildup, tiring the patient. Overdosing can cause extreme drowsiness. An Influx of nutrients promotes the muscle repair even further." reagent_state = SOLID color = "#FFFF6B" overdose_threshold = 20 -/datum/reagent/medicine/C2/probital/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/probital/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-2.25*REM, FALSE) var/ooo_youaregettingsleepy = 3.5 switch(round(M.getStaminaLoss())) @@ -114,7 +115,7 @@ ..() . = TRUE -/datum/reagent/medicine/C2/probital/overdose_process(mob/living/M) +/datum/reagent/medicine/c2/probital/overdose_process(mob/living/M) M.adjustStaminaLoss(3*REM, 0) if(M.getStaminaLoss() >= 80) M.drowsyness++ @@ -125,11 +126,11 @@ ..() . = TRUE -/datum/reagent/medicine/C2/probital/on_transfer(atom/A, method=INGEST, trans_volume) +/datum/reagent/medicine/c2/probital/on_transfer(atom/A, method=INGEST, trans_volume) if(method != INGEST || !iscarbon(A)) return - A.reagents.remove_reagent(/datum/reagent/medicine/C2/probital, trans_volume * 0.05) + A.reagents.remove_reagent(/datum/reagent/medicine/c2/probital, trans_volume * 0.05) A.reagents.add_reagent(/datum/reagent/medicine/metafactor, trans_volume * 0.25) ..() @@ -138,7 +139,7 @@ WS End */ /******BURN******/ /*Suffix: -uri*/ -/datum/reagent/medicine/C2/lenturi +/datum/reagent/medicine/c2/lenturi name = "Lenturi" description = "Used to treat burns. Makes you move slower while it is in your system. Applies stomach damage when it leaves your system." reagent_state = LIQUID @@ -146,21 +147,21 @@ WS End */ var/resetting_probability = 0 var/spammer = 0 -/datum/reagent/medicine/C2/lenturi/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/lenturi/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(-3 * REM) M.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.4 * REM) ..() return TRUE -/datum/reagent/medicine/C2/lenturi/on_mob_metabolize(mob/living/carbon/M) +/datum/reagent/medicine/c2/lenturi/on_mob_metabolize(mob/living/carbon/M) M.add_movespeed_modifier(/datum/movespeed_modifier/reagent/lenturi) return ..() -/datum/reagent/medicine/C2/lenturi/on_mob_end_metabolize(mob/living/carbon/M) +/datum/reagent/medicine/c2/lenturi/on_mob_end_metabolize(mob/living/carbon/M) M.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/lenturi) return ..() -/datum/reagent/medicine/C2/aiuri +/datum/reagent/medicine/c2/aiuri name = "Aiuri" description = "Used to treat burns. Does minor eye damage." reagent_state = LIQUID @@ -168,7 +169,7 @@ WS End */ var/resetting_probability = 0 var/message_cd = 0 -/datum/reagent/medicine/C2/aiuri/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/aiuri/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(-2*REM) M.adjustOrganLoss(ORGAN_SLOT_EYES,0.25*REM) ..() @@ -176,7 +177,7 @@ WS End */ /*WS Begin - Fixes Medicines -/datum/reagent/medicine/C2/hercuri +/datum/reagent/medicine/c2/hercuri name = "Hercuri" description = "Not to be confused with element Mercury, this medicine excels in reverting effects of dangerous high-temperature environments. Prolonged exposure can cause hypothermia." reagent_state = LIQUID @@ -184,7 +185,7 @@ WS End */ overdose_threshold = 25 reagent_weight = 0.6 -/datum/reagent/medicine/C2/hercuri/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/hercuri/on_mob_life(mob/living/carbon/M) if(M.getFireLoss() > 50) M.adjustFireLoss(-2*REM, FALSE) else @@ -206,7 +207,7 @@ WS End */ ..() -/datum/reagent/medicine/C2/hercuri/overdose_process(mob/living/carbon/M) +/datum/reagent/medicine/c2/hercuri/overdose_process(mob/living/carbon/M) M.adjust_bodytemperature(-10*TEMPERATURE_DAMAGE_COEFFICIENT*REM,50) //chilly chilly ..() @@ -216,14 +217,14 @@ WS End*/ /*Suffix: -mol*/ #define CONVERMOL_RATIO 5 //# Oxygen damage to result in 1 tox -/datum/reagent/medicine/C2/convermol +/datum/reagent/medicine/c2/convermol name = "Convermol" description = "Restores oxygen deprivation while producing a lesser amount of toxic byproducts. Both scale with exposure to the drug and current amount of oxygen deprivation. Overdose causes toxic byproducts regardless of oxygen deprivation." reagent_state = LIQUID color = "#FF6464" overdose_threshold = 35 // at least 2 full syringes +some, this stuff is nasty if left in for long -/datum/reagent/medicine/C2/convermol/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/c2/convermol/on_mob_life(mob/living/carbon/human/M) var/oxycalc = 2.5*REM*current_cycle if(!overdosed) oxycalc = min(oxycalc,M.getOxyLoss()+0.5) //if NOT overdosing, we lower our toxdamage to only the damage we actually healed with a minimum of 0.1*current_cycle. IE if we only heal 10 oxygen damage but we COULD have healed 20, we will only take toxdamage for the 10. We would take the toxdamage for the extra 10 if we were overdosing. @@ -234,20 +235,20 @@ WS End*/ ..() return TRUE -/datum/reagent/medicine/C2/convermol/overdose_process(mob/living/carbon/human/M) +/datum/reagent/medicine/c2/convermol/overdose_process(mob/living/carbon/human/M) metabolization_rate += 1 ..() return TRUE #undef CONVERMOL_RATIO -/datum/reagent/medicine/C2/tirimol +/datum/reagent/medicine/c2/tirimol name = "Tirimol" description = "An oxygen deprivation medication that causes fatigue. Prolonged exposure causes the patient to fall asleep once the medicine metabolizes." color = "#FF6464" var/drowsycd = 0 -/datum/reagent/medicine/C2/tirimol/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/c2/tirimol/on_mob_life(mob/living/carbon/human/M) M.adjustOxyLoss(-3) M.adjustStaminaLoss(2) if(drowsycd && (world.time > drowsycd)) @@ -258,7 +259,7 @@ WS End*/ ..() return TRUE -/datum/reagent/medicine/C2/tirimol/on_mob_end_metabolize(mob/living/L) +/datum/reagent/medicine/c2/tirimol/on_mob_end_metabolize(mob/living/L) if(current_cycle > 20) L.Sleeping(10 SECONDS) ..() @@ -266,16 +267,16 @@ WS End*/ /******TOXIN******/ /*Suffix: -iver*/ -/datum/reagent/medicine/C2/seiver //a bit of a gray joke +/datum/reagent/medicine/c2/seiver //a bit of a gray joke name = "Seiver" description = "A medicine that shifts functionality based on temperature. Colder temperatures incurs radiation removal while hotter temperatures promote antitoxicity. Damages the heart." //CHEM HOLDER TEMPS, NOT AIR TEMPS var/radbonustemp = (T0C - 100) //being below this number gives you 10% off rads. -/datum/reagent/medicine/C2/seiver/on_mob_metabolize(mob/living/carbon/human/M) +/datum/reagent/medicine/c2/seiver/on_mob_metabolize(mob/living/carbon/human/M) . = ..() radbonustemp = rand(radbonustemp - 50, radbonustemp + 50) // Basically this means 50K and below will always give the percent heal, and upto 150K could. Calculated once. -/datum/reagent/medicine/C2/seiver/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/c2/seiver/on_mob_life(mob/living/carbon/human/M) var/chemtemp = min(M.reagents?.chem_temp, 1000) chemtemp = chemtemp ? chemtemp : 273 //why do you have null sweaty var/healypoints = 0 //5 healypoints = 1 heart damage; 5 rads = 1 tox damage healed for the purpose of healypoints @@ -304,11 +305,11 @@ WS End*/ ..() return TRUE -/datum/reagent/medicine/C2/multiver //enhanced with MULTIple medicines +/datum/reagent/medicine/c2/multiver //enhanced with MULTIple medicines name = "Multiver" description = "A chem-purger that becomes more effective the more unique medicines present. Slightly heals toxicity but causes lung damage (mitigatable by unique medicines)." -/datum/reagent/medicine/C2/multiver/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/c2/multiver/on_mob_life(mob/living/carbon/human/M) var/medibonus = 0 //it will always have itself which makes it REALLY start @ 1 for(var/r in M.reagents.reagent_list) var/datum/reagent/the_reagent = r @@ -327,11 +328,11 @@ WS End*/ ..() return TRUE -#define issyrinormusc(A) (istype(A,/datum/reagent/medicine/C2/syriniver) || istype(A,/datum/reagent/medicine/C2/musiver)) //musc is metab of syrin so let's make sure we're not purging either +#define issyrinormusc(A) (istype(A,/datum/reagent/medicine/c2/syriniver) || istype(A,/datum/reagent/medicine/c2/musiver)) //musc is metab of syrin so let's make sure we're not purging either /*WS Begin - Medicine Fixes -/datum/reagent/medicine/C2/syriniver //Inject >> SYRINge +/datum/reagent/medicine/c2/syriniver //Inject >> SYRINge name = "Syriniver" description = "A potent antidote for intravenous use with a narrow therapeutic index, it is considered an active prodrug of musiver." reagent_state = LIQUID @@ -340,7 +341,7 @@ WS End*/ overdose_threshold = 6 var/conversion_amount -/datum/reagent/medicine/C2/syriniver/on_transfer(atom/A, method=INJECT, trans_volume) +/datum/reagent/medicine/c2/syriniver/on_transfer(atom/A, method=INJECT, trans_volume) if(method != INJECT || !iscarbon(A)) return var/mob/living/carbon/C = A @@ -350,11 +351,11 @@ WS End*/ if((L.organ_flags & ORGAN_FAILING) || !L) return conversion_amount = trans_volume * (min(100 -C.getOrganLoss(ORGAN_SLOT_LIVER), 80) / 100) //the more damaged the liver the worse we metabolize. - C.reagents.remove_reagent(/datum/reagent/medicine/C2/syriniver, conversion_amount) - C.reagents.add_reagent(/datum/reagent/medicine/C2/musiver, conversion_amount) + C.reagents.remove_reagent(/datum/reagent/medicine/c2/syriniver, conversion_amount) + C.reagents.add_reagent(/datum/reagent/medicine/c2/musiver, conversion_amount) ..() -/datum/reagent/medicine/C2/syriniver/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/syriniver/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.8) M.adjustToxLoss(-1*REM, 0) for(var/datum/reagent/R in M.reagents.reagent_list) @@ -365,14 +366,14 @@ WS End*/ ..() . = 1 -/datum/reagent/medicine/C2/syriniver/overdose_process(mob/living/carbon/M) +/datum/reagent/medicine/c2/syriniver/overdose_process(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5) M.adjust_disgust(3) - M.reagents.add_reagent(/datum/reagent/medicine/C2/musiver, 0.225 * REM) + M.reagents.add_reagent(/datum/reagent/medicine/c2/musiver, 0.225 * REM) ..() . = 1 -/datum/reagent/medicine/C2/musiver //MUScles +/datum/reagent/medicine/c2/musiver //MUScles name = "Musiver" description = "The active metabolite of syriniver. Causes muscle weakness on overdose" reagent_state = LIQUID @@ -381,7 +382,7 @@ WS End*/ overdose_threshold = 25 var/datum/brain_trauma/mild/muscle_weakness/U -/datum/reagent/medicine/C2/musiver/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/c2/musiver/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.1) M.adjustToxLoss(-1*REM, 0) for(var/datum/reagent/R in M.reagents.reagent_list) @@ -391,17 +392,17 @@ WS End*/ ..() . = 1 -/datum/reagent/medicine/C2/musiver/overdose_start(mob/living/carbon/M) +/datum/reagent/medicine/c2/musiver/overdose_start(mob/living/carbon/M) U = new() M.gain_trauma(U, TRAUMA_RESILIENCE_ABSOLUTE) ..() -/datum/reagent/medicine/C2/musiver/on_mob_delete(mob/living/carbon/M) +/datum/reagent/medicine/c2/musiver/on_mob_delete(mob/living/carbon/M) if(U) QDEL_NULL(U) return ..() -/datum/reagent/medicine/C2/musiver/overdose_process(mob/living/carbon/M) +/datum/reagent/medicine/c2/musiver/overdose_process(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5) M.adjust_disgust(3) ..() @@ -413,7 +414,7 @@ WS End*/ /******COMBOS******/ /*Suffix: Combo of healing, prob gonna get wack REAL fast*/ -/datum/reagent/medicine/C2/instabitaluri +/datum/reagent/medicine/c2/instabitaluri name = "Synthflesh (Instabitaluri)" description = "Heals brute and burn damage at the cost of toxicity (66% of damage healed). Touch application only." reagent_state = LIQUID @@ -431,7 +432,7 @@ WS End*/ if(show_message) to_chat(carbies, "You feel your burns and bruises healing! It stings like hell!") SEND_SIGNAL(carbies, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine) - if(HAS_TRAIT_FROM(M, TRAIT_HUSK, "burn") && carbies.getFireLoss() < THRESHOLD_UNHUSK && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/C2/instabitaluri) + reac_volume >= 100)) + if(HAS_TRAIT_FROM(M, TRAIT_HUSK, "burn") && carbies.getFireLoss() < THRESHOLD_UNHUSK && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/c2/instabitaluri) + reac_volume >= 100)) carbies.cure_husk("burn") carbies.visible_message("A rubbery liquid coats [carbies]'s burns. [carbies] looks a lot healthier!") //we're avoiding using the phrases "burnt flesh" and "burnt skin" here because carbies could be a skeleton or a golem or something ..() @@ -449,13 +450,13 @@ WS End*/ *causing you to loose your soft crit, hard crit and heart stabilization effects. *Overdosing on penthrite also causes a heart failure. */ -/datum/reagent/medicine/C2/penthrite +/datum/reagent/medicine/c2/penthrite name = "Penthrite" description = "An expensive medicine that aids with pumping blood around the body even without a heart, and prevents the heart from slowing down. It reacts violently with other emergency medication." color = "#F5F5F5" overdose_threshold = 50 -/datum/reagent/medicine/C2/penthrite/on_mob_add(mob/living/M) +/datum/reagent/medicine/c2/penthrite/on_mob_add(mob/living/M) . = ..() to_chat(M,"Your heart begins to beat with great force!") ADD_TRAIT(M, TRAIT_STABLEHEART, type) @@ -464,7 +465,7 @@ WS End*/ M.crit_threshold = M.crit_threshold + HEALTH_THRESHOLD_FULLCRIT*2 //your heart is still pumping! -/datum/reagent/medicine/C2/penthrite/on_mob_life(mob/living/carbon/human/H) +/datum/reagent/medicine/c2/penthrite/on_mob_life(mob/living/carbon/human/H) H.adjustOrganLoss(ORGAN_SLOT_STOMACH,0.25) if(H.health <= HEALTH_THRESHOLD_CRIT && H.health > H.crit_threshold) //we cannot save someone above our raised crit threshold. @@ -492,14 +493,14 @@ WS End*/ volume = 0 . = ..() -/datum/reagent/medicine/C2/penthrite/on_mob_end_metabolize(mob/living/M) +/datum/reagent/medicine/c2/penthrite/on_mob_end_metabolize(mob/living/M) M.crit_threshold = M.crit_threshold - HEALTH_THRESHOLD_FULLCRIT*2 //your heart is still pumping! REMOVE_TRAIT(M, TRAIT_STABLEHEART, type) REMOVE_TRAIT(M, TRAIT_NOHARDCRIT,type) REMOVE_TRAIT(M, TRAIT_NOSOFTCRIT,type) . = ..() -/datum/reagent/medicine/C2/penthrite/overdose_process(mob/living/carbon/human/H) +/datum/reagent/medicine/c2/penthrite/overdose_process(mob/living/carbon/human/H) REMOVE_TRAIT(H, TRAIT_STABLEHEART, type) H.adjustStaminaLoss(10) H.adjustOrganLoss(ORGAN_SLOT_HEART,10) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 4c150a53f299..753d0f1408a6 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1,5 +1,5 @@ /datum/reagent/blood - data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null) + data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null) name = "Blood" color = COLOR_BLOOD metabolization_rate = 5 //fast rate so it disappears fast. @@ -118,6 +118,7 @@ src.data |= data.Copy() /datum/reagent/vaccine/fungal_tb + name = "Fungal TB Vaccine" /datum/reagent/vaccine/fungal_tb/New(data) . = ..() @@ -692,7 +693,7 @@ taste_description = "brai...nothing in particular" /datum/reagent/mutationtoxin/goofzombie - name = "Zombie Mutation Toxin" + name = "Krokodil Zombie Mutation Toxin" description = "An undead toxin... kinda..." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/human/krokodil_addict //Not the infectious kind. The days of xenobio zombie outbreaks are long past. @@ -1097,7 +1098,7 @@ /datum/reagent/uranium/radium/dip_object(obj/item/I, mob/user, obj/item/reagent_containers/H) return FALSE -/datum/reagent/radium/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) +/datum/reagent/uranium/radium/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() if(chems.has_reagent(type, 1)) mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 2.5)) @@ -2242,11 +2243,12 @@ return ..() /datum/reagent/pax/peaceborg - name = "synthpax" + name = "Synthpax" description = "A colorless liquid that suppresses violence in its subjects. Cheaper to synthesize than normal Pax, but wears off faster." metabolization_rate = 1.5 * REAGENTS_METABOLISM /datum/reagent/peaceborg + name = "Abstract Peaceborg Reagent" can_synth = FALSE /datum/reagent/peaceborg/confuse diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 210f980eb041..9cde25afcac0 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -377,7 +377,7 @@ ..() /datum/reagent/toxin/fakebeer //disguised as normal beer for use by emagged brobots - name = "Beer" + name = "Beer?" description = "A specially-engineered sedative disguised as beer. It induces instant sleep in its target." color = "#664300" // rgb: 102, 67, 0 metabolization_rate = 1.5 * REAGENTS_METABOLISM diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm index dbe3398e3f0c..c68438fa73ce 100644 --- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm +++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm @@ -3,19 +3,19 @@ /*****BRUTE*****/ /datum/chemical_reaction/helbital - results = list(/datum/reagent/medicine/C2/helbital = 3) + results = list(/datum/reagent/medicine/c2/helbital = 3) required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/fluorine = 1, /datum/reagent/carbon = 1) mix_message = "The mixture turns into a thick, yellow powder." /datum/chemical_reaction/libital - results = list(/datum/reagent/medicine/C2/libital = 3) + results = list(/datum/reagent/medicine/c2/libital = 3) required_reagents = list(/datum/reagent/phenol = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1) /*WS Begin - Fixes medicines /datum/chemical_reaction/probital - results = list(/datum/reagent/medicine/C2/probital = 4) + results = list(/datum/reagent/medicine/c2/probital = 4) required_reagents = list(/datum/reagent/copper = 1, /datum/reagent/acetone = 2, /datum/reagent/phosphorus = 1) WS End */ @@ -25,19 +25,19 @@ WS End */ /*WS Begin - No CobbyChems /datum/chemical_reaction/lenturi - results = list(/datum/reagent/medicine/C2/lenturi = 5) + results = list(/datum/reagent/medicine/c2/lenturi = 5) required_reagents = list(/datum/reagent/ammonia = 1, /datum/reagent/silver = 1, /datum/reagent/sulfur = 1, /datum/reagent/oxygen = 1, /datum/reagent/chlorine = 1) */ /datum/chemical_reaction/aiuri - results = list(/datum/reagent/medicine/C2/aiuri = 4) + results = list(/datum/reagent/medicine/c2/aiuri = 4) required_reagents = list(/datum/reagent/ammonia = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/hydrogen = 2) /*WS Begin - Fixes medicines /datum/chemical_reaction/hercuri - results = list(/datum/reagent/medicine/C2/hercuri = 5) + results = list(/datum/reagent/medicine/c2/hercuri = 5) required_reagents = list(/datum/reagent/cryostylane = 3, /datum/reagent/bromine = 1, /datum/reagent/lye = 1) required_temp = 47 is_cold_recipe = TRUE @@ -49,7 +49,7 @@ WS End */ /*WS Begin - No CobbyChems /datum/chemical_reaction/convermol - results = list(/datum/reagent/medicine/C2/convermol = 3) + results = list(/datum/reagent/medicine/c2/convermol = 3) required_reagents = list(/datum/reagent/hydrogen = 1, /datum/reagent/fluorine = 1, /datum/reagent/fuel/oil = 1) required_temp = 370 mix_message = "The mixture rapidly turns into a dense pink liquid." @@ -57,30 +57,30 @@ WS End */ */ /datum/chemical_reaction/tirimol - results = list(/datum/reagent/medicine/C2/tirimol = 5) + results = list(/datum/reagent/medicine/c2/tirimol = 5) required_reagents = list(/datum/reagent/nitrogen = 3, /datum/reagent/acetone = 2) required_catalysts = list(/datum/reagent/toxin/acid = 1) /*****TOX*****/ /datum/chemical_reaction/seiver - results = list(/datum/reagent/medicine/C2/seiver = 3) + results = list(/datum/reagent/medicine/c2/seiver = 3) required_reagents = list(/datum/reagent/nitrogen = 1, /datum/reagent/potassium = 1, /datum/reagent/aluminium = 1) /*WS Begin - No CobbyChems /datum/chemical_reaction/multiver - results = list(/datum/reagent/medicine/C2/multiver = 2) + results = list(/datum/reagent/medicine/c2/multiver = 2) required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/sodiumchloride = 1) mix_message = "The mixture yields a fine black powder." required_temp = 380 /datum/chemical_reaction/syriniver - results = list(/datum/reagent/medicine/C2/syriniver = 5) + results = list(/datum/reagent/medicine/c2/syriniver = 5) required_reagents = list(/datum/reagent/sulfur = 1, /datum/reagent/fluorine = 1, /datum/reagent/toxin = 1, /datum/reagent/nitrous_oxide = 2) */ /datum/chemical_reaction/penthrite - results = list(/datum/reagent/medicine/C2/penthrite = 3) + results = list(/datum/reagent/medicine/c2/penthrite = 3) required_reagents = list(/datum/reagent/pentaerythritol = 1, /datum/reagent/acetone = 1, /datum/reagent/toxin/acid/nitracid = 1 , /datum/reagent/wittel = 1) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 5e689add2433..b2e275bc0631 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -126,8 +126,8 @@ /*WS Begin - No Cobbychmes /datum/chemical_reaction/instabitaluri - results = list(/datum/reagent/medicine/C2/instabitaluri = 3) - required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/carbon = 1, /datum/reagent/medicine/C2/libital = 1) + results = list(/datum/reagent/medicine/c2/instabitaluri = 3) + required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/carbon = 1, /datum/reagent/medicine/c2/libital = 1) WS End */ diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 5b64f57e1a37..82be8a075cc1 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -122,11 +122,11 @@ /datum/chemical_reaction/reagent_explosion/penthrite_explosion_epinephrine - required_reagents = list(/datum/reagent/medicine/C2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1) + required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1) strengthdiv = 5 /datum/chemical_reaction/reagent_explosion/penthrite_explosion_atropine - required_reagents = list(/datum/reagent/medicine/C2/penthrite = 1, /datum/reagent/medicine/atropine = 1) + required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/atropine = 1) strengthdiv = 5 modifier = 5 diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 0d583cb5a16f..dca353500b42 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -195,12 +195,14 @@ /obj/item/reagent_containers/proc/bartender_check(atom/target) . = FALSE - if(target.CanPass(src, get_turf(src)) && thrownby && HAS_TRAIT(thrownby, TRAIT_BOOZE_SLIDER)) + var/mob/thrown_by = thrownby?.resolve() + if(target.CanPass(src, get_dir(target, src)) && thrown_by && HAS_TRAIT(thrown_by, TRAIT_BOOZE_SLIDER)) . = TRUE /obj/item/reagent_containers/proc/SplashReagents(atom/target, thrown = FALSE) if(!reagents || !reagents.total_volume || !spillable) return + var/mob/thrown_by = thrownby?.resolve() if(ismob(target) && target.reagents) if(thrown) @@ -213,8 +215,8 @@ for(var/datum/reagent/A in reagents.reagent_list) R += "[A.type] ([num2text(A.volume)])," - if(thrownby) - log_combat(thrownby, M, "splashed", R) + if(thrown_by) + log_combat(thrown_by, M, "splashed", R) reagents.expose(target, TOUCH) else if(bartender_check(target) && thrown) @@ -222,10 +224,10 @@ return else - if(isturf(target) && reagents.reagent_list.len && thrownby) - log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]") - log_game("[key_name(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].") - message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].") + if(isturf(target) && reagents.reagent_list.len && thrown_by) + log_combat(thrown_by, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]") + log_game("[key_name(thrown_by)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].") + message_admins("[ADMIN_LOOKUPFLW(thrown_by)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].") playsound(src, 'sound/items/glass_splash.ogg', 50, 1) visible_message("[src] spills its contents all over [target].") reagents.expose(target, TOUCH) diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index a4cd49a131fb..97e0b7c0946b 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -44,9 +44,9 @@ Borg Hypospray /obj/item/reagent_containers/borghypo/Destroy() STOP_PROCESSING(SSobj, src) + QDEL_LIST(reagent_list) return ..() - /obj/item/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg charge_tick++ if(charge_tick >= recharge_time) diff --git a/code/modules/reagents/reagent_containers/jug.dm b/code/modules/reagents/reagent_containers/jug.dm index ae80ab51578a..a863be707c48 100644 --- a/code/modules/reagents/reagent_containers/jug.dm +++ b/code/modules/reagents/reagent_containers/jug.dm @@ -103,7 +103,7 @@ /obj/item/reagent_containers/glass/chem_jug/radium name = "chemical jug (radium)" icon_state = "chem_jug_radium" - list_reagents = list(/datum/reagent/radium = 150) + list_reagents = list(/datum/reagent/uranium/radium = 150) /obj/item/reagent_containers/glass/chem_jug/aluminium name = "chemical jug (aluminium)" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index ba365d435952..50436b8ee9e6 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -270,11 +270,11 @@ /*WS Begin - No Cobbychem -/obj/item/reagent_containers/pill/C2/probital +/obj/item/reagent_containers/pill/c2/probital name = "Probital pill" desc = "Used to treat brute damage of minor and moderate severity.The carving in the pill says 'Eat before ingesting'. Causes fatigue and diluted with granibitaluri." icon_state = "pill12" - list_reagents = list(/datum/reagent/medicine/C2/probital = 5, /datum/reagent/medicine/granibitaluri = 10) + list_reagents = list(/datum/reagent/medicine/c2/probital = 5, /datum/reagent/medicine/granibitaluri = 10) rename_with_volume = TRUE WS End */ diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 9d92cfa78f53..da4c5d0b68fa 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -395,6 +395,6 @@ name = "medical spray (hercuri)" desc = "A medical spray bottle.This one contains hercuri, a medicine used to negate the effects of dangerous high-temperature environments. Careful not to freeze the patient!" icon_state = "sprayer_large" - list_reagents = list(/datum/reagent/medicine/C2/hercuri = 100) + list_reagents = list(/datum/reagent/medicine/c2/hercuri = 100) WS End */ diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 7a4e79f9e40c..c11906bf9c0d 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) if(!QDELETED(A) && (A.loc == loc)) A.ConveyorMove(movedir) //Give this a chance to yield if the server is busy - stoplag() + CHECK_TICK conveying = FALSE // attack with item, place item on conveyor diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 6cc5fa117bb6..9f2861218418 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -140,7 +140,8 @@ else target.visible_message("[user] places [target] in [src].", "[user] places you in [src].") log_combat(user, target, "stuffed", addition="into [src]") - target.LAssailant = user + target.LAssailant = WEAKREF(user) + . = TRUE update_appearance() /obj/machinery/disposal/relaymove(mob/living/user, direction) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 04390b9563e6..ec4038ec8f2b 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -98,14 +98,14 @@ other types of metals and chemistry for reagents). illustration = "design" custom_materials = list(/datum/material/iron =300, /datum/material/glass =100) var/list/blueprints = list() + var/list/starting_blueprints = list() var/max_blueprints = 1 /obj/item/disk/design_disk/Initialize() . = ..() pixel_x = base_pixel_x + rand(-5, 5) pixel_y = base_pixel_y + rand(-5, 5) - for(var/i in 1 to max_blueprints) - blueprints += null + blueprints = new/list(max_blueprints) /obj/item/disk/design_disk/adv name = "Advanced Component Design Disk" @@ -149,21 +149,20 @@ other types of metals and chemistry for reagents). name = "design disk - disposable gun" desc = "A design disk containing designs for a cheap and disposable gun." illustration = "gun" + max_blueprints = 2 -/obj/item/disk/design_disk/disposable_gun/Initialize() +/obj/item/disk/design_disk/adv/disposable_gun/Initialize() . = ..() - var/datum/design/disposable_gun/G = new - var/datum/design/pizza_disposable_gun/P = new - blueprints[1] = G - blueprints[2] = P + blueprints[1] = new /datum/design/disposable_gun() + blueprints[2] = new /datum/design/pizza_disposable_gun() /obj/item/disk/design_disk/cmm_mechs name = "design disk - CMM mecha modifications" desc = "A design disk containing specifications for CMM-custom mecha conversions." color = "#57b8f0" - max_blueprints = 3 + max_blueprints = 2 /obj/item/disk/design_disk/cmm_mechs/Initialize() . = ..() - blueprints[1] = new /datum/design/cmm_ripley_upgrade - blueprints[2] = new /datum/design/cmm_durand_upgrade + blueprints[1] = new /datum/design/cmm_ripley_upgrade() + blueprints[2] = new /datum/design/cmm_durand_upgrade() diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm index 4063ae19fb6e..30be4869d1bc 100644 --- a/code/modules/research/nanites/nanite_chamber.dm +++ b/code/modules/research/nanites/nanite_chamber.dm @@ -12,7 +12,6 @@ idle_power_usage = 50 active_power_usage = 300 - var/obj/machinery/computer/nanite_chamber_control/console var/locked = FALSE var/breakout_time = 1200 var/scan_level diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index f2b155c0e0cd..c18364de1a2d 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -2,7 +2,6 @@ name = "nanite chamber control console" desc = "Controls a connected nanite chamber. Can inoculate nanites, load programs, and analyze existing nanite swarms." var/obj/machinery/nanite_chamber/chamber - var/obj/item/disk/nanite_program/disk icon_screen = "nanite_chamber_control" circuit = /obj/item/circuitboard/computer/nanite_chamber_control @@ -15,8 +14,7 @@ var/C = locate(/obj/machinery/nanite_chamber, get_step(src, direction)) if(C) var/obj/machinery/nanite_chamber/NC = C - chamber = NC - NC.console = src + set_connected_chamber(NC) /obj/machinery/computer/nanite_chamber_control/interact() if(!chamber) @@ -97,3 +95,14 @@ log_combat(usr, chamber.occupant, "injected", null, "with nanites via [src]") chamber.occupant.investigate_log("was injected with nanites by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) . = TRUE + +/obj/machinery/computer/nanite_chamber_control/proc/set_connected_chamber(new_chamber) + if(chamber) + UnregisterSignal(chamber, COMSIG_PARENT_QDELETING) + chamber = new_chamber + if(chamber) + RegisterSignal(chamber, COMSIG_PARENT_QDELETING, .proc/react_to_chamber_del) + +/obj/machinery/computer/nanite_chamber_control/proc/react_to_chamber_del(datum/source) + SIGNAL_HANDLER + set_connected_chamber(null) diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm index 06c7bf13d45f..9f9752fa5cb2 100644 --- a/code/modules/research/nanites/nanite_programs.dm +++ b/code/modules/research/nanites/nanite_programs.dm @@ -69,6 +69,9 @@ on_mob_remove() if(nanites) nanites.programs -= src + for(var/datum/nanite_rule/rule as anything in rules) + rule.remove() + rules.Cut() return ..() /datum/nanite_program/proc/copy() diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index 7e6237dc5744..73c0b2ea8006 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -324,7 +324,7 @@ /datum/nanite_program/dermal_button/on_mob_remove() . = ..() - qdel(button) + QDEL_NULL(button) /datum/nanite_program/dermal_button/proc/press() if(activated) diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index be4a4d6714c7..4626e4154cc8 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -462,7 +462,7 @@ for(var/mob/living/simple_animal/slime/S in range(1, get_turf(owner))) if(!(owner in S.Friends)) to_chat(owner, "[linked_extract] pulses gently as it communicates with [S].") - S.Friends[owner] = 1 + S.set_friendship(owner, 1) return ..() /datum/status_effect/stabilized/orange diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index ee581e7ab39c..60a54c461bf1 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -34,7 +34,7 @@ Burning extracts: /obj/item/slimecross/burning/grey/do_effect(mob/user) var/mob/living/simple_animal/slime/S = new(get_turf(user),"grey") S.visible_message("A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!") - S.Friends[user] = 20 //Gas, gas, gas + S.set_friendship(user, 20) //Gas, gas, gas S.bodytemperature = T0C + 400 //We gonna step on the gas. S.set_nutrition(S.get_hunger_nutrition()) //Tonight, we fight! ..() @@ -201,10 +201,10 @@ Burning extracts: for(var/mob/living/simple_animal/slime/S in view(7, get_turf(user))) if(user in S.Friends) var/friendliness = S.Friends[user] - S.Friends = list() - S.Friends[user] = friendliness + S.clear_friends() + S.set_friendship(user, friendliness) else - S.Friends = list() + S.clear_friends() S.rabid = 1 S.visible_message("The [S] is driven into a dangerous frenzy!") ..() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index ea28f5196e59..d2b1d49f78fe 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -241,7 +241,7 @@ if(X.monkeys >= 1) var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc, TRUE, owner) if (!QDELETED(food)) - food.LAssailant = C + food.LAssailant = WEAKREF(C) X.monkeys-- X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors to_chat(owner, "[X] now has [X.monkeys] monkeys stored.") @@ -443,7 +443,7 @@ if(X.monkeys >= 1) var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, C) if (!QDELETED(food)) - food.LAssailant = C + food.LAssailant = WEAKREF(C) X.monkeys-- X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors to_chat(C, "[X] now has [X.monkeys] monkeys stored.") diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index 6dffbb81272b..1325e40310f9 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -242,7 +242,8 @@ /obj/structure/puzzle_element/Moved() . = ..() - source.validate() + if(source) + source.validate() //Admin abuse version so you can pick the icon before it sets up /obj/effect/sliding_puzzle/admin diff --git a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index 1538f4d1145a..31a6ee6f0c0f 100644 --- a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -19,6 +19,7 @@ var/datum/team/ashwalkers/ashies var/last_act = 0 var/init_zlevel = 0 //This is my home, I refuse to settle anywhere else. + var/datum/linked_objective /obj/structure/lavaland/ash_walker/Initialize() .=..() @@ -26,9 +27,17 @@ ashies = new /datum/team/ashwalkers() var/datum/objective/protect_object/objective = new objective.set_target(src) + linked_objective = objective ashies.objectives += objective START_PROCESSING(SSprocessing, src) +/obj/structure/lavaland/ash_walker/Destroy() + ashies.objectives -= linked_objective + ashies = null + QDEL_NULL(linked_objective) + STOP_PROCESSING(SSprocessing, src) + return ..() + /obj/structure/lavaland/ash_walker/deconstruct(disassembled) new /obj/item/assembly/signaler/anomaly (get_step(loc, pick(GLOB.alldirs))) new /obj/effect/collapse(loc) diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 7e133dbe5500..7b900dc579d7 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -61,9 +61,9 @@ /obj/structure/necropolis_gate/singularity_pull() return 0 -/obj/structure/necropolis_gate/CanAllowThrough(atom/movable/mover, turf/target) +/obj/structure/necropolis_gate/CanAllowThrough(atom/movable/mover, border_dir) . = ..() - if(!(get_dir(loc, target) == dir)) + if(border_dir != dir) return TRUE /obj/structure/necropolis_gate/proc/on_exit(datum/source, atom/movable/leaving, direction) diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index e1e2f97fc7cf..e388a577fe1d 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -85,7 +85,7 @@ icon = 'icons/mob/blob.dmi' color = rgb(145, 150, 0) -/obj/effect/gluttony/CanAllowThrough(atom/movable/mover, turf/target)//So bullets will fly over and stuff. +/obj/effect/gluttony/CanAllowThrough(atom/movable/mover, border_dir)//So bullets will fly over and stuff. . = ..() if(ishuman(mover)) var/mob/living/carbon/human/H = mover diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm index 64b20d8a2eeb..ec0727a2cc24 100644 --- a/code/modules/shuttle/docking.dm +++ b/code/modules/shuttle/docking.dm @@ -97,9 +97,11 @@ for(var/turf/oldT as anything in old_turfs) oldT.blocks_air = TRUE oldT.set_sleeping(TRUE) + oldT.air_update_turf(TRUE) for(var/turf/newT as anything in new_turfs) newT.blocks_air = TRUE newT.set_sleeping(TRUE) + newT.air_update_turf(TRUE) /obj/docking_port/mobile/proc/throw_exception(exception/e) throw e diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 7b4c75fe0104..2ca64fcd35fc 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -20,8 +20,7 @@ All ShuttleMove procs go here if(!(. & MOVE_TURF)) return - for(var/i in contents) - var/atom/movable/thing = i + for(var/atom/movable/thing as anything in contents) if(ismob(thing)) if(isliving(thing)) var/mob/living/M = thing @@ -40,12 +39,13 @@ All ShuttleMove procs go here else //non-living mobs shouldn't be affected by shuttles, which is why this is an else - if(istype(thing, /obj/singularity) && !istype(thing, /obj/singularity/narsie)) //it's a singularity but not a god, ignore it. - continue - if(!thing.anchored) - qdel(thing) - else + if(!isobj(thing)) qdel(thing) + continue + var/obj/object = thing + if(object.resistance_flags & LANDING_PROOF) + continue + qdel(thing) // Called on the old turf to move the turf data /turf/proc/onShuttleMove(turf/newT, list/movement_force, move_dir, shuttle_layers) @@ -79,11 +79,19 @@ All ShuttleMove procs go here //Dealing with the turf we left behind oldT.TransferComponents(src) SEND_SIGNAL(oldT, COMSIG_TURF_AFTER_SHUTTLE_MOVE, src) //Mostly for decals + + if(rotation) + shuttleRotate(rotation) //see shuttle_rotate.dm + //find the boundary between the shuttle that left and what remains - var/area/ship/A = loc - var/obj/docking_port/mobile/top_shuttle = A?.mobile_port - var/shuttle_layers = -1*A.get_missing_shuttles(src) - for(var/index in 1 to all_towed_shuttles.len) + var/area/ship/ship_area = loc + if(!istype(ship_area)) + return TRUE + + //Only run this code if it's a ship area + var/obj/docking_port/mobile/top_shuttle = ship_area.mobile_port + var/shuttle_layers = -1 * ship_area.get_missing_shuttles(src) + for(var/index in 1 to length(all_towed_shuttles)) var/obj/docking_port/mobile/M = all_towed_shuttles[index] if(!M.underlying_turf_area[src]) continue @@ -103,9 +111,6 @@ All ShuttleMove procs go here if(BT_index != length(baseturfs)) oldT.ScrapeAway(baseturfs.len - BT_index, CHANGETURF_FORCEOP) - if(rotation) - shuttleRotate(rotation) //see shuttle_rotate.dm - return TRUE /turf/proc/lateShuttleMove(turf/oldT) @@ -282,22 +287,6 @@ All ShuttleMove procs go here // atmosinit() calls update_appearance(), so we don't need to call it update_appearance() -/obj/machinery/navbeacon/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) - . = ..() - GLOB.navbeacons["[z]"] -= src - GLOB.deliverybeacons -= src - -/obj/machinery/navbeacon/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - - if(codes["patrol"]) - if(!GLOB.navbeacons["[z]"]) - GLOB.navbeacons["[z]"] = list() - GLOB.navbeacons["[z]"] += src //Register with the patrol list! - if(codes["delivery"]) - GLOB.deliverybeacons += src - GLOB.deliverybeacontags += location - /************************************Item move procs************************************/ /obj/item/storage/pod/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) @@ -404,11 +393,3 @@ All ShuttleMove procs go here if((!(src in moving_dock.docking_points) || !towed_shuttles[docked]) && !moving_dock.can_move_docking_ports) return FALSE . = ..() - -/obj/effect/abstract/proximity_checker/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock, list/obj/docking_port/mobile/towed_shuttles) - . = ..() - //timer so it only happens once - if(!monitor) - qdel(src) - return - addtimer(CALLBACK(monitor, /datum/proximity_monitor/proc/SetRange, monitor.current_range, TRUE), 0, TIMER_UNIQUE) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index f1816cb8b5ef..b89a07efdac5 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -9,7 +9,7 @@ icon = 'icons/obj/device.dmi' icon_state = "pinonfar" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | LANDING_PROOF | HYPERSPACE_PROOF anchored = TRUE ///Common standard is for this to point -away- from the dockingport door, ie towards the ship @@ -29,18 +29,11 @@ //The shuttle docked here/dock we're parked at. var/obj/docking_port/docked - //these objects are indestructible /obj/docking_port/Destroy(force) - // unless you assert that you know what you're doing. Horrible things - // may result. - if(force) - if(docked) - docked.docked = null - docked = null - ..() - . = QDEL_HINT_QUEUE - else - return QDEL_HINT_LETMELIVE + if(docked) + docked.docked = null + docked = null + return ..() /obj/docking_port/has_gravity(turf/T) return FALSE @@ -182,8 +175,12 @@ T.maptext = null if(_color) var/turf/T = locate(L[1], L[2], z) + if(!T) + return T.color = "#0f0" T = locate(L[3], L[4], z) + if(!T) + return T.color = "#00f" #endif @@ -232,9 +229,10 @@ #endif /obj/docking_port/stationary/Destroy(force) - if(force) - SSshuttle.stationary -= src - . = ..() + SSshuttle.stationary -= src + owner_ship?.towed_shuttles -= docked + owner_ship?.docking_points -= src + return ..() /obj/docking_port/stationary/proc/load_roundstart() if(roundstart_template) // passed a PATH @@ -259,18 +257,15 @@ transit_dock_counter++ name = "transit dock [transit_dock_counter]" -/obj/docking_port/stationary/transit/Destroy(force=FALSE) - if(force) - if(docked) - log_world("A transit dock was destroyed while something was docked to it.") - SSshuttle.transit -= src - if(owner) - if(owner.assigned_transit == src) - owner.assigned_transit = null - owner = null - if(!QDELETED(reserved_mapzone)) - qdel(reserved_mapzone) - reserved_mapzone = null +/obj/docking_port/stationary/transit/Destroy(force) + if(!QDELETED(docked)) + log_world("A transit dock was destroyed while something was docked to it.") + SSshuttle.transit -= src + if(owner?.assigned_transit == src) + owner.assigned_transit = null + owner = null + if(!QDELETED(reserved_mapzone)) + QDEL_NULL(reserved_mapzone) return ..() /obj/docking_port/mobile @@ -357,22 +352,44 @@ SSshuttle.mobile += src /obj/docking_port/mobile/Destroy(force) - if(force) - SSshuttle.mobile -= src - destination = null - previous = null - if(!QDELETED(current_ship)) - QDEL_NULL(current_ship) - qdel(assigned_transit, TRUE) //don't need it where we're goin'! - assigned_transit = null - for(var/obj/docking_port/stationary/docking_point as anything in docking_points) - qdel(docking_point, TRUE) - docking_points = null - shuttle_areas = null //TODO: This is nowhere near enough to clear references, lol. We need an /atom/proc/disconnect_from_shuttle() proc to clear references. - towed_shuttles = null - underlying_turf_area = null - remove_ripples() - . = ..() + if(!QDELETED(current_ship)) + message_admins("Shuttle [src] tried to delete at [ADMIN_VERBOSEJMP(src)], but failed!") + stack_trace("Ship attempted deletion while current ship still exists! Aborting!") + return QDEL_HINT_LETMELIVE + + if(SSticker.IsRoundInProgress()) + message_admins("Shuttle [src] deleted at [ADMIN_VERBOSEJMP(src)]") + log_game("Shuttle [src] deleted at [AREACOORD(src)]") + + spawn_points.Cut() + + SSshuttle.mobile -= src + + destination = null + previous = null + + qdel(assigned_transit, TRUE) //don't need it where we're goin'! + assigned_transit = null + for(var/port in docking_points) + qdel(port, TRUE) + //This is only null checked for the very snowflakey reason that it might be deleted before it's loaded properly. + //See the middle of /datum/controller/subsystem/shuttle/proc/load_template() for an example. + docking_points?.Cut() + + //VERY important proc. Should probably get folded into this one, but oh well. + //Requires the shuttle areas list and the towed_shuttles list, and will clear the latter. + jump_to_null_space() + + for(var/area/ship/shuttle_area in shuttle_areas) //TODO: make a disconnect_from_shuttle() proc + shuttle_area.mobile_port = null + shuttle_areas.Cut() + shuttle_areas = null + + remove_ripples() + + underlying_turf_area = null + + return ..() /obj/docking_port/mobile/Initialize(mapload) . = ..() @@ -564,7 +581,7 @@ play_engine_sound(src, launch_sound) -/obj/docking_port/mobile/proc/jumpToNullSpace() +/obj/docking_port/mobile/proc/jump_to_null_space() // Destroys the docking port and the shuttle contents. // Not in a fancy way, it just ceases. @@ -578,9 +595,8 @@ for(var/obj/docking_port/mobile/M in all_towed_shuttles) all_shuttle_areas += M.shuttle_areas - for(var/i in 1 to old_turfs.len) - var/turf/oldT = old_turfs[i] - if(!all_shuttle_areas[oldT?.loc]) + for(var/turf/oldT as anything in old_turfs) + if(!(oldT?.loc in all_shuttle_areas)) continue var/area/old_area = oldT.loc for(var/obj/docking_port/mobile/bottom_shuttle in all_towed_shuttles) @@ -598,24 +614,9 @@ oldT.ScrapeAway(baseturf_cache.len - k + 1) break - for(var/obj/docking_port/mobile/shuttle in all_towed_shuttles) - qdel(shuttle, force=TRUE) - -/obj/docking_port/mobile/proc/intoTheSunset() - // Loop over mobs - for(var/t in return_turfs()) - var/turf/T = t - for(var/mob/living/M in T.GetAllContents()) - // If they have a mind and they're not in the brig, they escaped - if(M.mind && !istype(t, /turf/open/floor/mineral/plastitanium/red/brig)) - M.mind.force_escaped = TRUE - // Ghostize them and put them in nullspace stasis (for stat & possession checks) - M.notransform = TRUE - M.ghostize(FALSE) - M.moveToNullspace() - - // Now that mobs are stowed, delete the shuttle - jumpToNullSpace() + for(var/obj/docking_port/mobile/shuttle in all_towed_shuttles - src) + qdel(shuttle, TRUE) + towed_shuttles.Cut() /obj/docking_port/mobile/proc/create_ripples(obj/docking_port/stationary/S1, animate_time) var/list/turfs = ripple_area(S1) @@ -862,6 +863,15 @@ else . = "unknown" +/obj/docking_port/mobile/proc/get_engines() + . = list() + for(var/datum/weakref/engine in engine_list) + var/obj/structure/shuttle/engine/real_engine = engine.resolve() + if(!real_engine) + engine_list -= engine + continue + . += real_engine + /obj/docking_port/mobile/proc/hyperspace_sound(phase, list/areas) var/selected_sound switch(phase) @@ -879,8 +889,10 @@ var/range = max(width, height) var/long_range = range * 2.5 var/atom/distant_source - if(engine_list[1]) - distant_source = engine_list[1] + var/list/engines = get_engines() + + if(engines[1]) + distant_source = engines[1] else for(var/A in areas) distant_source = locate(/obj/machinery/door) in A @@ -894,11 +906,11 @@ M.playsound_local(distant_source, "sound/runtime/hyperspace/[selected_sound]_distance.ogg", 100) else if(dist_far <= range) var/source - if(engine_list.len == 0) + if(engines.len == 0) source = distant_source else var/closest_dist = 10000 - for(var/obj/O in engine_list) + for(var/obj/O in engines) var/dist_near = get_dist(M, O) if(dist_near < closest_dist) source = O diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index aa2206efb4ba..16abb651b97c 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -230,7 +230,7 @@ var/static/list/check_times = list() var/list/payees = list() -/obj/machinery/scanner_gate/luxury_shuttle/CanAllowThrough(atom/movable/mover, turf/target) +/obj/machinery/scanner_gate/luxury_shuttle/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(mover in approved_passengers) diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 4a791beb5ee7..f91eb07f52cb 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -20,6 +20,12 @@ if(has_action) action = new base_action(src) +/obj/effect/proc_holder/Destroy() + if(!QDELETED(action)) + qdel(action) + action = null + return ..() + /obj/effect/proc_holder/proc/on_gain(mob/living/user) return @@ -512,11 +518,22 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th //Checks for obstacles from A to B var/obj/dummy = new(A.loc) dummy.pass_flags |= PASSTABLE - for(var/turf/turf in getline(A,B)) - for(var/atom/movable/AM in turf) - if(!AM.CanPass(dummy,turf,1)) + var/turf/previous_step = get_turf(A) + var/first_step = TRUE + for(var/turf/next_step as anything in (getline(A, B) - previous_step)) + if(first_step) + for(var/obj/blocker in previous_step) + if(!blocker.density || !(blocker.flags_1 & ON_BORDER_1)) + continue + if(blocker.CanPass(dummy, get_dir(previous_step, next_step))) + continue + return FALSE // Could not leave the first turf. + first_step = FALSE + for(var/atom/movable/movable as anything in next_step) + if(!movable.CanPass(dummy, get_dir(next_step, previous_step))) qdel(dummy) - return 0 + return FALSE + previous_step = next_step qdel(dummy) return 1 diff --git a/code/modules/spells/spell_types/forcewall.dm b/code/modules/spells/spell_types/forcewall.dm index 64eca54e3d7a..62bd538120e1 100644 --- a/code/modules/spells/spell_types/forcewall.dm +++ b/code/modules/spells/spell_types/forcewall.dm @@ -30,11 +30,11 @@ . = ..() wizard = summoner -/obj/effect/forcefield/wizard/CanAllowThrough(atom/movable/mover, turf/target) +/obj/effect/forcefield/wizard/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(mover == wizard) return TRUE - if(ismob(mover)) + if(isliving(mover)) var/mob/M = mover if(M.anti_magic_check(chargecost = 0)) return TRUE diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index aa5eed12dcbd..db92e6530000 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -92,6 +92,9 @@ /obj/item/phylactery/Initialize(mapload, datum/mind/newmind) . = ..() + if(!mind) + stack_trace("A phylactery was created with no target mind") + return INITIALIZE_HINT_QDEL mind = newmind name = "phylactery of [mind.name]" diff --git a/code/modules/spells/spell_types/personality_commune.dm b/code/modules/spells/spell_types/personality_commune.dm index f358f2eb9e7f..1b6389bf3816 100644 --- a/code/modules/spells/spell_types/personality_commune.dm +++ b/code/modules/spells/spell_types/personality_commune.dm @@ -14,6 +14,10 @@ . = ..() trauma = T +/obj/effect/proc_holder/spell/targeted/personality_commune/Destroy() + trauma = null + return ..() + // Pillaged and adapted from telepathy code /obj/effect/proc_holder/spell/targeted/personality_commune/cast(list/targets, mob/user) if(!istype(trauma)) diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index c9101c396334..65eb0cebb2b3 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -120,7 +120,8 @@ src.source = source shape = loc if(!istype(shape)) - CRASH("shapeshift holder created outside mob/living") + stack_trace("shapeshift holder created outside mob/living") + return INITIALIZE_HINT_QDEL stored = caster if(stored.mind) stored.mind.transfer_to(shape) diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm index c130dbb57f5b..69649d11aebb 100644 --- a/code/modules/spells/spell_types/touch_attacks.dm +++ b/code/modules/spells/spell_types/touch_attacks.dm @@ -9,8 +9,10 @@ /obj/effect/proc_holder/spell/targeted/touch/Destroy() remove_hand() - to_chat(usr, "The power of the spell dissipates from your hand.") - ..() + if(action?.owner) + var/mob/guy_who_needs_to_know = action.owner + to_chat(guy_who_needs_to_know, span_notice("The power of the spell dissipates from your hand.")) + return ..() /obj/effect/proc_holder/spell/targeted/touch/proc/remove_hand(recharge = FALSE) QDEL_NULL(attached_hand) diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 73ecf0e52444..ce2ed5e98d40 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -62,6 +62,7 @@ /mob/living/proc/get_missing_limbs() + RETURN_TYPE(/list) return list() /mob/living/carbon/get_missing_limbs() diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 79b674438098..398d937cc586 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -509,12 +509,12 @@ static_icon = 'icons/mob/augmentation/augments_vox.dmi' bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC -/obj/item/bodypart/l_leg/robot/vox +/obj/item/bodypart/leg/left/robot/vox name = "prosthetic vox left leg" static_icon = 'icons/mob/augmentation/augments_vox.dmi' bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC -/obj/item/bodypart/r_leg/robot/vox +/obj/item/bodypart/leg/right/robot/vox name = "prosthetic vox right leg" static_icon = 'icons/mob/augmentation/augments_vox.dmi' bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 524077a19e6f..d9d3d6b0b717 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -5,22 +5,38 @@ icon_state = "implant-toolkit" w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/organ_action/toggle) - - var/list/items_list = list() - // Used to store a list of all items inside, for multi-item implants. - // I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. - - var/obj/item/holder = null - // You can use this var for item path, it would be converted into an item on New() + ///A ref for the arm we're taking up. Mostly for the unregister signal upon removal + var/obj/hand + //A list of typepaths to create and insert into ourself on init + var/list/items_to_create = list() + /// Used to store a list of all items inside, for multi-item implants. + var/list/items_list = list()// I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. + /// You can use this var for item path, it would be converted into an item on New(). + var/obj/item/active_item /obj/item/organ/cyberimp/arm/Initialize() . = ..() - if(ispath(holder)) - holder = new holder(src) + if(ispath(active_item)) + active_item = new active_item(src) + items_list += WEAKREF(active_item) + + for(var/typepath in items_to_create) + var/atom/new_item = new typepath(src) + items_list += WEAKREF(new_item) update_appearance() SetSlotFromZone() - items_list = contents.Copy() + +/obj/item/organ/cyberimp/arm/Destroy() + hand = null + active_item = null + for(var/datum/weakref/ref in items_list) + var/obj/item/to_del = ref.resolve() + if(!to_del) + continue + qdel(to_del) + items_list.Cut() + return ..() /obj/item/organ/cyberimp/arm/proc/SetSlotFromZone() switch(zone) @@ -66,40 +82,40 @@ Retract() /obj/item/organ/cyberimp/arm/proc/Retract() - if(!holder || (holder in src)) + if(!active_item || (active_item in src)) return - owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", - "[holder] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", + owner.visible_message("[owner] retracts [active_item] back into [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", + "[active_item] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You hear a short mechanical noise.") - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder + if(istype(active_item, /obj/item/assembly/flash/armimplant)) + var/obj/item/assembly/flash/F = active_item F.set_light(0) - owner.transferItemToLoc(holder, src, TRUE) - holder = null + owner.transferItemToLoc(active_item, src, TRUE) + active_item = null playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, TRUE) /obj/item/organ/cyberimp/arm/proc/Extend(obj/item/item) if(!(item in src)) return - holder = item + active_item = item - ADD_TRAIT(holder, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - holder.slot_flags = null - holder.set_custom_materials(null) + ADD_TRAIT(active_item, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) + active_item.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + active_item.slot_flags = null + active_item.set_custom_materials(null) - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder + if(istype(active_item, /obj/item/assembly/flash/armimplant)) + var/obj/item/assembly/flash/F = active_item F.set_light(7) var/side = zone == BODY_ZONE_R_ARM? RIGHT_HANDS : LEFT_HANDS var/hand = owner.get_empty_held_index_for_side(side) if(hand) - owner.put_in_hand(holder, hand) + owner.put_in_hand(active_item, hand) else var/list/hand_items = owner.get_held_items_for_side(side, all = TRUE) var/success = FALSE @@ -110,32 +126,36 @@ failure_message += "Your [I] interferes with [src]!" continue to_chat(owner, "You drop [I] to activate [src]!") - success = owner.put_in_hand(holder, owner.get_empty_held_index_for_side(side)) + success = owner.put_in_hand(active_item, owner.get_empty_held_index_for_side(side)) break if(!success) for(var/i in failure_message) to_chat(owner, i) return - owner.visible_message("[owner] extends [holder] from [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", - "You extend [holder] from your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", + owner.visible_message("[owner] extends [active_item] from [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", + "You extend [active_item] from your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You hear a short mechanical noise.") playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, TRUE) /obj/item/organ/cyberimp/arm/ui_action_click() - if((organ_flags & ORGAN_FAILING) || (!holder && !contents.len)) + if((organ_flags & ORGAN_FAILING) || (!active_item && !contents.len)) to_chat(owner, "The implant doesn't respond. It seems to be broken...") return - if(!holder || (holder in src)) - holder = null + if(!active_item || (active_item in src)) + active_item = null if(contents.len == 1) Extend(contents[1]) else var/list/choice_list = list() - for(var/obj/item/I in items_list) - choice_list[I] = image(I) + for(var/datum/weakref/augment_ref in items_list) + var/obj/item/augment_item = augment_ref.resolve() + if(!augment_item) + items_list -= augment_ref + continue + choice_list[augment_item] = image(augment_item) var/obj/item/choice = show_radial_menu(owner, owner, choice_list) - if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && (choice in contents)) + if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !active_item && (choice in contents)) // This monster sanity check is a nice example of how bad input is. Extend(choice) else @@ -161,7 +181,7 @@ name = "arm-mounted laser implant" desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." icon_state = "arm_laser" - contents = newlist(/obj/item/gun/energy/laser/mounted) + items_to_create = list(/obj/item/gun/energy/laser/mounted) /obj/item/organ/cyberimp/arm/gun/laser/l zone = BODY_ZONE_L_ARM @@ -171,7 +191,7 @@ name = "arm-mounted taser implant" desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." icon_state = "arm_taser" - contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) + items_to_create = list(/obj/item/gun/energy/e_gun/advtaser/mounted) /obj/item/organ/cyberimp/arm/gun/taser/l zone = BODY_ZONE_L_ARM @@ -179,64 +199,82 @@ /obj/item/organ/cyberimp/arm/toolset name = "integrated toolset implant" desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contain advanced versions of every tool." - contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, + items_to_create = list(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, /obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg) /obj/item/organ/cyberimp/arm/toolset/l zone = BODY_ZONE_L_ARM /obj/item/organ/cyberimp/arm/toolset/emag_act(mob/user) - if(!(locate(/obj/item/kitchen/knife/combat/cyborg) in items_list)) - to_chat(user, "You unlock [src]'s integrated knife!") - items_list += new /obj/item/kitchen/knife/combat/cyborg(src) - return 1 - return 0 + for(var/datum/weakref/created_item in items_list) + var/obj/potential_knife = created_item.resolve() + if(istype(/obj/item/kitchen/knife/combat/cyborg, potential_knife)) + return FALSE + + to_chat(user, "You unlock [src]'s integrated knife!") + items_list += WEAKREF(new /obj/item/kitchen/knife/combat/cyborg(src)) + return TRUE /obj/item/organ/cyberimp/arm/esword name = "arm-mounted energy blade" desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy." - contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight) + items_to_create = list(/obj/item/melee/transforming/energy/blade/hardlight) /obj/item/organ/cyberimp/arm/medibeam name = "integrated medical beamgun" desc = "A cybernetic implant that allows the user to project a healing beam from their hand." - contents = newlist(/obj/item/gun/medbeam) + items_to_create = list(/obj/item/gun/medbeam) /obj/item/organ/cyberimp/arm/flash name = "integrated high-intensity photon projector" //Why not desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." - contents = newlist(/obj/item/assembly/flash/armimplant) + items_to_create = list(/obj/item/assembly/flash/armimplant) /obj/item/organ/cyberimp/arm/flash/Initialize() . = ..() - if(locate(/obj/item/assembly/flash/armimplant) in items_list) - var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list - F.I = src + for(var/datum/weakref/created_item in items_list) + var/obj/potential_flash = created_item.resolve() + if(!istype(/obj/item/assembly/flash/armimplant, potential_flash)) + continue + var/obj/item/assembly/flash/armimplant/flash = potential_flash + flash.arm = WEAKREF(src) // Todo: wipe single letter vars out of assembly code + +/obj/item/organ/cyberimp/arm/flash/Extend() + . = ..() + active_item.set_light_range(7) + active_item.set_light_on(TRUE) + +/obj/item/organ/cyberimp/arm/flash/Retract() + active_item.set_light_on(FALSE) + return ..() /obj/item/organ/cyberimp/arm/baton name = "arm electrification implant" desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm." - contents = newlist(/obj/item/borg/stun) + items_to_create = list(/obj/item/borg/stun) /obj/item/organ/cyberimp/arm/combat name = "combat cybernetics implant" desc = "A powerful cybernetic implant that contains combat modules built into the user's arm." - contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/assembly/flash/armimplant) + items_to_create = list(/obj/item/melee/transforming/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/assembly/flash/armimplant) /obj/item/organ/cyberimp/arm/combat/Initialize() . = ..() - if(locate(/obj/item/assembly/flash/armimplant) in items_list) - var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list - F.I = src + for(var/datum/weakref/created_item in items_list) + var/obj/potential_flash = created_item.resolve() + if(!istype(/obj/item/assembly/flash/armimplant, potential_flash)) + continue + var/obj/item/assembly/flash/armimplant/flash = potential_flash + flash.arm = WEAKREF(src) // Todo: wipe single letter vars out of assembly code /obj/item/organ/cyberimp/arm/surgery name = "surgical toolset implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." - contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment) + items_to_create = list(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment) /obj/item/organ/cyberimp/arm/power_cord name = "power cord implant" desc = "An internal power cord hooked up to a battery. Useful if you run on volts." - contents = newlist(/obj/item/apc_powercord) + items_to_create = list(/obj/item/apc_powercord) zone = "l_arm" diff --git a/code/modules/tgui/tgui_alert.dm b/code/modules/tgui/tgui_alert.dm index 1a86cca705bd..9d2dd3b5a059 100644 --- a/code/modules/tgui/tgui_alert.dm +++ b/code/modules/tgui/tgui_alert.dm @@ -90,7 +90,7 @@ * the window was closed by the user. */ /datum/tgui_modal/proc/wait() - while (!choice && !closed) + while (!choice && !closed && !QDELETED(src)) stoplag(1) /datum/tgui_modal/ui_interact(mob/user, datum/tgui/ui) diff --git a/code/modules/unit_tests/README.md b/code/modules/unit_tests/README.md new file mode 100644 index 000000000000..5f9a62e124eb --- /dev/null +++ b/code/modules/unit_tests/README.md @@ -0,0 +1,76 @@ +# Unit Tests + +## What is unit testing? + +Unit tests are automated code to verify that parts of the game work exactly as they should. For example, [a test to make sure that the amputation surgery actually amputates the limb](https://github.com/tgstation/tgstation/blob/e416283f162b86345a8623125ab866839b1ac40d/code/modules/unit_tests/surgeries.dm#L1-L13). These are ran every time a PR is made, and thus are very helpful for preventing bugs from cropping up in your code that would've otherwise gone unnoticed. For example, would you have thought to check [that beach boys would still work the same after editing pizza](https://github.com/tgstation/tgstation/pull/53641#issuecomment-691384934)? If you value your time, probably not. + +On their most basic level, when `UNIT_TESTS` is defined, all subtypes of `/datum/unit_test` will have their `Run` proc executed. From here, if `Fail` is called at any point, then the tests will report as failed. + +## How do I write one? +1. Find a relevant file. + +All unit test related code is in `code/modules/unit_tests`. If you are adding a new test for a surgery, for example, then you'd open `surgeries.dm`. If a relevant file does not exist, simply create one in this folder, then `#include` it in `_unit_tests.dm`. + +2. Create the unit test. + +To make a new unit test, you simply need to define a `/datum/unit_test`. + +For example, let's suppose that we are creating a test to make sure a proc `square` correctly raises inputs to the power of two. We'd start with first: + +``` +/datum/unit_test/square/Run() +``` + +This defines our new unit test, `/datum/unit_test/square`. Inside this function, we're then going to run through whatever we want to check. Tests provide a few assertion functions to make this easy. For now, we're going to use `TEST_ASSERT_EQUAL`. + +``` +/datum/unit_test/square/Run() + TEST_ASSERT_EQUAL(square(3), 9, "square(3) did not return 9") + TEST_ASSERT_EQUAL(square(4), 16, "square(4) did not return 16") +``` + +As you can hopefully tell, we're simply checking if the output of `square` matches the output we are expecting. If the test fails, it'll report the error message given as well as whatever the actual output was. + +3. Run the unit test + +Open `code/_compile_options.dm` and uncomment the following line. + +``` +//#define UNIT_TESTS //If this is uncommented, we do a single run though of the game setup and tear down process with unit tests in between +``` + +Then, run tgstation.dmb in Dream Daemon. Don't bother trying to connect, you won't need to. You'll be able to see the outputs of all the tests. You'll get to see which tests failed and for what reason. If they all pass, you're set! + +## How to think about tests + +Unit tests exist to prevent bugs that would happen in a real game. Thus, they should attempt to emulate the game world wherever possible. For example, the [quick swap sanity test](https://github.com/tgstation/tgstation/blob/e416283f162b86345a8623125ab866839b1ac40d/code/modules/unit_tests/quick_swap_sanity.dm) emulates a *real* scenario of the bug it fixed occurring by creating a character and giving it real items. The unrecommended alternative would be to create special test-only items. This isn't a hard rule, the [reagent method exposure tests](https://github.com/tgstation/tgstation/blob/e416283f162b86345a8623125ab866839b1ac40d/code/modules/unit_tests/reagent_mod_expose.dm) create a test-only reagent for example, but do keep it in mind. + +Unit tests should also be just that--testing *units* of code. For example, instead of having one massive test for reagents, there are instead several smaller tests for testing exposure, metabolization, etc. + +## The unit testing API + +You can find more information about all of these from their respective doc comments, but for a brief overview: + +`/datum/unit_test` - The base for all tests to be ran. Subtypes must override `Run()`. `New()` and `Destroy()` can be used for setup and teardown. To fail, use `TEST_FAIL(reason)`. + +`/datum/unit_test/proc/allocate(type, ...)` - Allocates an instance of the provided type with the given arguments. Is automatically destroyed when the test is over. Commonly seen in the form of `var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human)`. + +`TEST_FAIL(reason)` - Marks a failure at this location, but does not stop the test. + +`TEST_ASSERT(assertion, reason)` - Stops the unit test and fails if the assertion is not met. For example: `TEST_ASSERT(powered(), "Machine is not powered")`. + +`TEST_ASSERT_NOTNULL(a, message)` - Same as `TEST_ASSERT`, but checks if `!isnull(a)`. For example: `TEST_ASSERT_NOTNULL(myatom, "My atom was never set!")`. + +`TEST_ASSERT_NULL(a, message)` - Same as `TEST_ASSERT`, but checks if `isnull(a)`. If not, gives a helpful message showing what `a` was. For example: `TEST_ASSERT_NULL(delme, "Delme was never cleaned up!")`. + +`TEST_ASSERT_EQUAL(a, b, message)` - Same as `TEST_ASSERT`, but checks if `a == b`. If not, gives a helpful message showing what both `a` and `b` were. For example: `TEST_ASSERT_EQUAL(2 + 2, 4, "The universe is falling apart before our eyes!")`. + +`TEST_ASSERT_NOTEQUAL(a, b, message)` - Same as `TEST_ASSERT_EQUAL`, but reversed. + +`TEST_FOCUS(test_path)` - *Only* run the test provided within the parameters. Useful for reducing noise. For example, if we only want to run our example square test, we can add `TEST_FOCUS(/datum/unit_test/square)`. Should *never* be pushed in a pull request--you will be laughed at. + +## Final Notes + +- Writing tests before you attempt to fix the bug can actually speed up development a lot! It means you don't have to go in game and folllow the same exact steps manually every time. This process is known as "TDD" (test driven development). Write the test first, make sure it fails, *then* start work on the fix/feature, and you'll know you're done when your tests pass. If you do try this, do make sure to confirm in a non-testing environment just to double check. +- Make sure that your tests don't accidentally call RNG functions like `prob`. Since RNG is seeded during tests, you may not realize you have until someone else makes a PR and the tests fail! +- Do your best not to change the behavior of non-testing code during tests. While it may sometimes be necessary in the case of situations such as the above, it is still a slippery slope that can lead to the code you're testing being too different from the production environment to be useful. diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 1607229a790a..cc12fe0c638f 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -3,23 +3,65 @@ #ifdef UNIT_TESTS +/// For advanced cases, fail unconditionally but don't return (so a test can return multiple results) +#define TEST_FAIL(reason) (Fail(reason || "No reason", __FILE__, __LINE__)) + /// Asserts that a condition is true /// If the condition is not true, fails the test -#define TEST_ASSERT(assertion, reason) if (!(assertion)) { return Fail("Assertion failed: [reason || "No reason"]") } +#define TEST_ASSERT(assertion, reason) if (!(assertion)) { return Fail("Assertion failed: [reason || "No reason"]", __FILE__, __LINE__) } + +/// Asserts that a parameter is not null +#define TEST_ASSERT_NOTNULL(a, reason) if (isnull(a)) { return Fail("Expected non-null value: [reason || "No reason"]", __FILE__, __LINE__) } + +/// Asserts that a parameter is null +#define TEST_ASSERT_NULL(a, reason) if (!isnull(a)) { return Fail("Expected null value but received [a]: [reason || "No reason"]", __FILE__, __LINE__) } /// Asserts that the two parameters passed are equal, fails otherwise /// Optionally allows an additional message in the case of a failure -#define TEST_ASSERT_EQUAL(a, b, message) if ((a) != (b)) { return Fail("Expected [isnull(a) ? "null" : a] to be equal to [isnull(b) ? "null" : b].[message ? " [message]" : ""]") } +#define TEST_ASSERT_EQUAL(a, b, message) do { \ + var/lhs = ##a; \ + var/rhs = ##b; \ + if (lhs != rhs) { \ + return Fail("Expected [isnull(lhs) ? "null" : lhs] to be equal to [isnull(rhs) ? "null" : rhs].[message ? " [message]" : ""]", __FILE__, __LINE__); \ + } \ +} while (FALSE) /// Asserts that the two parameters passed are not equal, fails otherwise /// Optionally allows an additional message in the case of a failure -#define TEST_ASSERT_NOTEQUAL(a, b, message) if ((a) == (b)) { return Fail("Expected [isnull(a) ? "null" : a] to not be equal to [isnull(b) ? "null" : b].[message ? " [message]" : ""]") } +#define TEST_ASSERT_NOTEQUAL(a, b, message) do { \ + var/lhs = ##a; \ + var/rhs = ##b; \ + if (lhs == rhs) { \ + return Fail("Expected [isnull(lhs) ? "null" : lhs] to not be equal to [isnull(rhs) ? "null" : rhs].[message ? " [message]" : ""]", __FILE__, __LINE__); \ + } \ +} while (FALSE) /// *Only* run the test provided within the parentheses /// This is useful for debugging when you want to reduce noise, but should never be pushed /// Intended to be used in the manner of `TEST_FOCUS(/datum/unit_test/math)` #define TEST_FOCUS(test_path) ##test_path { focus = TRUE; } +/// Constants indicating unit test completion status +#define UNIT_TEST_PASSED 0 +#define UNIT_TEST_FAILED 1 +#define UNIT_TEST_SKIPPED 2 + +#define TEST_DEFAULT 1 +#define TEST_DEL_WORLD INFINITY + +/// Change color to red on ANSI terminal output, if enabled with -DANSICOLORS. +#ifdef ANSICOLORS +#define TEST_OUTPUT_RED(text) "\x1B\x5B1;31m[text]\x1B\x5B0m" +#else +#define TEST_OUTPUT_RED(text) (text) +#endif +/// Change color to green on ANSI terminal output, if enabled with -DANSICOLORS. +#ifdef ANSICOLORS +#define TEST_OUTPUT_GREEN(text) "\x1B\x5B1;32m[text]\x1B\x5B0m" +#else +#define TEST_OUTPUT_GREEN(text) (text) +#endif + #include "anchored_mobs.dm" #include "autowiki.dm" #include "bespoke_id.dm" @@ -27,35 +69,46 @@ #include "combat.dm" #include "component_tests.dm" #include "connect_loc.dm" +#include "create_and_destroy.dm" +#include "biome_lists.dm" #include "emoting.dm" #include "keybinding_init.dm" #include "machine_disassembly.dm" -#include "outfit_sanity.dm" #include "open_air.dm" +#include "outfit_sanity.dm" #include "overmap.dm" #include "pills.dm" +#include "planet_gen.dm" #include "plantgrowth_tests.dm" +#include "projectiles.dm" #include "quick_swap_sanity.dm" #include "rcd.dm" -#include "projectiles.dm" #include "reactions.dm" #include "reagent_id_typos.dm" #include "reagent_mod_expose.dm" #include "reagent_mod_procs.dm" +#include "reagent_names.dm" #include "reagent_recipe_collisions.dm" #include "resist.dm" +#include "ruin_placement.dm" #include "say.dm" #include "serving_tray.dm" #include "ship_outpost_placement.dm" #include "spawn_humans.dm" +#include "species_unique_id.dm" #include "species_whitelists.dm" +#include "stack_singular_name.dm" #include "subsystem_init.dm" +#include "subsystem_metric_sanity.dm" #include "supply_pack.dm" #include "teleporters.dm" -#include "subsystem_metric_sanity.dm" #include "timer_sanity.dm" #include "unit_test.dm" +#ifdef REFERENCE_TRACKING_DEBUG //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter +#include "find_reference_sanity.dm" +#endif + #undef TEST_ASSERT #undef TEST_ASSERT_EQUAL #undef TEST_ASSERT_NOTEQUAL diff --git a/code/modules/unit_tests/anchored_mobs.dm b/code/modules/unit_tests/anchored_mobs.dm index 103b97e7a993..88487ea2b8d7 100644 --- a/code/modules/unit_tests/anchored_mobs.dm +++ b/code/modules/unit_tests/anchored_mobs.dm @@ -4,6 +4,4 @@ var/mob/M = i if(initial(M.anchored)) L += "[i]" - if(!L.len) - return //passed! - Fail("The following mobs are defined as anchored. This is incompatible with the new move force/resist system and needs to be revised.: [L.Join(" ")]") + TEST_ASSERT(!L.len, "The following mobs are defined as anchored. This is incompatible with the new move force/resist system and needs to be revised.: [L.Join(" ")]") diff --git a/code/modules/unit_tests/bespoke_id.dm b/code/modules/unit_tests/bespoke_id.dm index 06676c626c7e..e1356650ded2 100644 --- a/code/modules/unit_tests/bespoke_id.dm +++ b/code/modules/unit_tests/bespoke_id.dm @@ -5,4 +5,4 @@ for(var/i in subtypesof(/datum/element)) var/datum/element/faketype = i if((initial(faketype.element_flags) & ELEMENT_BESPOKE) && initial(faketype.id_arg_index) == base_index) - Fail("A bespoke element was not configured with a proper id_arg_index: [faketype]") + TEST_FAIL("A bespoke element was not configured with a proper id_arg_index: [faketype]") diff --git a/code/modules/unit_tests/biome_lists.dm b/code/modules/unit_tests/biome_lists.dm new file mode 100644 index 000000000000..7c7500155235 --- /dev/null +++ b/code/modules/unit_tests/biome_lists.dm @@ -0,0 +1,18 @@ +/datum/unit_test/biome_lists/Run() + for(var/biome_type as anything in SSmapping.biomes) + var/datum/biome/biome = SSmapping.biomes[biome_type] + + validate_chance(biome.mob_spawn_list, "mob spawn", biome_type) + validate_chance(biome.flora_spawn_list, "flora spawn", biome_type) + validate_chance(biome.feature_spawn_list, "feature spawn", biome_type) + +/datum/unit_test/biome_lists/proc/validate_chance(list/to_check, name, biome) + if(to_check && !islist(to_check)) + TEST_FAIL("Biome [biome] has invalid [name] list") + for(var/type in to_check) + var/value = to_check[type] + if(!value) + TEST_FAIL("Biome [biome] has no [name] weight for [type]") + return + if(!isnum(value) || value < 1 || value != round(value)) + TEST_FAIL("Biome [biome] has invalid [name] chance for [type] ([value])") diff --git a/code/modules/unit_tests/component_tests.dm b/code/modules/unit_tests/component_tests.dm index 0099d7508c5d..f609e73c4b72 100644 --- a/code/modules/unit_tests/component_tests.dm +++ b/code/modules/unit_tests/component_tests.dm @@ -8,5 +8,5 @@ var/dupe_type = initial(comp.dupe_type) if(dupe_type && !ispath(dupe_type)) bad_dts += t - if(length(bad_dms) || length(bad_dts)) - Fail("Components with invalid dupe modes: ([bad_dms.Join(",")]) ||| Components with invalid dupe types: ([bad_dts.Join(",")])") + TEST_ASSERT(!length(bad_dms) && !length(bad_dts), + "Components with invalid dupe modes: ([bad_dms.Join(",")]) ||| Components with invalid dupe types: ([bad_dts.Join(",")])") diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm new file mode 100644 index 000000000000..017356d9152a --- /dev/null +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -0,0 +1,219 @@ +///Delete one of every type, sleep a while, then check to see if anything has gone fucky +/datum/unit_test/create_and_destroy + //You absolutely must run last + priority = TEST_DEL_WORLD + +/datum/unit_test/create_and_destroy/Run() + //We'll spawn everything here + var/turf/spawn_at = run_loc_bottom_left + var/list/ignore = list( + //Should never exist + /turf, + //No-op + /turf/template_noop, + //Never meant to be created, errors out the ass for mobcode reasons + /mob/living/carbon, + //And another + /obj/item/slimecross/recurring, + //This should be obvious + /obj/machinery/doomsday_device, + //Template type + /obj/effect/mob_spawn, + //Say it with me now, type template + /obj/effect/mapping_helpers/component_injector, + //template type + /obj/effect/mapping_helpers/trait_injector, + //Singleton + /mob/dview, + //Template + /obj/effect/mapping_helpers/custom_icon, + //Needs an implant inside + /obj/item/implantcase, + //Needs a ship + /obj/item/key/ship, + //Template + /obj/machinery/power/shuttle/engine/liquid, + //needs a template + /obj/effect/landmark/subship, + //needs a friend :( + /obj/effect/mob_spawn/human/demonic_friend, + //needs a derg + /obj/structure/carp_rift, + //doesn't have icons + /obj/item/bodypart, + /obj/item/bodypart/chest, + /obj/item/bodypart/head, + /obj/item/bodypart/l_arm, + /obj/item/bodypart/r_arm, + /obj/item/bodypart/leg, + //fucking explodes when created + /obj/item/grown/bananapeel/bombanana, + ) + //This turf existing is an error in and of itself + ignore += typesof(/turf/baseturf_skipover) + ignore += typesof(/turf/baseturf_bottom) + //Don't spam out baseturfs + ignore += typesof(/obj/effect/baseturf_helper) + //Needs a contractee + ignore += typesof(/obj/item/paper/contract) + //This demands a borg, so we'll let if off easy + ignore += typesof(/obj/item/modular_computer/tablet/integrated) + //This one demands a computer, ditto + ignore += typesof(/obj/item/modular_computer/processor) + //Very finiky, blacklisting to make things easier + ignore += typesof(/obj/item/poster/wanted) + //We can't pass a mind into this + ignore += typesof(/obj/item/phylactery) + //This expects a seed, we can't pass it + ignore += typesof(/obj/item/reagent_containers/food/snacks/grown) + //Nothing to hallucinate if there's nothing to hallicinate + ignore += typesof(/obj/effect/hallucination) + //We don't have a pod + ignore += typesof(/obj/effect/pod_landingzone_effect) + ignore += typesof(/obj/effect/pod_landingzone) + //These want fried food to take on the shape of, we can't pass that in + ignore += typesof(/obj/item/reagent_containers/food/snacks/deepfryholder) + //Can't pass in a thing to glow + ignore += typesof(/obj/effect/abstract/eye_lighting) + //It wants a lot more context then we have + ignore += typesof(/obj/effect/buildmode_line) + //We don't have a disease to pass in + ignore += typesof(/obj/effect/mapping_helpers/component_injector/infective) + //There's no shapeshift to hold + ignore += typesof(/obj/shapeshift_holder) + //No tauma to pass in + ignore += typesof(/mob/camera/imaginary_friend) + //No pod to gondola + ignore += typesof(/mob/living/simple_animal/pet/gondola/gondolapod) + //Hangs a ref post invoke async, which we don't support. Could put a qdeleted check but it feels hacky + ignore += typesof(/obj/effect/anomaly/grav/high) + //See above + ignore += typesof(/obj/effect/timestop) + //this boi spawns turf changing stuff, and it stacks and causes pain. Let's just not + ignore += typesof(/obj/effect/sliding_puzzle) + //Stacks baseturfs, can't be tested here + ignore += typesof(/obj/effect/temp_visual/lava_warning) + //Stacks baseturfs, can't be tested here + ignore += typesof(/obj/effect/ctf) + //Our system doesn't support it without warning spam from unregister calls on things that never registered + ignore += typesof(/obj/docking_port) + //This spawns beams as a part of init, which can sleep past an async proc. This hangs a ref, and fucks us. It's only a problem here because the beam sleeps with CHECK_TICK + ignore += typesof(/obj/structure/alien/resin/flower_bud_enemy) + //Expects a mob to holderize, we have nothing to give + ignore += typesof(/obj/item/clothing/head/mob_holder) + //Needs ships + ignore += typesof(/obj/overmap) + //Needs a holopad + ignore += typesof(/mob/living/simple_animal/hologram) + //Needs an elevator + ignore += typesof(/obj/machinery/status_display/elevator) + ignore += typesof(/obj/machinery/elevator_floor_button) + + var/list/cached_contents = spawn_at.contents.Copy() + var/original_turf_type = spawn_at.type + var/original_baseturfs = islist(spawn_at.baseturfs) ? spawn_at.baseturfs.Copy() : spawn_at.baseturfs + var/original_baseturf_count = length(original_baseturfs) + + for(var/type_path in typesof(/atom/movable, /turf) - ignore) //No areas please + if(ispath(type_path, /turf)) + spawn_at.ChangeTurf(type_path) + //We change it back to prevent baseturfs stacking and hitting the limit + spawn_at.ChangeTurf(original_turf_type, original_baseturfs) + if(original_baseturf_count != length(spawn_at.baseturfs)) + TEST_FAIL("[type_path] changed the amount of baseturfs from [original_baseturf_count] to [length(spawn_at.baseturfs)]; [english_list(original_baseturfs)] to [islist(spawn_at.baseturfs) ? english_list(spawn_at.baseturfs) : spawn_at.baseturfs]") + //Warn if it changes again + original_baseturfs = islist(spawn_at.baseturfs) ? spawn_at.baseturfs.Copy() : spawn_at.baseturfs + original_baseturf_count = length(original_baseturfs) + else + var/atom/creation = new type_path(spawn_at) + if(QDELETED(creation)) + continue + //Go all in + qdel(creation, force = TRUE) + //This will hold a ref to the last thing we process unless we set it to null + //Yes byond is fucking sinful + creation = null + + //There's a lot of stuff that either spawns stuff in on create, or removes stuff on destroy. Let's cut it all out so things are easier to deal with + var/list/to_del = spawn_at.contents - cached_contents + if(length(to_del)) + for(var/atom/to_kill in to_del) + qdel(to_kill) + + //Hell code, we're bound to have ended the round somehow so let's stop if from ending while we work + SSticker.delay_end = TRUE + + // Drastically lower the amount of time it takes to GC, since we don't have clients that can hold it up. + SSgarbage.collection_timeout[GC_QUEUE_CHECK] = 10 SECONDS + //Prevent the garbage subsystem from harddeling anything, if only to save time + SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = 10000 HOURS + //Clear it, just in case + cached_contents.Cut() + + var/list/queues_we_care_about = list() + // All up to harddel + for(var/i in 1 to GC_QUEUE_HARDDELETE - 1) + queues_we_care_about += i + + //Now that we've qdel'd everything, let's sleep until the gc has processed all the shit we care about + // + 2 seconds to ensure that everything gets in the queue. + var/time_needed = 2 SECONDS + for(var/index in queues_we_care_about) + time_needed += SSgarbage.collection_timeout[index] + + var/start_time = world.time + var/garbage_queue_processed = FALSE + + sleep(time_needed) + while(!garbage_queue_processed) + var/oldest_packet_creation = INFINITY + for(var/index in queues_we_care_about) + var/list/queue_to_check = SSgarbage.queues[index] + if(!length(queue_to_check)) + continue + + var/list/oldest_packet = queue_to_check[1] + //Pull out the time we inserted at + var/qdeld_at = oldest_packet[GC_QUEUE_ITEM_GCD_DESTROYED] + + oldest_packet_creation = min(qdeld_at, oldest_packet_creation) + + //If we've found a packet that got del'd later then we finished, then all our shit has been processed + if(oldest_packet_creation > start_time) + garbage_queue_processed = TRUE + break + + if(world.time > start_time + time_needed + 30 MINUTES) //If this gets us gitbanned I'm going to laugh so hard + TEST_FAIL("Something has gone horribly wrong, the garbage queue has been processing for well over 30 minutes. What the hell did you do") + break + + //Immediately fire the gc right after + SSgarbage.next_fire = 1 + //Unless you've seriously fucked up, queue processing shouldn't take "that" long. Let her run for a bit, see if anything's changed + sleep(20 SECONDS) + + //Alright, time to see if anything messed up + var/list/cache_for_sonic_speed = SSgarbage.items + for(var/path in cache_for_sonic_speed) + var/datum/qdel_item/item = cache_for_sonic_speed[path] + if(item.failures) + TEST_FAIL("[item.name] hard deleted [item.failures] times out of a total del count of [item.qdels]") + if(item.no_respect_force) + TEST_FAIL("[item.name] failed to respect force deletion [item.no_respect_force] times out of a total del count of [item.qdels]") + if(item.no_hint) + TEST_FAIL("[item.name] failed to return a qdel hint [item.no_hint] times out of a total del count of [item.qdels]") + + cache_for_sonic_speed = SSatoms.BadInitializeCalls + for(var/path in cache_for_sonic_speed) + var/fails = cache_for_sonic_speed[path] + if(fails & BAD_INIT_NO_HINT) + TEST_FAIL("[path] didn't return an Initialize hint") + if(fails & BAD_INIT_QDEL_BEFORE) + TEST_FAIL("[path] qdel'd in New()") + if(fails & BAD_INIT_SLEPT) + TEST_FAIL("[path] slept during Initialize()") + + SSticker.delay_end = FALSE + //This shouldn't be needed, but let's be polite + SSgarbage.collection_timeout[GC_QUEUE_CHECK] = GC_CHECK_QUEUE + SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = GC_DEL_QUEUE diff --git a/code/modules/unit_tests/find_reference_sanity.dm b/code/modules/unit_tests/find_reference_sanity.dm new file mode 100644 index 000000000000..67b6072d3b96 --- /dev/null +++ b/code/modules/unit_tests/find_reference_sanity.dm @@ -0,0 +1,132 @@ +///Used to test the completeness of the reference finder proc. +/datum/unit_test/find_reference_sanity + +/atom/movable/ref_holder + var/static/atom/movable/ref_test/static_test + var/atom/movable/ref_test/test + var/list/test_list = list() + var/list/test_assoc_list = list() + +/atom/movable/ref_holder/Destroy() + test = null + static_test = null + test_list.Cut() + test_assoc_list.Cut() + return ..() + +/atom/movable/ref_test + var/atom/movable/ref_test/self_ref + +/atom/movable/ref_test/Destroy(force) + self_ref = null + return ..() + +/datum/unit_test/find_reference_sanity/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Sanity check + victim.DoSearchVar(testbed, "Sanity Check", search_time = 1) //We increment search time to get around an optimization + TEST_ASSERT(!victim.found_refs.len, "The ref-tracking tool found a ref where none existed") + SSgarbage.should_save_refs = FALSE + +/datum/unit_test/find_reference_baseline/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Set up for the first round of tests + testbed.test = victim + testbed.test_list += victim + testbed.test_assoc_list["baseline"] = victim + + victim.DoSearchVar(testbed, "First Run", search_time = 2) + + TEST_ASSERT(victim.found_refs["test"], "The ref-tracking tool failed to find a regular value") + TEST_ASSERT(victim.found_refs[testbed.test_list], "The ref-tracking tool failed to find a list entry") + TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list value") + SSgarbage.should_save_refs = FALSE + +/datum/unit_test/find_reference_exotic/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Second round, bit harder this time + testbed.overlays += victim + testbed.vis_contents += victim + testbed.test_assoc_list[victim] = TRUE + + victim.DoSearchVar(testbed, "Second Run", search_time = 3) + + //This is another sanity check + TEST_ASSERT(!victim.found_refs[testbed.overlays], "The ref-tracking tool found an overlays entry? That shouldn't be possible") + TEST_ASSERT(victim.found_refs[testbed.vis_contents], "The ref-tracking tool failed to find a vis_contents entry") + TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list key") + SSgarbage.should_save_refs = FALSE + +/datum/unit_test/find_reference_esoteric/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Let's get a bit esoteric + victim.self_ref = victim + var/list/to_find = list(victim) + testbed.test_list += list(to_find) + var/list/to_find_assoc = list(victim) + testbed.test_assoc_list["Nesting"] = to_find_assoc + + victim.DoSearchVar(victim, "Third Run Self", search_time = 4) + victim.DoSearchVar(testbed, "Third Run Testbed", search_time = 4) + TEST_ASSERT(victim.found_refs["self_ref"], "The ref-tracking tool failed to find a self reference") + TEST_ASSERT(victim.found_refs[to_find], "The ref-tracking tool failed to find a nested list entry") + TEST_ASSERT(victim.found_refs[to_find_assoc], "The ref-tracking tool failed to find a nested assoc list entry") + SSgarbage.should_save_refs = FALSE + +/datum/unit_test/find_reference_null_key_entry/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Calm before the storm + testbed.test_assoc_list = list(null = victim) + + victim.DoSearchVar(testbed, "Fourth Run", search_time = 5) + TEST_ASSERT(testbed.test_assoc_list, "The ref-tracking tool failed to find a null key'd assoc list entry") + +/datum/unit_test/find_reference_assoc_investigation/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Let's do some more complex assoc list investigation + var/list/to_find_in_key = list(victim) + testbed.test_assoc_list[to_find_in_key] = list("memes") + var/list/to_find_null_assoc_nested = list(victim) + testbed.test_assoc_list[null] = to_find_null_assoc_nested + + victim.DoSearchVar(testbed, "Fifth Run", search_time = 6) + TEST_ASSERT(victim.found_refs[to_find_in_key], "The ref-tracking tool failed to find a nested assoc list key") + TEST_ASSERT(victim.found_refs[to_find_null_assoc_nested], "The ref-tracking tool failed to find a null key'd nested assoc list entry") + SSgarbage.should_save_refs = FALSE + +/datum/unit_test/find_reference_static_investigation/Run() + var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) + var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) + SSgarbage.should_save_refs = TRUE + + //Lets check static vars now, since those can be a real headache + testbed.static_test = victim + + //Yes we do actually need to do this. The searcher refuses to read weird lists + //And global.vars is a really weird list + var/global_vars = list() + for(var/key in global.vars) + global_vars[key] = global.vars[key] + + victim.DoSearchVar(global_vars, "Sixth Run", search_time = 7) + + TEST_ASSERT(victim.found_refs[global_vars], "The ref-tracking tool failed to find a natively global variable") + SSgarbage.should_save_refs = FALSE diff --git a/code/modules/unit_tests/keybinding_init.dm b/code/modules/unit_tests/keybinding_init.dm index 2bd2fdee1e2e..c9d17f688afd 100644 --- a/code/modules/unit_tests/keybinding_init.dm +++ b/code/modules/unit_tests/keybinding_init.dm @@ -3,4 +3,4 @@ var/datum/keybinding/KB = i if(initial(KB.keybind_signal) || !initial(KB.name)) continue - Fail("[KB.name] does not have a keybind signal defined.") + TEST_FAIL("[KB.name] does not have a keybind signal defined.") diff --git a/code/modules/unit_tests/open_air.dm b/code/modules/unit_tests/open_air.dm index d2ead5c53ed4..969e1f7561cc 100644 --- a/code/modules/unit_tests/open_air.dm +++ b/code/modules/unit_tests/open_air.dm @@ -9,19 +9,19 @@ SSair.fire() sleep(1) if(center_turf.air.get_moles(GAS_PLASMA) > 28) - Fail("Gas isn't moving at all, or isn't moving enough (somehow) (plasma started at 32, is now [center_turf.air.get_moles(GAS_PLASMA)]") + TEST_FAIL("Gas isn't moving at all, or isn't moving enough (somehow) (plasma started at 32, is now [center_turf.air.get_moles(GAS_PLASMA)]") center_turf.air.set_moles(GAS_PLASMA, 100) center_turf.air.set_moles(GAS_O2, 100/1.4) center_turf.air.set_temperature(5000) center_turf.air.vv_react(center_turf) if(center_turf.air.get_moles(GAS_PLASMA) >= 100) - Fail("Gas isn't reacting properly (plasma: [center_turf.air.get_moles(GAS_PLASMA)], temp: [center_turf.air.return_temperature()]") + TEST_FAIL("Gas isn't reacting properly (plasma: [center_turf.air.get_moles(GAS_PLASMA)], temp: [center_turf.air.return_temperature()]") var/obj/effect/hotspot = locate(/obj/effect/hotspot) in center_turf if(!istype(hotspot)) - Fail("Hotspots aren't showing up on reaction") + TEST_FAIL("Hotspots aren't showing up on reaction") /datum/unit_test/open_air/Destroy() var/datum/virtual_level/vlevel = mapzone.virtual_levels[1] for(var/turf/T in vlevel.get_block()) T.Initalize_Atmos(0) - ..() + return ..() diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index ef41539c9019..fee653cd626f 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -1,8 +1,9 @@ #define CHECK_OUTFIT_SLOT(outfit_key, slot_name) if (outfit.##outfit_key) { \ H.equip_to_slot_or_del(new outfit.##outfit_key(H), ##slot_name, TRUE); \ /* We don't check the result of equip_to_slot_or_del because it returns false for random jumpsuits, as they delete themselves on init */ \ - if (!H.get_item_by_slot(##slot_name)) { \ - Fail("[outfit.name]'s [#outfit_key] is invalid!"); \ + var/obj/item/outfit_item = H.get_item_by_slot(##slot_name); \ + if (!outfit_item) { \ + TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ } \ } @@ -56,6 +57,6 @@ var/number = backpack_contents[path] || 1 for (var/_ in 1 to number) if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE)) - Fail("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") + TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") #undef CHECK_OUTFIT_SLOT diff --git a/code/modules/unit_tests/planet_gen.dm b/code/modules/unit_tests/planet_gen.dm new file mode 100644 index 000000000000..fdcfda1faeaa --- /dev/null +++ b/code/modules/unit_tests/planet_gen.dm @@ -0,0 +1,19 @@ +/datum/unit_test/planet_gen/Run() + var/datum/map_zone/mapzone = SSmapping.create_map_zone("Planet Generation Testing Zone") + for(var/planet_name as anything in SSmapping.planet_types) + var/datum/planet_type/planet_type = SSmapping.planet_types[planet_name] + var/datum/map_generator/mapgen = new planet_type.mapgen + var/datum/virtual_level/vlevel = SSmapping.create_virtual_level( + planet_name, + list(ZTRAIT_MINING = TRUE, ZTRAIT_BASETURF = planet_type.default_baseturf), + mapzone, + QUADRANT_MAP_SIZE, + QUADRANT_MAP_SIZE, + ALLOCATION_QUADRANT, + QUADRANT_MAP_SIZE + ) + mapgen.generate_turfs(vlevel.get_unreserved_block()) + mapgen.populate_turfs(vlevel.get_unreserved_block()) + vlevel.clear_reservation() + qdel(vlevel) + qdel(mapzone) diff --git a/code/modules/unit_tests/plantgrowth_tests.dm b/code/modules/unit_tests/plantgrowth_tests.dm index 15c56a12ec1d..daff6cccb8c2 100644 --- a/code/modules/unit_tests/plantgrowth_tests.dm +++ b/code/modules/unit_tests/plantgrowth_tests.dm @@ -16,11 +16,11 @@ for(var/i in 1 to seed.growthstages) if("[seed.icon_grow][i]" in states) continue - Fail("[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!") + TEST_FAIL("[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!") if(!(seed.icon_dead in states)) - Fail("[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!") + TEST_FAIL("[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!") if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product if(!(seed.icon_harvest in states)) - Fail("[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!") + TEST_FAIL("[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!") diff --git a/code/modules/unit_tests/projectiles.dm b/code/modules/unit_tests/projectiles.dm index 06a8fb0780a9..4950be10c1a6 100644 --- a/code/modules/unit_tests/projectiles.dm +++ b/code/modules/unit_tests/projectiles.dm @@ -2,4 +2,26 @@ for(var/path in typesof(/obj/projectile)) var/obj/projectile/projectile = path if(initial(projectile.movement_type) & PHASING) - Fail("[path] has default movement type PHASING. Piercing projectiles should be done using the projectile piercing system, not movement_types!") + TEST_FAIL("[path] has default movement type PHASING. Piercing projectiles should be done using the projectile piercing system, not movement_types!") + +/datum/unit_test/gun_go_bang/Run() + // test is for a ballistic gun that starts loaded + chambered + var/obj/item/gun/test_gun = allocate(/obj/item/gun/ballistic/automatic/pistol) + var/mob/living/carbon/human/victim = allocate(/mob/living/carbon/human) + var/mob/living/carbon/human/gunner = allocate(/mob/living/carbon/human) + ADD_TRAIT(victim, TRAIT_PIERCEIMMUNE, INNATE_TRAIT) // So the human isn't randomly affected by shrapnel + + var/obj/item/ammo_casing/loaded_casing = test_gun.chambered + TEST_ASSERT(loaded_casing, "Gun started without round chambered, should be loaded") + var/obj/projectile/loaded_bullet = loaded_casing.BB + TEST_ASSERT(loaded_bullet, "Ammo casing has no loaded bullet") + + gunner.put_in_hands(test_gun, forced=TRUE) + var/expected_damage = loaded_bullet.damage + loaded_bullet.def_zone = BODY_ZONE_CHEST + var/did_we_shoot = test_gun.afterattack(victim, gunner) + TEST_ASSERT(did_we_shoot, "Gun does not appeared to have successfully fired.") + TEST_ASSERT_EQUAL(victim.getBruteLoss(), expected_damage, "Victim took incorrect amount of damage, expected [expected_damage], got [victim.getBruteLoss()].") + + var/obj/item/bodypart/expected_part = victim.get_bodypart(BODY_ZONE_CHEST) + TEST_ASSERT_EQUAL(expected_part.brute_dam, expected_damage, "Intended bodypart took incorrect amount of damage, either it hit another bodypart or armor was incorrectly applied. Expected [expected_damage], got [expected_part.brute_dam].") diff --git a/code/modules/unit_tests/rcd.dm b/code/modules/unit_tests/rcd.dm index 989ac8c3b9c5..b65d02312a78 100644 --- a/code/modules/unit_tests/rcd.dm +++ b/code/modules/unit_tests/rcd.dm @@ -19,8 +19,7 @@ var/list/adjacent_turfs = get_adjacent_open_turfs(engineer) - if(!length(adjacent_turfs)) - Fail("RCD Test failed - Lack of adjacent open turfs. This may be an issue with the unit test.") + TEST_ASSERT(length(adjacent_turfs), "RCD Test failed - Lack of adjacent open turfs. This may be an issue with the unit test.") var/turf/adjacent_turf = adjacent_turfs[1] diff --git a/code/modules/unit_tests/reactions.dm b/code/modules/unit_tests/reactions.dm index 66d9b490991c..7a48aeb6dd7a 100644 --- a/code/modules/unit_tests/reactions.dm +++ b/code/modules/unit_tests/reactions.dm @@ -3,4 +3,4 @@ var/test_info = G.test() if(!test_info["success"]) var/message = test_info["message"] - Fail("Gas reaction [G.name] is failing its unit test with the following message: [message]") + TEST_FAIL("Gas reaction [G.name] is failing its unit test with the following message: [message]") diff --git a/code/modules/unit_tests/reagent_id_typos.dm b/code/modules/unit_tests/reagent_id_typos.dm index d6548852fa52..f85834999962 100644 --- a/code/modules/unit_tests/reagent_id_typos.dm +++ b/code/modules/unit_tests/reagent_id_typos.dm @@ -11,4 +11,4 @@ var/datum/chemical_reaction/R = V for(var/id in (R.required_reagents + R.required_catalysts)) if(!GLOB.chemical_reagents_list[id]) - Fail("Unknown chemical id \"[id]\" in recipe [R.type]") + TEST_FAIL("Unknown chemical id \"[id]\" in recipe [R.type]") diff --git a/code/modules/unit_tests/reagent_names.dm b/code/modules/unit_tests/reagent_names.dm new file mode 100644 index 000000000000..b7a690e93485 --- /dev/null +++ b/code/modules/unit_tests/reagent_names.dm @@ -0,0 +1,15 @@ +/// Test that all reagent names are different in order to prevent #65231 +/datum/unit_test/reagent_names + +/datum/unit_test/reagent_names/Run() + var/used_names = list() + + for (var/datum/reagent/reagent as anything in subtypesof(/datum/reagent)) + var/name = initial(reagent.name) + if (!name) + continue + + if (name in used_names) + TEST_FAIL("[used_names[name]] shares a name with [reagent] ([name])") + else + used_names[name] = reagent diff --git a/code/modules/unit_tests/reagent_recipe_collisions.dm b/code/modules/unit_tests/reagent_recipe_collisions.dm index 20e875422f29..b75a17a7e73c 100644 --- a/code/modules/unit_tests/reagent_recipe_collisions.dm +++ b/code/modules/unit_tests/reagent_recipe_collisions.dm @@ -12,4 +12,4 @@ var/datum/chemical_reaction/r1 = reactions[i] var/datum/chemical_reaction/r2 = reactions[i2] if(chem_recipes_do_conflict(r1, r2)) - Fail("Chemical recipe conflict between [r1.type] and [r2.type]") + TEST_FAIL("Chemical recipe conflict between [r1.type] and [r2.type]") diff --git a/code/modules/unit_tests/ruin_placement.dm b/code/modules/unit_tests/ruin_placement.dm new file mode 100644 index 000000000000..1df3560ed710 --- /dev/null +++ b/code/modules/unit_tests/ruin_placement.dm @@ -0,0 +1,53 @@ +/datum/unit_test/ruin_placement/Run() + var/datum/map_zone/mapzone = SSmapping.create_map_zone("Ruin Testing Zone") + for(var/planet_name as anything in SSmapping.planet_types) + var/datum/planet_type/planet_type = SSmapping.planet_types[planet_name] + for(var/ruin_name as anything in SSmapping.ruin_types_list[planet_type.ruin_type]) + var/datum/map_template/ruin/ruin = SSmapping.ruin_types_list[planet_type.ruin_type][ruin_name] + var/datum/virtual_level/vlevel = SSmapping.create_virtual_level( + ruin.name, + list(ZTRAIT_MINING = TRUE, ZTRAIT_BASETURF = planet_type.default_baseturf), + mapzone, + ruin.width, + ruin.height + ) + + ruin.load(vlevel.get_unreserved_bottom_left_turf()) + + var/list/errors = atmosscan(TRUE, TRUE) + //errors += powerdebug(TRUE) + + for(var/error in errors) + Fail("Mapping error in [ruin_name]: [error]", ruin.mappath, 1) + + vlevel.clear_reservation() + qdel(vlevel) + + qdel(mapzone) + +/* Slow, and usually unecessary +/datum/unit_test/direct_tmpl_placement/Run() + SSair.is_test_loading = TRUE + var/datum/map_zone/mapzone = SSmapping.create_map_zone("Template Testing Zone") + for(var/ship_name as anything in SSmapping.map_templates) + var/datum/map_template/template = SSmapping.map_templates[ship_name] + var/datum/virtual_level/vlevel = SSmapping.create_virtual_level( + template.name, + list(), + mapzone, + template.width, + template.height + ) + + template.load(vlevel.get_unreserved_bottom_left_turf()) + + var/list/errors = atmosscan(TRUE) + //errors += powerdebug(TRUE) + + for(var/error in errors) + Fail("Mapping error in [ship_name]: [error]", template.mappath, 1) + + vlevel.clear_reservation() + qdel(vlevel) + SSair.is_test_loading = FALSE +*/ diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm index db686aa7db8f..d3fa6e6cdfc7 100644 --- a/code/modules/unit_tests/say.dm +++ b/code/modules/unit_tests/say.dm @@ -19,5 +19,5 @@ TEST_ASSERT_EQUAL(mods[mod_key], expected_mods[mod_key], "The value for [mod_key] was not what we expected. Message: [message]") expected_mods -= mod_key - if (expected_mods.len) - Fail("Some message mods were expected, but were not returned by get_message_mods: [json_encode(expected_mods)]. Message: [message]") + TEST_ASSERT(!expected_mods.len, + "Some message mods were expected, but were not returned by get_message_mods: [json_encode(expected_mods)]. Message: [message]") diff --git a/code/modules/unit_tests/ship_outpost_placement.dm b/code/modules/unit_tests/ship_outpost_placement.dm index 6042f42d5fd6..e1e27097ee6f 100644 --- a/code/modules/unit_tests/ship_outpost_placement.dm +++ b/code/modules/unit_tests/ship_outpost_placement.dm @@ -1,19 +1,11 @@ /datum/unit_test/ship_outpost_placement/Run() - SSair.is_test_loading = TRUE for(var/mapname as anything in SSmapping.ship_purchase_list) var/datum/map_template/shuttle/map = SSmapping.ship_purchase_list[mapname] try // they'll spawn in empty space, and won't be docked new /datum/overmap/ship/controlled(list("x" = 1, "y" = 1), map) catch(var/exception/e) - Fail("Runtime error loading ship type ([map.name]): [e] on [e.file]:[e.line]\n[e.desc]") - SSair.is_test_loading = FALSE - - var/list/errors = atmosscan(TRUE) - errors += powerdebug(TRUE) - - for(var/error in errors) - Fail("[error]") + TEST_FAIL("Runtime error loading ship type ([map.name]): [e] on [e.file]:[e.line]\n[e.desc]") for(var/outpost_type in subtypesof(/datum/overmap/outpost)) var/datum/overmap/outpost/test_outpost = new outpost_type() @@ -28,8 +20,17 @@ found_dock = TRUE break if(!found_dock) - Fail("[cur_ship.source_template.name] was unable to dock with [test_outpost.type]!") + TEST_FAIL("[cur_ship.source_template.name] was unable to dock with [test_outpost.type]!") // keeps ships ready for the next test, and stops us from loading 50 duplicate hangars if(cur_ship.docked_to) cur_ship.Undock(TRUE) + + var/list/errors = atmosscan(TRUE) + errors += powerdebug(TRUE) + + for(var/error in errors) + TEST_FAIL("Mapping error: [error]") + + for(var/datum/overmap/ship/controlled/deleting_ship as anything in SSovermap.controlled_ships) + qdel(deleting_ship) diff --git a/code/modules/unit_tests/species_unique_id.dm b/code/modules/unit_tests/species_unique_id.dm new file mode 100644 index 000000000000..d9fc2f288c91 --- /dev/null +++ b/code/modules/unit_tests/species_unique_id.dm @@ -0,0 +1,14 @@ +/** + * Every species should use a species ID unique to it and it alone. This test runs through every subtype of /datum/species, and checks for a species ID. + * Every ID is written to a list, gathered_species_ids, and if a previously written ID is written again, this test will fail. + */ +/datum/unit_test/species_unique_id + +/datum/unit_test/species_unique_id/Run() + var/list/gathered_species_ids = list() + for(var/datum/species/species as anything in subtypesof(/datum/species)) + var/species_id = initial(species.id) + if(gathered_species_ids[species_id]) + TEST_FAIL("Duplicate species ID! [species_id] is not unique to a single species.") + else + gathered_species_ids[species_id] = TRUE diff --git a/code/modules/unit_tests/species_whitelists.dm b/code/modules/unit_tests/species_whitelists.dm index 145f3a259fc2..ec05d0cf9f8f 100644 --- a/code/modules/unit_tests/species_whitelists.dm +++ b/code/modules/unit_tests/species_whitelists.dm @@ -2,4 +2,4 @@ for(var/typepath in subtypesof(/datum/species)) var/datum/species/S = typepath if(initial(S.changesource_flags) == NONE) - Fail("A species type was detected with no changesource flags: [S]") + TEST_FAIL("A species type was detected with no changesource flags: [S]") diff --git a/code/modules/unit_tests/stack_singular_name.dm b/code/modules/unit_tests/stack_singular_name.dm new file mode 100644 index 000000000000..739efb54d6a4 --- /dev/null +++ b/code/modules/unit_tests/stack_singular_name.dm @@ -0,0 +1,18 @@ +/** + * Goes through every subtype of /obj/item/stack to check for a singular name, var/singular_name. + * Everything within the blacklist does not need to be tested because it exists to be overriden. + * This test will fail if a subtype of /obj/item/stack is missing a singular name. + */ +/datum/unit_test/stack_singular_name + +/datum/unit_test/stack_singular_name/Run() + var/list/blacklist = list( // all of these are generally parents that exist to be overriden; ex. /obj/item/stack/license_plates exists to branch into /filled and /empty + /obj/item/stack/sheet, + /obj/item/stack/sheet/mineral, + /obj/item/stack/license_plates, + /obj/item/stack/sheet/animalhide, + ) + + for(var/obj/item/stack/stack_check as anything in subtypesof(/obj/item/stack) - blacklist) + if(!initial(stack_check.singular_name)) + TEST_FAIL("[stack_check] is missing a singular name!") diff --git a/code/modules/unit_tests/subsystem_init.dm b/code/modules/unit_tests/subsystem_init.dm index 7d5473bc1bb7..c377302ba6a1 100644 --- a/code/modules/unit_tests/subsystem_init.dm +++ b/code/modules/unit_tests/subsystem_init.dm @@ -4,4 +4,4 @@ if(ss.flags & SS_NO_INIT) continue if(!ss.initialized) - Fail("[ss]([ss.type]) is a subsystem meant to initialize but doesn't get set as initialized.") + TEST_FAIL("[ss]([ss.type]) is a subsystem meant to initialize but doesn't get set as initialized.") diff --git a/code/modules/unit_tests/subsystem_metric_sanity.dm b/code/modules/unit_tests/subsystem_metric_sanity.dm index 44e375b7535b..c062e60ae4ab 100644 --- a/code/modules/unit_tests/subsystem_metric_sanity.dm +++ b/code/modules/unit_tests/subsystem_metric_sanity.dm @@ -2,21 +2,21 @@ /datum/unit_test/subsystem_metric_sanity/Run() for(var/datum/controller/subsystem/SS in Master.subsystems) if(SS.ss_id == initial(SS.ss_id)) // initial() works here because ss_id is set at runtime during /New() - Fail("[SS.type] has no SS ID, somehow!") + TEST_FAIL("[SS.type] has no SS ID, somehow!") continue var/list/data = SS.get_metrics() if(length(data) != 3) - Fail("SS[SS.ss_id] has invalid metrics data!") + TEST_FAIL("SS[SS.ss_id] has invalid metrics data!") continue if(isnull(data["cost"])) - Fail("SS[SS.ss_id] has invalid metrics data! No 'cost' found in [json_encode(data)]") + TEST_FAIL("SS[SS.ss_id] has invalid metrics data! No 'cost' found in [json_encode(data)]") continue if(isnull(data["tick_usage"])) - Fail("SS[SS.ss_id] has invalid metrics data! No 'tick_usage' found in [json_encode(data)]") + TEST_FAIL("SS[SS.ss_id] has invalid metrics data! No 'tick_usage' found in [json_encode(data)]") continue if(isnull(data["custom"])) - Fail("SS[SS.ss_id] has invalid metrics data! No 'custom' found in [json_encode(data)]") + TEST_FAIL("SS[SS.ss_id] has invalid metrics data! No 'custom' found in [json_encode(data)]") continue if(!islist(data["custom"])) - Fail("SS[SS.ss_id] has invalid metrics data! 'custom' is not a list in [json_encode(data)]") + TEST_FAIL("SS[SS.ss_id] has invalid metrics data! 'custom' is not a list in [json_encode(data)]") continue diff --git a/code/modules/unit_tests/supply_pack.dm b/code/modules/unit_tests/supply_pack.dm index 37ba56b7865b..ca4c1154ca6a 100644 --- a/code/modules/unit_tests/supply_pack.dm +++ b/code/modules/unit_tests/supply_pack.dm @@ -9,4 +9,4 @@ value += rep.total_value[thing] if(value >= pack.cost) - Fail("[pack] ([pack_type]) was resold for [value], [value - pack.cost] greater than the buy price of [pack.cost]!") + TEST_FAIL("[pack] ([pack_type]) was resold for [value], [value - pack.cost] greater than the buy price of [pack.cost]!") diff --git a/code/modules/unit_tests/timer_sanity.dm b/code/modules/unit_tests/timer_sanity.dm index d92323a5253f..dbdf3f6d8e8d 100644 --- a/code/modules/unit_tests/timer_sanity.dm +++ b/code/modules/unit_tests/timer_sanity.dm @@ -1,3 +1,3 @@ /datum/unit_test/timer_sanity/Run() - if(SStimer.bucket_count < 0) - Fail("SStimer is going into negative bucket count from something") + TEST_ASSERT(SStimer.bucket_count >= 0, + "SStimer is going into negative bucket count from something") diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 4a1e5f37906e..7240adb33855 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -3,7 +3,7 @@ Usage: Override /Run() to run your test code -Call Fail() to fail the test (You should specify a reason) +Call TEST_FAIL() to fail the test (You should specify a reason) You may use /New() and /Destroy() for setup/teardown respectively @@ -28,6 +28,8 @@ GLOBAL_VAR(test_log) /// The type of turf to allocate for the testing zone var/test_turf_type = /turf/open/floor/plasteel + ///The priority of the test, the larger it is the later it fires + var/priority = TEST_DEFAULT //internal shit var/focus = FALSE var/succeeded = TRUE @@ -36,6 +38,9 @@ GLOBAL_VAR(test_log) var/static/datum/map_zone/mapzone +/proc/cmp_unit_test_priority(datum/unit_test/a, datum/unit_test/b) + return initial(a.priority) - initial(b.priority) + /datum/unit_test/New() if (isnull(mapzone)) var/height = 7 @@ -58,15 +63,15 @@ GLOBAL_VAR(test_log) return ..() /datum/unit_test/proc/Run() - Fail("Run() called parent or not implemented") + TEST_FAIL("Run() called parent or not implemented") -/datum/unit_test/proc/Fail(reason = "No reason") +/datum/unit_test/proc/Fail(reason = "No reason", file = "OUTDATED_TEST", line = 1) succeeded = FALSE if(!istext(reason)) reason = "FORMATTED: [reason != null ? reason : "NULL"]" - LAZYADD(fail_reasons, reason) + LAZYADD(fail_reasons, list(list(reason, file, line))) /// Allocates an instance of the provided type, and places it somewhere in an available loc /// Instances allocated through this proc will be destroyed when the test is over @@ -80,37 +85,62 @@ GLOBAL_VAR(test_log) allocated += instance return instance +/proc/RunUnitTest(test_path, list/test_results) + var/datum/unit_test/test = new test_path + + GLOB.current_test = test + var/duration = REALTIMEOFDAY + + test.Run() + + duration = REALTIMEOFDAY - duration + GLOB.current_test = null + GLOB.failed_any_test |= !test.succeeded + + var/list/log_entry = list( + "[test.succeeded ? TEST_OUTPUT_GREEN("PASS") : TEST_OUTPUT_RED("FAIL")]: [test_path] [duration / 10]s", + ) + var/list/fail_reasons = test.fail_reasons + + for(var/reasonID in 1 to LAZYLEN(fail_reasons)) + var/text = fail_reasons[reasonID][1] + var/file = fail_reasons[reasonID][2] + var/line = fail_reasons[reasonID][3] + + /// Github action annotation. + log_world("::error file=[file],line=[line],title=[test_path]::[text]") + + // Normal log message + log_entry += "\tREASON #[reasonID]: [text] at [file]:[line]" + + var/message = log_entry.Join("\n") + log_test(message) + + test_results[test_path] = list("status" = test.succeeded ? UNIT_TEST_PASSED : UNIT_TEST_FAILED, "message" = message, "name" = test_path) + + qdel(test) + /proc/RunUnitTests() CHECK_TICK - var/tests_to_run = subtypesof(/datum/unit_test) + var/list/tests_to_run = subtypesof(/datum/unit_test) + var/list/focused_tests = list() for (var/_test_to_run in tests_to_run) var/datum/unit_test/test_to_run = _test_to_run if (initial(test_to_run.focus)) - tests_to_run = list(test_to_run) - break - - for(var/I in tests_to_run) - var/datum/unit_test/test = new I - - GLOB.current_test = test - var/duration = REALTIMEOFDAY - - test.Run() - - duration = REALTIMEOFDAY - duration - GLOB.current_test = null - GLOB.failed_any_test |= !test.succeeded + focused_tests += _test_to_run - var/list/log_entry = list("[test.succeeded ? "PASS" : "FAIL"]: [I] [duration / 10]s") - var/list/fail_reasons = test.fail_reasons + if(length(focused_tests)) + tests_to_run = focused_tests - qdel(test) + tests_to_run = sortTim(tests_to_run, /proc/cmp_unit_test_priority) - for(var/J in 1 to LAZYLEN(fail_reasons)) - log_entry += "\tREASON #[J]: [fail_reasons[J]]" - log_test(log_entry.Join("\n")) + var/list/test_results = list() - CHECK_TICK + for(var/unit_path in tests_to_run) + CHECK_TICK //We check tick first because the unit test we run last may be so expensive that checking tick will lock up this loop forever + RunUnitTest(unit_path, test_results) SSticker.force_ending = TRUE + //We have to call this manually because del_text can preceed us, and SSticker doesn't fire in the post game + SSticker.declare_completion() diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index a0d3c6d13c7d..a785ba5985d7 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -44,25 +44,29 @@ /obj/vehicle/ridden/atv/turret/Moved() . = ..() - if(turret) - turret.forceMove(get_turf(src)) - switch(dir) - if(NORTH) - turret.pixel_x = base_pixel_x - turret.pixel_y = base_pixel_y + 4 - turret.layer = ABOVE_MOB_LAYER - if(EAST) - turret.pixel_x = base_pixel_x - 12 - turret.pixel_y = base_pixel_y + 4 - turret.layer = OBJ_LAYER - if(SOUTH) - turret.pixel_x = base_pixel_x - turret.pixel_y = base_pixel_y + 4 - turret.layer = OBJ_LAYER - if(WEST) - turret.pixel_x = base_pixel_x + 12 - turret.pixel_y = base_pixel_y + 4 - turret.layer = OBJ_LAYER + if(!turret) + return + var/turf/our_turf = get_turf(src) + if(!our_turf) + return + turret.forceMove(our_turf) + switch(dir) + if(NORTH) + turret.pixel_x = base_pixel_x + turret.pixel_y = base_pixel_y + 4 + turret.layer = ABOVE_MOB_LAYER + if(EAST) + turret.pixel_x = base_pixel_x - 12 + turret.pixel_y = base_pixel_y + 4 + turret.layer = OBJ_LAYER + if(SOUTH) + turret.pixel_x = base_pixel_x + turret.pixel_y = base_pixel_y + 4 + turret.layer = OBJ_LAYER + if(WEST) + turret.pixel_x = base_pixel_x + 12 + turret.pixel_y = base_pixel_y + 4 + turret.layer = OBJ_LAYER /obj/vehicle/ridden/atv/attackby(obj/item/W as obj, mob/user as mob, params) if(W.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 1941d81accbe..caf9b6afa757 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -65,7 +65,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/vend_ready = TRUE ///Next world time to send a purchase message var/purchase_message_cooldown - ///Last mob to shop with us + ///The ref of the last mob to shop with us var/last_shopper var/tilted = FALSE var/tiltable = TRUE @@ -804,10 +804,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C D.adjust_money(price_to_use) SSblackbox.record_feedback("amount", "vending_spent", price_to_use) log_econ("[price_to_use] credits were inserted into [src] by [D.account_holder] to buy [R].") - if(last_shopper != usr || purchase_message_cooldown < world.time) + if(last_shopper != REF(usr) || purchase_message_cooldown < world.time) say("Thank you for shopping with [src]!") purchase_message_cooldown = world.time + 5 SECONDS - last_shopper = usr + last_shopper = REF(usr) use_power(5) if(icon_vend) //Show the vending animation if needed flick(icon_vend,src) @@ -1040,10 +1040,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C S.forceMove(drop_location()) loaded_items-- use_power(5) - if(last_shopper != usr || purchase_message_cooldown < world.time) + if(last_shopper != REF(usr) || purchase_message_cooldown < world.time) say("Thank you for buying local and purchasing [S]!") purchase_message_cooldown = world.time + 5 SECONDS - last_shopper = usr + last_shopper = REF(usr) vend_ready = TRUE updateUsrDialog() return diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 640308d0bf1c..30f94b56c1ca 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -30,7 +30,7 @@ /obj/item/organ/zombie_infection/Remove(mob/living/carbon/M, special = 0) . = ..() STOP_PROCESSING(SSobj, src) - if(iszombie(M) && old_species && !special) + if(iszombie(M) && old_species && !QDELETED(M) && !special) M.set_species(old_species) if(timer_id) deltimer(timer_id) diff --git a/html/changelogs/AutoChangeLog-pr-63276.yml b/html/changelogs/AutoChangeLog-pr-63276.yml new file mode 100644 index 000000000000..d2d64697126a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-63276.yml @@ -0,0 +1,4 @@ +author: "Pickle-Coding" +delete-after: True +changes: + - bugfix: "Allows the supermatter crystal to produce gases while powered, even in absolutely empty turfs, excluding space turfs." diff --git a/shiptest.dme b/shiptest.dme index 23cb707af265..b56709e8b98b 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -31,6 +31,7 @@ #include "code\__DEFINES\aquarium.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" +#include "code\__DEFINES\atoms.dm" #include "code\__DEFINES\bitfields.dm" #include "code\__DEFINES\blackmarket.dm" #include "code\__DEFINES\bodyparts.dm" @@ -365,7 +366,6 @@ #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" #include "code\controllers\subsystem\processing\fastprocess.dm" -#include "code\controllers\subsystem\processing\fields.dm" #include "code\controllers\subsystem\processing\fluids.dm" #include "code\controllers\subsystem\processing\instruments.dm" #include "code\controllers\subsystem\processing\nanites.dm" @@ -451,7 +451,9 @@ #include "code\datums\components\butchering.dm" #include "code\datums\components\caltrop.dm" #include "code\datums\components\chasm.dm" +#include "code\datums\components\connect_containers.dm" #include "code\datums\components\connect_loc_behalf.dm" +#include "code\datums\components\connect_range.dm" #include "code\datums\components\construction.dm" #include "code\datums\components\creamed.dm" #include "code\datums\components\deadchat_control.dm" @@ -704,6 +706,11 @@ #include "code\datums\mutations\speech.dm" #include "code\datums\mutations\telekinesis.dm" #include "code\datums\mutations\touch.dm" +#include "code\datums\proximity_monitor\field.dm" +#include "code\datums\proximity_monitor\proximity_monitor.dm" +#include "code\datums\proximity_monitor\fields\gravity.dm" +#include "code\datums\proximity_monitor\fields\peaceborg_dampener.dm" +#include "code\datums\proximity_monitor\fields\timestop.dm" #include "code\datums\ruins\beachplanet.dm" #include "code\datums\ruins\icemoon.dm" #include "code\datums\ruins\jungle.dm" @@ -1014,7 +1021,6 @@ #include "code\game\objects\effects\overlays.dm" #include "code\game\objects\effects\particle_emitter.dm" #include "code\game\objects\effects\portals.dm" -#include "code\game\objects\effects\proximity.dm" #include "code\game\objects\effects\radiation.dm" #include "code\game\objects\effects\spiderperson_web.dm" #include "code\game\objects\effects\spiders.dm" @@ -2073,11 +2079,6 @@ #include "code\modules\events\wizard\rpgloot.dm" #include "code\modules\events\wizard\shuffle.dm" #include "code\modules\events\wizard\summons.dm" -#include "code\modules\fields\fields.dm" -#include "code\modules\fields\gravity.dm" -#include "code\modules\fields\peaceborg_dampener.dm" -#include "code\modules\fields\timestop.dm" -#include "code\modules\fields\turf_objects.dm" #include "code\modules\fishing\bait.dm" #include "code\modules\fishing\fish_catalog.dm" #include "code\modules\fishing\fishing_equipment.dm" diff --git a/tgui/packages/tgui/interfaces/OperatingComputer.js b/tgui/packages/tgui/interfaces/OperatingComputer.js index 87d1979aa813..a2291676c2e5 100644 --- a/tgui/packages/tgui/interfaces/OperatingComputer.js +++ b/tgui/packages/tgui/interfaces/OperatingComputer.js @@ -55,6 +55,9 @@ const PatientStateView = (props, context) => { if (!table) { return No Table Detected; } + if (!patient) { + return No Patient Detected; + } return ( <>
diff --git a/tools/build/build.js b/tools/build/build.js index f63411918e31..01491d4964e1 100755 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -55,9 +55,8 @@ export const NoWarningParameter = new Juke.Parameter({ export const DmMapsIncludeTarget = new Juke.Target({ executes: async () => { const folders = [ - ...Juke.glob("_maps/map_files/**/modular_pieces/*.dmm"), + ...Juke.glob("_maps/outpost/**/*.dmm"), ...Juke.glob("_maps/RandomRuins/**/*.dmm"), - ...Juke.glob("_maps/RandomZLevels/**/*.dmm"), ...Juke.glob("_maps/shuttles/**/*.dmm"), ...Juke.glob("_maps/templates/**/*.dmm"), ]; @@ -81,7 +80,7 @@ export const DmTarget = new Juke.Target({ get(DefineParameter).includes("ALL_MAPS") && DmMapsIncludeTarget, ], inputs: [ - "_maps/map_files/generic/**", + "_maps/map_files/**", "code/**", "html/**", "icons/**", diff --git a/tools/merge-upstream-pull-request.sh b/tools/merge-upstream-pull-request.sh index 5ec04fce74ea..9f809c47217d 100644 --- a/tools/merge-upstream-pull-request.sh +++ b/tools/merge-upstream-pull-request.sh @@ -82,11 +82,11 @@ if echo "$CHERRY_PICK_OUTPUT" | grep -i 'error: mainline was specified but commi echo "Commit was a squash, retrying" if containsElement "$MERGE_SHA" "${COMMITS[@]}"; then for commit in $COMMITS; do - echo "Cherry-picking: $commit" - git -c core.editor=true cherry-pick "$commit" - # Add all files onto this branch - git add -A . - git -c core.editor=true cherry-pick --continue + echo "Cherry-picking: $commit" + git -c core.editor=true cherry-pick "$commit" + # Add all files onto this branch + git add -A . + git -c core.editor=true cherry-pick --continue done else echo "Cherry-picking: $MERGE_SHA" diff --git a/tools/tgs_scripts/PreCompile.sh b/tools/tgs_scripts/PreCompile.sh index 2cc52be12741..6e34ab65af6a 100755 --- a/tools/tgs_scripts/PreCompile.sh +++ b/tools/tgs_scripts/PreCompile.sh @@ -60,5 +60,4 @@ cd .. # compile tgui echo "Compiling tgui..." cd "$1" -chmod +x tools/bootstrap/node # Workaround for https://github.com/tgstation/tgstation-server/issues/1167 env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 CBT_BUILD_MODE="TGS" tools/bootstrap/node tools/build/build.js