diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 015319b1d4d..c1a1fbf54d5 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1,591 +1,1604 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, /turf/closed/mineral/volcanic/lava_land_surface, /area/lavaland/surface/outdoors) -"b" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +"ac" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, /area/lavaland/surface/outdoors) -"c" = ( -/turf/closed/wall/mineral/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +"ad" = ( +/obj/structure/stone_tile/block{ + dir = 1 }, -/area/ruin/unpowered) -"d" = ( -/obj/effect/light_emitter, -/mob/living/simple_animal/hostile/spawner/ash_walker, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/structure/stone_tile/cracked{ + dir = 8 }, -/area/ruin/unpowered) -"e" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/human/ash_walker, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ae" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 }, -/area/ruin/unpowered) -"f" = ( -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"af" = ( +/obj/structure/stone_tile/block{ + dir = 1 }, -/area/ruin/unpowered) -"g" = ( -/obj/effect/mob_spawn/human/ash_walker, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ag" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ah" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ai" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"aj" = ( +/obj/structure/stone_tile/slab, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ak" = ( +/turf/closed/indestructible/riveted/boss, +/area/ruin/unpowered/ash_walkers) +"al" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"am" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"an" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ao" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ap" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"aq" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ar" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"as" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/unpowered/ash_walkers) +"at" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"au" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 }, -/area/ruin/unpowered) -"h" = ( -/obj/effect/decal/cleanable/blood, /obj/item/device/flashlight/lantern, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"av" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"aw" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 }, -/area/ruin/unpowered) -"i" = ( /obj/effect/decal/cleanable/blood, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"ax" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/cracked{ + dir = 1 }, -/area/ruin/unpowered) -"j" = ( -/obj/item/weapon/pickaxe, -/obj/item/weapon/pickaxe, -/obj/structure/closet/crate/internals, -/obj/item/weapon/pickaxe, -/obj/item/weapon/pickaxe, -/obj/item/weapon/pickaxe, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"ay" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/item/device/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"az" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"aA" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/item/device/malf_upgrade, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aB" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aC" = ( +/obj/structure/stone_tile/block/cracked, +/obj/item/weapon/storage/toolbox/syndicate, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aD" = ( +/obj/structure/table/optable, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aE" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/closet/crate/medical, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/lizard, +/obj/item/weapon/reagent_containers/blood/lizard, +/obj/item/stack/sheet/cloth/ten, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aF" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"aG" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"aH" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"aI" = ( +/obj/structure/stone_tile/block/cracked, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"aJ" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"aK" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile, +/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"aL" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"aM" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aN" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/item/weapon/weldingtool/experimental, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aO" = ( /obj/item/weapon/storage/box/rxglasses, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aP" = ( +/obj/structure/stone_tile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aQ" = ( +/obj/structure/stone_tile/block{ + dir = 8 }, -/area/ruin/unpowered) -"k" = ( -/obj/effect/mob_spawn/human/corpse/damaged, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/machinery/iv_drip, +/obj/item/weapon/reagent_containers/glass/beaker/waterbottle/large, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aR" = ( +/obj/structure/stone_tile/block{ + dir = 8 }, -/area/ruin/unpowered) -"l" = ( +/obj/structure/stone_tile, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"aS" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"aT" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"aU" = ( +/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"aV" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"aW" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"aX" = ( +/obj/item/seeds/glowshroom, +/obj/item/seeds/glowshroom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"aY" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"aZ" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"ba" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bb" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/cracked, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bc" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bd" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"be" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"bf" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/floor/plating/lava/smooth, +/area/ruin/unpowered/ash_walkers) +"bg" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bh" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bi" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bj" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/item/weapon/storage/bag/plants/portaseeder, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"bk" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/item/stack/marker_beacon/ten, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"bl" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bm" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/item/weapon/construction/rcd/loaded, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"bn" = ( /obj/structure/closet/crate/radiation, /obj/item/device/flashlight/lantern, /obj/item/device/flashlight/lantern, /obj/item/device/flashlight/lantern, /obj/item/device/flashlight/flare, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/structure/stone_tile/block/cracked{ + dir = 8 }, -/area/ruin/unpowered) -"m" = ( -/obj/structure/closet/crate/medical, -/obj/item/device/malf_upgrade, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/structure/stone_tile/cracked{ + dir = 1 }, -/area/ruin/unpowered) -"n" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/weapon/storage/belt, -/obj/item/weapon/scythe, -/obj/item/seeds/glowshroom, -/obj/item/seeds/glowshroom, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/storage/bag/plants/portaseeder, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bo" = ( +/obj/structure/stone_tile/block{ + dir = 8 }, -/area/ruin/unpowered) -"o" = ( -/obj/item/device/flashlight/lantern, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"p" = ( -/obj/item/device/flashlight/seclite, -/obj/item/device/flashlight, -/obj/structure/closet/crate, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"q" = ( -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/seclite, -/obj/item/device/flashlight/seclite, -/obj/item/device/flashlight, -/obj/structure/closet/crate, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"r" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"s" = ( -/obj/item/weapon/twohanded/spear, -/obj/structure/mineral_door/iron, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"t" = ( -/obj/structure/mineral_door/iron, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"u" = ( -/obj/structure/closet/crate/engineering, -/obj/item/weapon/construction/rcd/loaded, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"v" = ( -/obj/structure/closet/crate/medical, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/reagent_containers/blood/random, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"w" = ( -/obj/machinery/the_singularitygen, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"x" = ( -/obj/structure/rack{ - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "minibar_left"; - name = "skeletal minibar" - }, -/obj/item/stack/sheet/cloth/ten, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"y" = ( -/obj/structure/rack{ - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "minibar_right"; - name = "skeletal minibar" - }, -/obj/item/clothing/head/helmet/roman/legionaire, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"z" = ( -/obj/item/weapon/shovel, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"A" = ( -/obj/structure/closet/crate, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/weapon/storage/firstaid/o2, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"B" = ( -/obj/structure/table_frame, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"C" = ( -/obj/structure/table/optable, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"D" = ( -/obj/item/device/flashlight, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"E" = ( -/obj/item/weapon/storage/toolbox/syndicate, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"F" = ( -/obj/structure/closet/crate/miningcar, +/obj/item/weapon/pickaxe, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"G" = ( -/obj/item/weapon/twohanded/spear, -/obj/structure/rack, -/obj/item/weapon/twohanded/spear, -/obj/item/weapon/twohanded/spear, -/obj/item/weapon/twohanded/spear, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +"bp" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 }, -/area/ruin/unpowered) -"H" = ( -/obj/item/weapon/twohanded/spear, -/obj/structure/rack, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/structure/stone_tile{ + dir = 1 }, -/area/ruin/unpowered) -"I" = ( -/obj/structure/mineral_door/iron, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - blocks_air = 1 +/obj/structure/stone_tile{ + dir = 4 }, -/area/ruin/unpowered) -"J" = ( -/turf/closed/wall/mineral/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/item/device/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bq" = ( +/obj/structure/stone_tile/block{ + dir = 1 }, +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"br" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bs" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bt" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/item/device/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bu" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/closed/mineral/volcanic/lava_land_surface, /area/lavaland/surface/outdoors) -"K" = ( -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - planetary_atmos = 1; - initial_gas_mix = "o2=13;n2=24;TEMP=300" +"bv" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 }, +/obj/structure/closet/crate, +/obj/item/device/flashlight/lantern, +/obj/item/device/flashlight/lantern, +/obj/item/device/flashlight/lantern, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bw" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/item/seeds/tower, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"bx" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"by" = ( +/obj/structure/closet/crate, +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked, +/obj/item/device/flashlight/lantern, +/obj/item/device/flashlight/lantern, +/obj/item/device/flashlight/lantern, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"bz" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/machinery/the_singularitygen, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"bA" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"L" = ( +"bB" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bC" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bD" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"bE" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bF" = ( +/obj/structure/stone_tile/slab, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bG" = ( +/turf/closed/indestructible/riveted/boss/see_through, +/area/ruin/unpowered/ash_walkers) +"bH" = ( +/obj/structure/necropolis_gate, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/structure/fans/tiny/invisible, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"bI" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bJ" = ( +/obj/structure/stone_tile/surrounding_tile, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bK" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"bL" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bM" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bN" = ( +/obj/structure/stone_tile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bO" = ( +/obj/structure/stone_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bP" = ( +/obj/structure/stone_tile/block, /obj/item/weapon/twohanded/spear, -/obj/structure/table, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"M" = ( -/obj/item/weapon/pickaxe, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - planetary_atmos = 1; - initial_gas_mix = "o2=13;n2=24;TEMP=300" - }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"N" = ( +"bQ" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bR" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bS" = ( +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bT" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bU" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bV" = ( +/obj/structure/stone_tile/block/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bW" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, /obj/structure/ore_box, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"O" = ( -/obj/item/weapon/reagent_containers/glass/bowl, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +"bX" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 }, -/area/ruin/unpowered) -"P" = ( -/obj/machinery/iv_drip, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bY" = ( +/obj/structure/stone_tile{ + dir = 8 }, -/area/ruin/unpowered) -"Q" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bZ" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 }, -/area/ruin/unpowered) -"R" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth +/obj/structure/stone_tile/cracked{ + dir = 8 }, -/area/ruin/unpowered) +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ca" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cb" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cc" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cd" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ce" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cf" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/closet/crate/internals, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cg" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ch" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ci" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cj" = ( +/obj/effect/mob_spawn/human/corpse/damaged, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ck" = ( +/obj/item/weapon/twohanded/spear, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cl" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/item/weapon/twohanded/spear, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cm" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cn" = ( +/obj/structure/bonfire/dense, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"co" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cp" = ( +/obj/structure/stone_tile/cracked, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"cq" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cr" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cs" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ct" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cu" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cv" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cw" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cx" = ( +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cy" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cz" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/item/weapon/twohanded/spear, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cA" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cB" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cC" = ( +/obj/item/device/flashlight/lantern, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cD" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/item/device/flashlight/lantern, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cE" = ( +/obj/structure/stone_tile/surrounding/cracked, +/obj/effect/baseturf_helper, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/ash_walkers) +"cF" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/weapon/twohanded/spear, +/obj/item/weapon/storage/belt, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"cG" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cH" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cI" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cJ" = ( +/obj/item/weapon/shovel, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cK" = ( +/obj/item/weapon/pickaxe, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cL" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/weapon/twohanded/spear, +/obj/item/weapon/scythe, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/ash_walkers) +"cM" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/weapon/twohanded/spear, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"cN" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/weapon/twohanded/spear, +/obj/item/clothing/head/helmet/roman/legionaire, +/turf/open/indestructible/boss, +/area/ruin/unpowered/ash_walkers) +"cO" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"cP" = ( +/obj/structure/stone_tile/block, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"cQ" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"cR" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"cS" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/mob_spawn/human/corpse/damaged, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) (1,1,1) = {" -a -a -a -a -a -b -b -a -a -a -a -a -b -J -J -b -K -a +aa +aa +aa +aa +ah +ah +ah +ah +ah +ah +ah +aa +aa +ah +ah +ah +ah +aa +aa +aa "} (2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -F -K -K -b -b -b +aa +ah +ah +ah +ah +aL +ah +bi +bu +am +ah +ah +ah +ah +ah +ah +ah +ah +aa +aa "} (3,1,1) = {" -b -a -a -a -a -a -a -a -c -c -c -c -r -r -r -b -b -b +aa +aa +ah +am +as +as +as +as +ak +as +as +ah +cp +bX +bL +bM +cC +ah +ah +aa "} (4,1,1) = {" -a -a -a -a -a -c -c -c -c -u -A -C -G -L -r -K -b -b +aa +aa +ah +an +ak +aA +aM +aX +bj +bv +ak +bK +bM +bM +bN +bM +bY +cG +ah +aa "} (5,1,1) = {" -a -a -c -c -c -c -j -m -r -v -P -R -f -L -r -b -b -b +aa +aa +ah +ah +as +aB +aN +aY +bk +bw +ak +bX +cS +bM +bM +cw +bM +bL +ah +ah "} (6,1,1) = {" -a -a -c -d -e -i -f -n -r -w -f -D -H -H -r -b -b -b +aa +aa +ah +ao +ak +aC +aO +aM +bl +bx +bD +bY +cg +bM +bO +cx +cw +cH +ah +ah "} (7,1,1) = {" -a -a -c -e -h -f -k -f -s -f -f -f -r -r -r -b -K -b +aa +aa +ah +ap +as +aD +aP +aZ +bm +by +ak +bN +cg +cl +cq +bM +cw +cI +ah +ah "} (8,1,1) = {" -a -a -c -f -i -f -f -o -t -f -k -f -I -K -b -b -b -b +aa +aa +ah +ah +as +aE +aQ +ba +bn +bz +ak +bZ +ch +cm +cr +bY +bM +cJ +ah +ah "} (9,1,1) = {" -a -a -c -g -f -O -f -p -r -x -Q -f -r -b -b -K -K -K +aa +ah +ah +ah +as +ak +as +as +as +ak +ak +ca +bV +cn +cs +cy +cq +bM +ah +ah "} (10,1,1) = {" -a -a -c -c -c -c -l -q -r -y -f -f -r -K -b -b -b -b +aa +ai +aq +at +aF +aR +bb +bo +bA +bE +bO +cb +ci +bA +ct +bN +bM +cK +ah +ah "} (11,1,1) = {" -a -a -a -a -a -c -c -c -c -z -B -E -r -M -b -b -b -b +ab +aj +ak +ak +ak +ak +ak +ak +ak +bF +bE +cc +bX +co +bO +bM +cg +ah +ah +aa "} (12,1,1) = {" -a -a -a -a -a -a -a -a -c -c -c -c -r -N -b -K -b -b +ac +ak +ak +ak +ak +ak +ak +ak +ak +ak +bP +bL +bX +bM +bY +bM +ah +ah +ah +aa "} (13,1,1) = {" -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +ad +ak +ak +au +aG +aS +bc +bp +ak +ak +bQ +bM +cj +bL +ah +ah +ah +ah +ah +ah "} (14,1,1) = {" -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a +ae +ak +ak +av +aH +aT +bd +bq +ak +bG +bR +cd +bM +bM +cu +ah +ah +aq +ah +cO +"} +(15,1,1) = {" +ac +ak +ak +aw +aI +aU +be +br +bB +bH +bS +ce +bM +bN +ak +ak +as +ak +ak +ah +"} +(16,1,1) = {" +ac +ak +ak +ax +aJ +aV +bf +bs +ak +bG +bT +cd +bM +bY +as +cz +cD +cL +as +cp +"} +(17,1,1) = {" +af +ak +ak +ay +aK +aW +bg +bt +ak +ak +bU +bM +ck +cb +cv +cA +cE +cM +as +ah +"} +(18,1,1) = {" +ac +ak +ak +ak +ak +ak +ak +ak +ak +ak +bV +bM +bN +ah +as +cB +cF +cN +ak +cP +"} +(19,1,1) = {" +ag +aj +ak +ak +ak +ak +ak +ak +ak +bI +bW +cf +ah +cp +as +as +as +ak +ak +cQ +"} +(20,1,1) = {" +aa +al +ar +az +az +az +bh +az +bC +bJ +ah +ah +ah +al +ah +an +bC +cp +ah +cR "} diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index c856ab165bc..2d500b704c5 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -27,11 +27,12 @@ PROCESSING_SUBSYSTEM_DEF(overlays) processing = SSoverlays.processing /datum/controller/subsystem/processing/overlays/fire(resumed = FALSE, mc_check = TRUE) + var/list/processing = src.processing while(processing.len) var/atom/thing = processing[processing.len] processing.len-- if(thing) - thing.compile_overlays(FALSE) + thing.compile_overlays() if(mc_check) if(MC_TICK_CHECK) break diff --git a/code/game/area/areas/ruins.dm b/code/game/area/areas/ruins.dm index f9d8e4884f7..80129359db7 100644 --- a/code/game/area/areas/ruins.dm +++ b/code/game/area/areas/ruins.dm @@ -272,6 +272,10 @@ power_light = 0 poweralm = 0 +//ash walker nest +/area/ruin/unpowered/ash_walkers + icon_state = "red" + //Ruin of ancient Space Station /area/ruin/ancientstation diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index bd74c6b181a..ca9382be9b3 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -1,58 +1,46 @@ ////Deactivated swarmer shell//// -/obj/item/device/unactivated_swarmer +/obj/item/device/deactivated_swarmer + name = "deactivated swarmer" + desc = "A shell of swarmer that was completely powered down. It can no longer activate itself." + icon = 'icons/mob/swarmer.dmi' + icon_state = "swarmer_unactivated" + origin_tech = "bluespace=4;materials=4;programming=7" + materials = list(MAT_METAL = 10000, MAT_GLASS = 4000) + +/obj/effect/mob_spawn/swarmer name = "unactivated swarmer" desc = "A currently unactivated swarmer. Swarmers can self activate at any time, it would be wise to immediately dispose of this." icon = 'icons/mob/swarmer.dmi' icon_state = "swarmer_unactivated" - origin_tech = "bluespace=4;materials=4;programming=7" - materials = list(MAT_METAL=10000, MAT_GLASS=4000) + density = FALSE + anchored = FALSE + mob_type = /mob/living/simple_animal/hostile/swarmer + mob_name = "a swarmer" + death = FALSE + roundstart = FALSE + flavour_text = {" + You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate. + Clicking on any object will try to consume it, either deconstructing it into its components, destroying it, or integrating any materials it has into you if successful. + Ctrl-Clicking on a mob will attempt to remove it from the area and place it in a safe environment for storage. + Objectives: + 1. Consume resources and replicate until there are no more resources left. + 2. Ensure that this location is fit for invasion at a later date; do not perform actions that would render it dangerous or inhospitable. + 3. Biological resources will be harvested at a later date; do not harm them. + "} -/obj/item/device/unactivated_swarmer/Initialize() - if(!crit_fail) - notify_ghosts("An unactivated swarmer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK) - ..() +/obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user) + to_chat(user, "Picking up the swarmer may cause it to activate. You should be careful about this.") -/obj/item/device/unactivated_swarmer/Topic(href, href_list) - if(href_list["ghostjoin"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - attack_ghost(ghost) - -/obj/item/device/unactivated_swarmer/attackby(obj/item/weapon/W, mob/user, params) - ..() - if(istype(W, /obj/item/weapon/screwdriver) && !crit_fail) +/obj/effect/mob_spawn/swarmer/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/screwdriver) && user.a_intent != INTENT_HARM) user.visible_message("[usr.name] deactivates [src].", "After some fiddling, you find a way to disable [src]'s power source.", "You hear clicking.") - name = "deactivated swarmer" - desc = "A shell of swarmer that was completely powered down. It can no longer activate itself." - crit_fail = 1 - -/obj/item/device/unactivated_swarmer/attack_ghost(mob/user) - if(crit_fail) - to_chat(user, "This swarmer shell is completely depowered. You cannot activate it.") - return - - var/be_swarmer = alert("Become a swarmer? (Warning, You can no longer be cloned!)",,"Yes","No") - if(be_swarmer == "No") - return - if(crit_fail) - to_chat(user, "Swarmer has been depowered.") - return - if(QDELETED(src)) - to_chat(user, "Swarmer has been occupied by someone else.") - return - var/mob/living/simple_animal/hostile/swarmer/S = new /mob/living/simple_animal/hostile/swarmer(get_turf(loc)) - S.key = user.key - qdel(src) - - -/obj/item/device/unactivated_swarmer/deactivated - name = "deactivated swarmer" - desc = "A shell of swarmer that was completely powered down. It can no longer activate itself." - crit_fail = 1 - + new /obj/item/device/deactivated_swarmer(get_turf(src)) + qdel(src) + else + ..() ////The Mob itself//// @@ -103,27 +91,13 @@ light_color = LIGHT_COLOR_CYAN var/resources = 0 //Resource points, generated by consuming metal/glass var/max_resources = 100 - var/login_text_dump = {" - You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate. - Clicking on any object will try to consume it, either deconstructing it into its components, destroying it, or integrating any materials it has into you if successful. - Ctrl-Clicking on a mob will attempt to remove it from the area and place it in a safe environment for storage. - Objectives: - 1. Consume resources and replicate until there are no more resources left. - 2. Ensure that this location is fit for invasion at a later date; do not perform actions that would render it dangerous or inhospitable. - 3. Biological resources will be harvested at a later date; do not harm them. - "} - -/mob/living/simple_animal/hostile/swarmer/Login() - ..() - to_chat(src, login_text_dump) /mob/living/simple_animal/hostile/swarmer/Initialize() - ..() + . = ..() verbs -= /mob/living/verb/pulled var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) - /mob/living/simple_animal/hostile/swarmer/med_hud_set_health() var/image/holder = hud_list[DIAG_HUD] var/icon/I = icon(icon, icon_state, dir) @@ -185,6 +159,13 @@ S.DisIntegrate(src) return TRUE //return TRUE/FALSE whether or not an AI swarmer should try this swarmer_act() again, NOT whether it succeeded. +/obj/effect/mob_spawn/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S.Integrate(src) + return FALSE //would logically be TRUE, but we don't want AI swarmers eating player spawn chances. + +/obj/effect/mob_spawn/swarmer/IntegrateAmount() + return 50 + /turf/closed/indestructible/swarmer_act() return FALSE @@ -196,10 +177,13 @@ /obj/item/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) return S.Integrate(src) -/obj/item/proc/IntegrateAmount() //returns the amount of resources gained when eating this item +/atom/movable/proc/IntegrateAmount() + return 0 + +/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item if(materials[MAT_METAL] || materials[MAT_GLASS]) return 1 - return 0 + return ..() /obj/item/weapon/gun/swarmer_act()//Stops you from eating the entire armory return FALSE @@ -402,12 +386,7 @@ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") return FALSE - -/obj/item/device/unactivated_swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - ..() - return FALSE //would logically be TRUE, but we don't want AI swarmers eating player spawn chances. - -/obj/item/device/unactivated_swarmer/IntegrateAmount() +/obj/item/device/deactivated_swarmer/IntegrateAmount() return 50 /obj/machinery/hydroponics/soil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) @@ -426,7 +405,7 @@ return 0 return new fabrication_object(loc) -/mob/living/simple_animal/hostile/swarmer/proc/Integrate(obj/item/target) +/mob/living/simple_animal/hostile/swarmer/proc/Integrate(atom/movable/target) var/resource_gain = target.IntegrateAmount() if(resources + resource_gain > max_resources) to_chat(src, "We cannot hold more materials!") @@ -447,7 +426,7 @@ qdel(target) return TRUE else - to_chat(src, "\the [target] is incompatible with our internal matter recycler.") + to_chat(src, "[target] is incompatible with our internal matter recycler.") return FALSE @@ -547,22 +526,22 @@ icon_state = "ui_light" layer = MOB_LAYER resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/lon_range = 1 light_color = LIGHT_COLOR_CYAN obj_integrity = 30 max_integrity = 30 - anchored = 1 + anchored = TRUE + var/lon_range = 1 /obj/structure/swarmer/Initialize(mapload) - ..() + . = ..() set_light(lon_range) /obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(loc, 'sound/weapons/egloves.ogg', 80, 1) + playsound(src, 'sound/weapons/egloves.ogg', 80, 1) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) + playsound(src, 'sound/items/welder.ogg', 100, 1) /obj/structure/swarmer/emp_act() qdel(src) @@ -642,7 +621,7 @@ /mob/living/simple_animal/hostile/swarmer/proc/SwarmerTypeToCreate() - return /obj/item/device/unactivated_swarmer + return /obj/effect/mob_spawn/swarmer /mob/living/simple_animal/hostile/swarmer/proc/RepairSelf() diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm index 90e1befd084..acef4ec8ac5 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -9,19 +9,17 @@ /datum/round_event/spawn_swarmer - /datum/round_event/spawn_swarmer/start() if(find_swarmer()) return 0 if(!GLOB.the_gateway) return 0 - new /obj/item/device/unactivated_swarmer(get_turf(GLOB.the_gateway)) + new /obj/effect/mob_spawn/swarmer(get_turf(GLOB.the_gateway)) if(prob(25)) //25% chance to announce it to the crew var/swarmer_report = "[command_name()] High-Priority Update" swarmer_report += "

Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come through." print_command_report(swarmer_report, announce=TRUE) - /datum/round_event/spawn_swarmer/proc/find_swarmer() for(var/mob/living/M in GLOB.mob_list) if(istype(M, /mob/living/simple_animal/hostile/swarmer) && M.client) //If there is a swarmer with an active client, we've found our swarmer diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 6f9be657d4d..76ea3b5fc40 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -143,7 +143,7 @@ glass_cost = 0 cooldownTime = 300 //30 seconds maximum_idle = 0 // Swarmers have no restraint - dispense_type = /obj/item/device/unactivated_swarmer + dispense_type = /obj/effect/mob_spawn/swarmer begin_create_message = "hums softly as an interface appears above it, \ scrolling by at unreadable speed." end_create_message = "materializes a strange shell, which drops to the \ diff --git a/code/game/objects/items/stacks/cash.dm b/code/game/objects/items/stacks/cash.dm index aa07367700b..899381af652 100644 --- a/code/game/objects/items/stacks/cash.dm +++ b/code/game/objects/items/stacks/cash.dm @@ -26,7 +26,7 @@ . = ..() update_desc() -/obj/item/stack/spacecash/use() +/obj/item/stack/spacecash/use(used, transfer = FALSE) . = ..() update_desc() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 499a375c28e..0f72544db31 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -98,9 +98,9 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ /obj/item/stack/sheet/rglass/cyborg/get_amount() return min(round(source.energy / metcost), round(glasource.energy / glacost)) -/obj/item/stack/sheet/rglass/cyborg/use(amount) // Requires special checks, because it uses two storages - source.use_charge(amount * metcost) - glasource.use_charge(amount * glacost) +/obj/item/stack/sheet/rglass/cyborg/use(used, transfer = FALSE) // Requires special checks, because it uses two storages + source.use_charge(used * metcost) + glasource.use_charge(used * glacost) /obj/item/stack/sheet/rglass/cyborg/add(amount) source.add_charge(amount * metcost) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 6a419f58b11..fe6a1df03e7 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -202,7 +202,7 @@ return 0 return 1 -/obj/item/stack/proc/use(var/used) // return 0 = borked; return 1 = had enough +/obj/item/stack/proc/use(used, transfer = FALSE) // return 0 = borked; return 1 = had enough if(zero_amount()) return 0 if (is_cyborg) @@ -242,7 +242,7 @@ if(pulledby) pulledby.start_pulling(S) S.copy_evidences(src) - use(transfer) + use(transfer, TRUE) S.add(transfer) /obj/item/stack/Crossed(obj/o) @@ -291,7 +291,7 @@ user.put_in_hands(F) add_fingerprint(user) F.add_fingerprint(user) - use(amount) + use(amount, TRUE) diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index cfa354c808a..ca5263fddb6 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -14,10 +14,11 @@ max_amount = 25 resistance_flags = FLAMMABLE -/obj/item/stack/wrapping_paper/Destroy() - if(!amount) - new /obj/item/weapon/c_tube(get_turf(src)) - return ..() +/obj/item/stack/wrapping_paper/use(used, transfer) + var/turf/T = get_turf(src) + ..() + if(QDELETED(src) && !transfer) + new /obj/item/weapon/c_tube(T) /* @@ -99,10 +100,11 @@ user.visible_message("[user] wraps [target].") user.log_message("Has used [name] on [target]", INDIVIDUAL_ATTACK_LOG) -/obj/item/stack/packageWrap/Destroy() - if(!amount) - new /obj/item/weapon/c_tube(get_turf(src)) - return ..() +/obj/item/stack/packageWrap/use(used, transfer = FALSE) + var/turf/T = get_turf(src) + ..() + if(QDELETED(src) && !transfer) + new /obj/item/weapon/c_tube(T) /obj/item/weapon/c_tube name = "cardboard tube" diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 5ab632a0385..f6f7c651422 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -44,6 +44,9 @@ baseturf = /turf/open/indestructible/boss initial_gas_mix = LAVALAND_DEFAULT_ATMOS +/turf/open/indestructible/boss/air + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + /turf/open/indestructible/boss/hot icon = 'icons/turf/boss_floors_hot.dmi' baseturf = /turf/open/indestructible/boss/hot diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 9dc7b2a9c5d..86cc490625a 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -14,6 +14,12 @@ var/drop_y = 1 var/drop_z = 1 +/turf/open/chasm/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) + return + +/turf/open/chasm/MakeDry(wet_setting = TURF_WET_WATER) + return + /turf/open/chasm/Entered(atom/movable/AM) START_PROCESSING(SSobj, src) drop_stuff(AM) diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 9f4d26a9527..0219427729c 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -25,6 +25,12 @@ /turf/open/floor/plating/asteroid/burn_tile() return +/turf/open/floor/plating/asteroid/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) + return + +/turf/open/floor/plating/asteroid/MakeDry(wet_setting = TURF_WET_WATER) + return + /turf/open/floor/plating/asteroid/ex_act(severity, target) contents_explosion(severity, target) switch(severity) diff --git a/code/game/turfs/simulated/floor/plating/lava.dm b/code/game/turfs/simulated/floor/plating/lava.dm index a9c46a0e70e..978bedac3b8 100644 --- a/code/game/turfs/simulated/floor/plating/lava.dm +++ b/code/game/turfs/simulated/floor/plating/lava.dm @@ -11,7 +11,13 @@ light_power = 0.75 light_color = LIGHT_COLOR_LAVA -/turf/open/floor/plating/lava/ex_act() +/turf/open/floor/plating/lava/ex_act(severity, target) + contents_explosion(severity, target) + +/turf/open/floor/plating/lava/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) + return + +/turf/open/floor/plating/lava/MakeDry(wet_setting = TURF_WET_WATER) return /turf/open/floor/plating/lava/airless diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm index 51a563918fb..ae0f6fd1e80 100644 --- a/code/modules/cargo/exports/parts.dm +++ b/code/modules/cargo/exports/parts.dm @@ -15,18 +15,7 @@ unit_name = "solar panel control board" export_types = list(/obj/item/weapon/circuitboard/computer/solar_control) - - /datum/export/swarmer cost = 2000 unit_name = "deactivated alien deconstruction drone" - export_types = list(/obj/item/device/unactivated_swarmer) - -/datum/export/swarmer/applies_to(obj/O, contr = 0, emag = 0) - if(!..()) - return FALSE - - var/obj/item/device/unactivated_swarmer/S = O - if(!S.crit_fail) - return FALSE - return TRUE \ No newline at end of file + export_types = list(/obj/item/device/deactivated_swarmer) diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 11176413bb8..8248a8b9b42 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -15,6 +15,9 @@ The base of program_type will always be ignored; only subtypes will be loaded. */ +#define HOLODECK_CD 25 +#define HOLODECK_DMG_CD 500 + /obj/machinery/computer/holodeck name = "holodeck control console" desc = "A computer used to control a nearby holodeck." @@ -26,109 +29,106 @@ var/area/holodeck/last_program var/area/offline_program = /area/holodeck/rec_center/offline - var/list/program_cache = list() - var/list/emag_programs = list() + var/list/program_cache + var/list/emag_programs // Splitting this up allows two holodecks of the same size // to use the same source patterns. Y'know, if you want to. var/holodeck_type = /area/holodeck/rec_center // locate(this) to get the target holodeck var/program_type = /area/holodeck/rec_center // subtypes of this (but not this itself) are loadable programs - // set this if you want it to start with some particular program. - var/init_program = null - // or this to get anything - var/random_program = 0 - - var/active = 0 - var/damaged = 0 + var/active = FALSE + var/damaged = FALSE var/list/spawned = list() var/list/effects = list() - var/last_change = 0 - - + var/current_cd = 0 /obj/machinery/computer/holodeck/Initialize(mapload) ..() return INITIALIZE_HINT_LATELOAD /obj/machinery/computer/holodeck/LateInitialize() - if(ispath(holodeck_type,/area)) - var/list/possible = get_areas(holodeck_type,subtypes = FALSE) - linked = pop(possible) - if(ispath(offline_program,/area)) - var/list/possible = get_areas(offline_program,subtypes = FALSE) - offline_program = pop(possible) - // the following is necessary for power reasons - if(!linked || !offline_program) - log_world("No matching holodeck area found") - qdel(src) - return - var/area/AS = get_area(src) - if(istype(AS,/area/holodeck)) - log_world("### MAPPING ERROR") - log_world("Holodeck computer cannot be in a holodeck.") - log_world("This would cause circular power dependency.") - qdel(src) // todo handle constructed computers - return //l-lewd... - else - linked.linked = src // todo detect multiple/constructed computers + if(ispath(holodeck_type, /area)) + linked = locate(holodeck_type) in GLOB.sortedAreas + if(ispath(offline_program,/area)) + offline_program = locate(offline_program) in GLOB.sortedAreas + // the following is necessary for power reasons + if(!linked || !offline_program) + log_world("No matching holodeck area found") + qdel(src) + return + var/area/AS = get_area(src) + if(istype(AS, /area/holodeck)) + log_world("### MAPPING ERROR") + log_world("Holodeck computer cannot be in a holodeck.") + log_world("This would cause circular power dependency.") + qdel(src) + return + else + linked.linked = src - program_cache = list() - emag_programs = list() - for(var/typekey in subtypesof(program_type)) - var/area/holodeck/A = locate(typekey) - if(!A || A == offline_program) - continue - if(A.contents.len == 0) - continue // not loaded - if(A.restricted) - emag_programs += A - else - program_cache += A - if(typekey == init_program) - load_program(A,force=1) - if(random_program && program_cache.len && init_program == null) - load_program(pick(program_cache),force=1) - else if(!program) - load_program(offline_program) + generate_program_list() + load_program(offline_program, FALSE, FALSE) + +/obj/machinery/computer/holodeck/Destroy() + emergency_shutdown() + if(linked) + linked.linked = null + return ..() /obj/machinery/computer/holodeck/power_change() - ..() + . = ..() toggle_power(!stat) -/obj/machinery/computer/holodeck/proc/toggle_power(toggleOn = 0) - if(active == toggleOn) return +/obj/machinery/computer/holodeck/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "holodeck", name, 400, 500, master_ui, state) + ui.open() - if(toggleOn) - if(last_program && last_program != offline_program) - load_program(last_program, delay = 1) - active = 1 - else - last_program = program - load_program(offline_program,force=1) - active = 0 +/obj/machinery/computer/holodeck/ui_data(mob/user) + var/list/data = list() -/obj/machinery/computer/holodeck/proc/emergency_shutdown() - last_program = program - load_program(offline_program,1) - active = 0 + data["default_programs"] = program_cache + if(emagged) + data["emagged"] = TRUE + data["emag_programs"] = emag_programs + data["program"] = program + data["can_toggle_safety"] = issilicon(user) || IsAdminGhost(user) + + return data + +/obj/machinery/computer/holodeck/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("load_program") + var/program_to_load = text2path(params["type"]) + if(!ispath(program_to_load)) + return FALSE + var/area/A = locate(program_to_load) in GLOB.sortedAreas + if(A) + load_program(A) + if("safety") + emagged = !emagged + if(emagged && program && emag_programs[program.name]) + emergency_shutdown() + nerf(emagged) /obj/machinery/computer/holodeck/process() - if(damaged) - if(prob(10)) - for(var/turf/T in linked) - if(prob(5)) - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, T) - s.start() - return + if(damaged && prob(10)) + for(var/turf/T in linked) + if(prob(5)) + do_sparks(2, 1, T) + return if(!..() || !active) return if(!floorcheck()) emergency_shutdown() - damaged = 1 + damaged = TRUE for(var/mob/M in urange(10,src)) M.show_message("The holodeck overloads!") @@ -144,67 +144,24 @@ for(var/item in spawned) if(!(get_turf(item) in linked)) derez(item, 0) - for(var/obj/effect/holodeck_effect/HE in effects) + for(var/e in effects) + var/obj/effect/holodeck_effect/HE = e HE.tick() active_power_usage = 50 + spawned.len * 3 + effects.len * 5 -/obj/machinery/computer/holodeck/proc/floorcheck() - for(var/turf/T in linked) - if(!T.intact || isspaceturf(T)) - return 0 - return 1 - -/obj/machinery/computer/holodeck/Topic(href, list/href_list) - if(..()) +/obj/machinery/computer/holodeck/emag_act(mob/user) + if(emagged) return - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["loadarea"]) - var/areapath = text2path(href_list["loadarea"]) - if(!ispath(areapath, /area/holodeck)) - return - var/area/holodeck/area = locate(areapath) - if(!istype(area)) - return - if(area == offline_program || (area in program_cache) || (emagged && (area in emag_programs))) - load_program(area) - else if("safety" in href_list) - var/safe = text2num(href_list["safety"]) - if(!issilicon(usr)) - return - emagged = !safe - if(!program) - return - if(safe && (program in emag_programs)) - emergency_shutdown() - nerf(safe) - updateUsrDialog() - -/obj/machinery/computer/holodeck/proc/nerf(active) - for(var/obj/item/I in spawned) - I.damtype = (active? STAMINA : initial(I.damtype) ) - for(var/obj/effect/holodeck_effect/HE in effects) - HE.safety(active) - -/obj/machinery/computer/holodeck/emag_act(mob/user as mob) - if(!emagged) - if(!emag_programs.len) - to_chat(user, "[src] does not seem to have a card swipe port. It must be an inferior model.") - return - playsound(loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - to_chat(user, "You vastly increase projector power and override the safety and security protocols.") - to_chat(user, "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator.") - log_game("[key_name(user)] emagged the Holodeck Control Console") - updateUsrDialog() - nerf(!emagged) - -/obj/machinery/computer/holodeck/Destroy() - if(linked) - emergency_shutdown() - linked.linked = null - return ..() + if(!LAZYLEN(emag_programs)) + to_chat(user, "[src] does not seem to have a card swipe port. It must be an inferior model.") + return + playsound(src, 'sound/effects/sparks4.ogg', 75, 1) + emagged = TRUE + to_chat(user, "You vastly increase projector power and override the safety and security protocols.") + to_chat(user, "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator.") + log_game("[key_name(user)] emagged the Holodeck Control Console") + nerf(!emagged) /obj/machinery/computer/holodeck/emp_act(severity) emergency_shutdown() @@ -216,4 +173,122 @@ /obj/machinery/computer/holodeck/blob_act(obj/structure/blob/B) emergency_shutdown() - return ..() \ No newline at end of file + return ..() + +/obj/machinery/computer/holodeck/proc/generate_program_list() + for(var/typekey in subtypesof(program_type)) + var/area/holodeck/A = locate(typekey) in GLOB.sortedAreas + if(!A || A == offline_program || !A.contents.len) + continue + var/list/info_this = list() + info_this["name"] = A.name + info_this["type"] = A.type + if(A.restricted) + LAZYADD(emag_programs, list(info_this)) + else + LAZYADD(program_cache, list(info_this)) + +/obj/machinery/computer/holodeck/proc/toggle_power(toggleOn = FALSE) + if(active == toggleOn) + return + + if(toggleOn) + if(last_program && last_program != offline_program) + addtimer(CALLBACK(src, .proc/load_program, last_program, TRUE), 25) + active = TRUE + else + last_program = program + load_program(offline_program, TRUE) + active = FALSE + +/obj/machinery/computer/holodeck/proc/emergency_shutdown() + last_program = program + load_program(offline_program, TRUE) + active = FALSE + +/obj/machinery/computer/holodeck/proc/floorcheck() + for(var/turf/T in linked) + if(!T.intact || isspaceturf(T)) + return FALSE + return TRUE + +/obj/machinery/computer/holodeck/proc/nerf(active) + for(var/obj/item/I in spawned) + I.damtype = active ? STAMINA : initial(I.damtype) + for(var/e in effects) + var/obj/effect/holodeck_effect/HE = e + HE.safety(active) + +/obj/machinery/computer/holodeck/proc/load_program(area/A, force = FALSE, add_delay = TRUE) + if(!is_operational()) + A = offline_program + force = TRUE + + if(program == A) + return + if(current_cd > world.time && !force) + say("ERROR. Recalibrating projection apparatus.") + return + if(add_delay) + current_cd = world.time + HOLODECK_CD + if(damaged) + current_cd += HOLODECK_DMG_CD + active = (A != offline_program) + use_power = active + IDLE_POWER_USE + + for(var/e in effects) + var/obj/effect/holodeck_effect/HE = e + HE.deactivate(src) + + for(var/item in spawned) + derez(item, force) + + program = A + // note nerfing does not yet work on guns, should + // should also remove/limit/filter reagents? + // this is an exercise left to others I'm afraid. -Sayu + spawned = A.copy_contents_to(linked, 1, nerf_weapons = !emagged) + for(var/obj/machinery/M in spawned) + M.flags |= NODECONSTRUCT + for(var/obj/structure/S in spawned) + S.flags |= NODECONSTRUCT + effects = list() + + addtimer(CALLBACK(src, .proc/finish_spawn), 30) + +/obj/machinery/computer/holodeck/proc/finish_spawn() + var/list/added = list() + for(var/obj/effect/holodeck_effect/HE in spawned) + effects += HE + spawned -= HE + var/atom/x = HE.activate(src) + if(istype(x) || islist(x)) + spawned += x // holocarp are not forever + added += x + for(var/obj/machinery/M in added) + M.flags |= NODECONSTRUCT + for(var/obj/structure/S in added) + S.flags |= NODECONSTRUCT + +/obj/machinery/computer/holodeck/proc/derez(obj/O, silent = TRUE, forced = FALSE) + // Emagging a machine creates an anomaly in the derez systems. + if(O && emagged && !stat && !forced) + if((ismob(O) || ismob(O.loc)) && prob(50)) + addtimer(CALLBACK(src, .proc/derez, O, silent), 50) // may last a disturbingly long time + return + + spawned -= O + if(!O) + return + var/turf/T = get_turf(O) + for(var/atom/movable/AM in O) // these should be derezed if they were generated + AM.forceMove(T) + if(ismob(AM)) + silent = FALSE // otherwise make sure they are dropped + + if(!silent) + visible_message("[O] fades away!") + qdel(O) + +#undef HOLODECK_CD +#undef HOLODECK_DMG_CD diff --git a/code/modules/holodeck/computer_funcs.dm b/code/modules/holodeck/computer_funcs.dm deleted file mode 100644 index 7adabe3b515..00000000000 --- a/code/modules/holodeck/computer_funcs.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/machinery/computer/holodeck/attack_hand(var/mob/user as mob) - user.set_machine(src) - - var/dat = "

Current Loaded Programs

" - dat += "Power Off
" - for(var/area/A in program_cache) - dat += "[A.name]
" - if(emagged && emag_programs.len) - dat += "SUPERVISOR ACCESS - SAFETY PROTOCOLS DISABLED - CAUTION: EMITTER ANOMALY
" - for(var/area/A in emag_programs) - dat += "[A.name]
" - - var/datum/browser/popup = new(user, "computer", name, 400, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/holodeck/attack_ai(var/mob/user as mob) - var/dat = "

Current Loaded Programs

" - - dat += "Power Off
" - for(var/area/A in program_cache) - dat += "[A.name]
" - - if(emag_programs.len) - dat += "
" - if(emagged) - dat += "Safety protocol: Offline Engage
" - for(var/area/A in emag_programs) - dat += "[A.name]
" - else - dat += "Safety protocol: Online Disengage
" - - var/datum/browser/popup = new(user, "computer", name, 400, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - - -/obj/machinery/computer/holodeck/proc/load_program(var/area/A, var/force = 0, var/delay = 0) - if(stat) - A = offline_program - force = 1 - delay = 0 - if(program == A) - return - if(world.time < (last_change + 25 + (damaged?500:0)) && !force) - if(delay) - sleep(25) - else - if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve - return - if(get_dist(usr,src) <= 3) - to_chat(usr, "ERROR. Recalibrating projection apparatus.") - return - - last_change = world.time - active = (A != offline_program) - use_power = active ? ACTIVE_POWER_USE : IDLE_POWER_USE - - for(var/obj/effect/holodeck_effect/HE in effects) - HE.deactivate(src) - - for(var/item in spawned) - derez(item, forced=force) - - program = A - // note nerfing does not yet work on guns, should - // should also remove/limit/filter reagents? - // this is an exercise left to others I'm afraid. -Sayu - spawned = A.copy_contents_to(linked, 1, nerf_weapons = !emagged) - for(var/obj/machinery/M in spawned) - M.flags |= NODECONSTRUCT - for(var/obj/structure/S in spawned) - S.flags |= NODECONSTRUCT - effects = list() - - spawn(30) - var/list/added = list() - for(var/obj/effect/holodeck_effect/HE in spawned) - effects += HE - spawned -= HE - var/atom/x = HE.activate(src) - if(istype(x) || islist(x)) - spawned += x // holocarp are not forever - added += x - for(var/obj/machinery/M in added) - M.flags |= NODECONSTRUCT - for(var/obj/structure/S in added) - S.flags |= NODECONSTRUCT - -/obj/machinery/computer/holodeck/proc/derez(var/obj/obj, var/silent = 1, var/forced = 0) - // Emagging a machine creates an anomaly in the derez systems. - if(obj && src.emagged && !src.stat && !forced) - if((ismob(obj) || ismob(obj.loc)) && prob(50)) - spawn(50) .(obj,silent) // may last a disturbingly long time - return - spawned.Remove(obj) - - if(!obj) - return - var/turf/T = get_turf(obj) - for(var/atom/movable/AM in obj.contents) // these should be derezed if they were generated - AM.loc = T - if(ismob(AM)) - silent = FALSE // otherwise make sure they are dropped - - if(!silent) - visible_message("The [obj.name] fades away!") - qdel(obj) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index a38e0f88a4e..0b3c7169c84 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -106,6 +106,7 @@ desc = "For grilling, broiling, charring, smoking, heating, roasting, toasting, simmering, searing, melting, and occasionally burning things." icon = 'icons/obj/hydroponics/equipment.dmi' icon_state = "bonfire" + light_color = LIGHT_COLOR_FIRE density = FALSE anchored = TRUE buckle_lying = 0 @@ -113,6 +114,16 @@ var/grill = FALSE var/fire_stack_strength = 5 +/obj/structure/bonfire/dense + density = TRUE + +/obj/structure/bonfire/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + if(mover.throwing) + return TRUE + return ..() + /obj/structure/bonfire/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/rods) && !can_buckle && !grill) var/obj/item/stack/rods/R = W @@ -130,8 +141,7 @@ R.use(1) grill = TRUE to_chat(user, "You add a grill to \the [src].") - var/mutable_appearance/grill_overlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_grill") - overlays += grill_overlay + add_overlay("bonfire_grill") else return ..() if(W.is_hot()) @@ -160,6 +170,8 @@ var/obj/item/weapon/grown/log/L = new /obj/item/weapon/grown/log(src.loc) L.pixel_x += rand(1,4) L.pixel_y += rand(1,4) + if(can_buckle || grill) + new /obj/item/stack/rods(loc, 1) qdel(src) return ..() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0374e1076ea..ad860f1f20f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -66,7 +66,7 @@ else if(eye_blurry) //blurry eyes heal slowly adjust_blurriness(-1) - if (getBrainLoss() >= 60 && stat != DEAD) + if (getBrainLoss() >= 60 && stat == CONSCIOUS) if(prob(3)) if(prob(25)) emote("drool") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index bb9ba3553ff..b67fa8bb52a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -97,7 +97,6 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa desc = "Transmited over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom" invisibility = 100 - //SWARMER AI //AI versions of the swarmer mini-antag //This is an Abstract Base, it re-enables AI, but does not give the swarmer any goals/targets @@ -107,7 +106,6 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa weather_immunities = list("ash") //wouldn't be fun otherwise AIStatus = AI_ON - /mob/living/simple_animal/hostile/swarmer/ai/Initialize() . = ..() ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity @@ -262,16 +260,6 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa check_friendly_fire = TRUE //you're supposed to protect the resource swarmers, you poop retreat_distance = 3 minimum_distance = 3 - login_text_dump = {" - You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate. - Clicking on any object will try to consume it, either deconstructing it into its components, destroying it, or integrating any materials it has into you if successful. - Ctrl-Clicking on a mob will attempt to remove it from the area and place it in a safe environment for storage. - Objectives: - 1. Defend Resource Swarmers while they consume resources and replicate until there are no more resources left. - 2. Ensure that this location is fit for invasion at a later date; do not perform actions that would render it dangerous or inhospitable. - 3. Biological resources should not be harmed if possible, violent force can be applied should they fail to keep away. - "} - /mob/living/simple_animal/hostile/swarmer/ai/ranged_combat/Aggro() ..() @@ -285,16 +273,6 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa health = 60 maxHealth = 60 ranged = FALSE - login_text_dump = {" - You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate. - Clicking on any object will try to consume it, either deconstructing it into its components, destroying it, or integrating any materials it has into you if successful. - Ctrl-Clicking on a mob will attempt to remove it from the area and place it in a safe environment for storage. - Objectives: - 1. Defend Resource Swarmers while they consume resources and replicate until there are no more resources left. - 2. Ensure that this location is fit for invasion at a later date; do not perform actions that would render it dangerous or inhospitable. - 3. Biological resources should not be harmed if possible, violent force can be applied should they fail to keep away. - "} - /mob/living/simple_animal/hostile/swarmer/ai/melee_combat/Aggro() ..() diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm index def9423807f..94cc061103c 100644 --- a/code/modules/mob/living/simple_animal/spawner.dm +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -30,10 +30,9 @@ spawned_mobs = null return ..() -/mob/living/simple_animal/hostile/spawner/Life() - ..() - if(!stat) - spawn_mob() +/mob/living/simple_animal/hostile/spawner/handle_automated_action() + . = ..() + spawn_mob() /mob/living/simple_animal/hostile/spawner/proc/spawn_mob() if(spawned_mobs.len >= max_mobs) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 215a02db341..346044bb4f3 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -22,7 +22,7 @@ /obj/item/weapon/gun/ballistic/update_icon() ..() if(current_skin) - icon_state = "[current_skin][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""]" + icon_state = "[unique_reskin[current_skin]][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""]" else icon_state = "[initial(icon_state)][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""]" diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index bf712d8e9e1..75307d6cc7f 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -5,7 +5,7 @@ icon_state = "deliverycloset" density = 1 mouse_drag_pointer = MOUSE_ACTIVE_POINTER - var/giftwrapped = 0 + var/giftwrapped = FALSE var/sortTag = 0 /obj/structure/bigDelivery/attack_hand(mob/user) @@ -44,7 +44,7 @@ var/obj/item/stack/wrapping_paper/WP = W if(WP.use(3)) user.visible_message("[user] wraps the package in festive paper!") - giftwrapped = 1 + giftwrapped = TRUE icon_state = "gift[icon_state]" else to_chat(user, "You need more paper!") 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 aab6403acd1..5e0f43c7a98 100644 --- a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -1,49 +1,39 @@ #define ASH_WALKER_SPAWN_THRESHOLD 2 //The ash walker den consumes corpses or unconscious mobs to create ash walker eggs. For more info on those, check ghost_role_spawners.dm -/mob/living/simple_animal/hostile/spawner/ash_walker - name = "ash walker nest" - desc = "A nest built around a necropolis tendril. The eggs seem to grow unnaturally fast..." - icon = 'icons/mob/nest.dmi' +/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker + name = "necropolis tendril nest" + desc = "A vile tendril of corruption. It's surrounded by a nest of rapidly growing eggs..." icon_state = "ash_walker_nest" icon_living = "ash_walker_nest" + icon_dead = "ash_walker_nest" faction = list("ashwalker") health = 200 maxHealth = 200 - loot = list(/obj/effect/gibspawner, /obj/item/device/assembly/signaler/anomaly) - del_on_death = 1 - var/meat_counter - var/obj/effect/light_emitter/tendril/emitted_light - -/mob/living/simple_animal/hostile/spawner/ash_walker/Initialize() - . = ..() - emitted_light = new(loc) + loot = list(/obj/effect/collapse) + var/meat_counter = 6 -/mob/living/simple_animal/hostile/spawner/ash_walker/Destroy() - QDEL_NULL(emitted_light) - . = ..() +/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker/death() + new /obj/item/device/assembly/signaler/anomaly (get_step(loc, pick(GLOB.alldirs))) + return ..() -/mob/living/simple_animal/hostile/spawner/ash_walker/Life() - ..() - if(!stat) - consume() - spawn_mob() +/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker/handle_automated_action() + consume() + return ..() -/mob/living/simple_animal/hostile/spawner/ash_walker/proc/consume() - for(var/mob/living/H in view(src,1)) //Only for corpse right next to/on same tile +/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker/proc/consume() + for(var/mob/living/H in view(src, 1)) //Only for corpse right next to/on same tile if(H.stat) visible_message("Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.") playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, 1) if(ismegafauna(H)) meat_counter += 20 else - meat_counter ++ - for(var/obj/item/W in H) - H.dropItemToGround(W) + meat_counter++ H.gib() adjustHealth(-maxHealth * 0.05)//restores 5% hp of tendril -/mob/living/simple_animal/hostile/spawner/ash_walker/spawn_mob() +/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker/spawn_mob() if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD) - new /obj/effect/mob_spawn/human/ash_walker(get_step(src.loc, SOUTH)) + new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs))) visible_message("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!") meat_counter -= ASH_WALKER_SPAWN_THRESHOLD diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index b648e4555af..30331b3daa3 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -4,6 +4,7 @@ desc = "A massive stone gateway." icon = 'icons/effects/96x96.dmi' icon_state = "gate_full" + flags = ON_BORDER appearance_flags = 0 layer = TABLE_LAYER anchored = TRUE @@ -24,6 +25,7 @@ /obj/structure/necropolis_gate/Initialize() . = ..() + setDir(SOUTH) var/turf/sight_blocker_turf = get_turf(src) if(sight_blocker_distance) for(var/i in 1 to sight_blocker_distance) @@ -32,6 +34,7 @@ sight_blocker_turf = get_step(sight_blocker_turf, NORTH) if(sight_blocker_turf) sight_blocker = new (sight_blocker_turf) //we need to block sight in a different spot than most things do + sight_blocker.pixel_y = initial(sight_blocker.pixel_y) - (32 * sight_blocker_distance) icon_state = "gate_bottom" top_overlay = mutable_appearance('icons/effects/96x96.dmi', "gate_top") top_overlay.layer = EDGED_TURF_LAYER @@ -53,9 +56,22 @@ /obj/structure/necropolis_gate/singularity_pull() return 0 +/obj/structure/necropolis_gate/CanPass(atom/movable/mover, turf/target, height=0) + if(get_dir(loc, target) == dir) + return !density + return 1 + +/obj/structure/necropolis_gate/CheckExit(atom/movable/O, target) + if(get_dir(O.loc, target) == dir) + return !density + return 1 + /obj/structure/opacity_blocker - icon = 'icons/effects/effects.dmi' - icon_state = "nothing" + icon = 'icons/effects/96x96.dmi' + icon_state = "gate_blocker" + layer = EDGED_TURF_LAYER + pixel_x = -32 + pixel_y = -32 mouse_opacity = 0 opacity = TRUE @@ -94,6 +110,7 @@ break sight_blocker_turf = get_step(sight_blocker_turf, NORTH) if(sight_blocker_turf) + sight_blocker.pixel_y = initial(sight_blocker.pixel_y) - (32 * sight_blocker_distance) sight_blocker.forceMove(sight_blocker_turf) sleep(2.5) playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 30, TRUE, frequency = 15000) diff --git a/html/changelogs/AutoChangeLog-pr-28886.yml b/html/changelogs/AutoChangeLog-pr-28886.yml new file mode 100644 index 00000000000..d69ca43648b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-28886.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - tweak: "Rethemes the ash walker nest to match the Necropolis." diff --git a/html/changelogs/AutoChangeLog-pr-28949.yml b/html/changelogs/AutoChangeLog-pr-28949.yml new file mode 100644 index 00000000000..affa2f169a9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-28949.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "brain damage should no longer attempt to emote/say things while unconcious" diff --git a/html/changelogs/AutoChangeLog-pr-28951.yml b/html/changelogs/AutoChangeLog-pr-28951.yml new file mode 100644 index 00000000000..4a4599a2aa5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-28951.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - balance: "Chasms, asteroid turfs, basalt, and lava can no longer be made wet." diff --git a/html/changelogs/AutoChangeLog-pr-28962.yml b/html/changelogs/AutoChangeLog-pr-28962.yml new file mode 100644 index 00000000000..5f8b310ff70 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-28962.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Reskinnable guns no longer become invisible after firing a single shot." diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index d5b9ca5bd7a..2956a61a5fc 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 751d44cf9c9..89ddec150f4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1339,7 +1339,6 @@ #include "code\modules\holiday\holidays.dm" #include "code\modules\holodeck\area_copy.dm" #include "code\modules\holodeck\computer.dm" -#include "code\modules\holodeck\computer_funcs.dm" #include "code\modules\holodeck\holo_effect.dm" #include "code\modules\holodeck\items.dm" #include "code\modules\holodeck\mobs.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 02b0900b65c..a51e96a3958 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,16 +1,16 @@ -require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(i)return i(o,!0);var p=Error("Cannot find module '"+o+"'");throw p.code="MODULE_NOT_FOUND",p}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?p[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-u,o-s),d=1;for(s>u&&u+l>s&&(d=-1,u+=l-1,s+=l-1);l-- >0;)u in n?n[s]=n[u]:delete n[s],s+=d,u+=d;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,u=r(s>1?o[1]:void 0,n),p=s>2?o[2]:void 0,c=void 0===p?n:r(p,n);c>u;)e[u++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,u=a(e),p=r(u.length),c=i(o,p);if(t&&n!=n){for(;p>c;)if(s=u[c++],s!=s)return!0}else for(;p>c;c++)if((t||c in u)&&u[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,u=3==t,p=4==t,c=6==t,l=5==t||c;return function(d,f,h){for(var m,v,g=i(d),b=r(g),y=a(f,h,3),x=o(b.length),_=0,w=e?s(d,x):n?s(d,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],v=y(m,_,g),t))if(e)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(p)return!1;return c?-1:u||p?p:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),u=t(18),p=t(27),c=t(42),l=t(44),d=t(82)("id"),f=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!f(t,d)){if(!g(t))return"F";if(!e)return"E";r(t,d,++y)}return"O"+t[d]},_=function(t,e){var n,a=x(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&p(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return u(this[b])}}),c},def:function(t,e,n){var a,r,i=_(t,e);return i?i.v=n:(t._l=i={i:r=x(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:_,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),u=t(27),p=t(8),c=t(30),l=t(82)("weak"),d=Object.isExtensible||o,f=p(5),h=p(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return f(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&u(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return d(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),u=t(69),p=t(38),c=t(24),l=t(43),d=t(66);e.exports=function(t,e,n,f,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!p(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,E=k[b](m?{}:-0,1)!=k,S=c(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){u(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else g=f.getConstructor(e,t,h,b),o(g.prototype,n);return d(g,t),x[t]=g,r(r.G+r.W+r.F*(g!=v),x),m||f.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),u="prototype",p=function(t,e,n){var c,l,d,f,h=t&p.F,m=t&p.G,v=t&p.S,g=t&p.P,b=t&p.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[u],x=m?r:r[e]||(r[e]={}),_=x[u]||(x[u]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,d=(l?y:n)[c],f=b&&l?s(d,a):g&&"function"==typeof d?s(Function.call,d):d,y&&!l&&o(y,c,d),x[c]!=d&&i(x,c,f),g&&_[c]!=d&&(_[c]=d)};a.core=r,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,e.exports=p},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var u=s(t),p=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,u,p)),a(RegExp.prototype,u,2==e?function(t,e){return p.call(t,this,e)}:function(t){return p.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),u=t(84);e.exports=function(t,e,n,p){var c,l,d,f=u(t),h=a(n,p,e?2:1),m=0;if("function"!=typeof f)throw TypeError(t+" is not iterable!");if(i(f))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(d=f.call(t);!(l=d.next()).done;)r(d,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),u=t(45),p=t(41),c=t(66),l=t(46).getProto,d=t(83)("iterator"),f=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,x,_){p(n,e,b);var w,k,E=function(t){if(!f&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",C=y==v,P=!1,A=t.prototype,O=A[d]||A[h]||y&&A[y],T=O||E(y);if(O){var M=l(T.call(new t));c(M,S,!0),!a&&s(A,h)&&o(M,d,g),C&&O.name!==v&&(P=!0,T=function(){return O.call(this)})}if(a&&!_||!f&&!P&&A[d]||o(A,d,T),u[e]=T,u[S]=g,y)if(w={values:C?T:E(v),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(f||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,u=0;s>u;)if(i[n=o[u++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,u=o.MutationObserver||o.WebKitMutationObserver,p=o.process,c=o.Promise,l="process"==t(11)(p),d=function(){var t,e,n;for(l&&(t=p.domain)&&(p.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){p.nextTick(d)};else if(u){var f=1,h=document.createTextNode("");new u(d).observe(h,{characterData:!0}),i=function(){h.data=f=-f}}else i=c&&c.resolve?function(){c.resolve().then(d)}:function(){s.call(o,d)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&p.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,u=1,p=a.getKeys,c=a.getSymbols,l=a.isEnum;s>u;)for(var d,f=i(o[u++]),h=c?p(f).concat(c(f)):p(f),m=h.length,v=0;m>v;)l.call(f,d=h[v++])&&(n[d]=f[d]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),u=s.length,p=0,c=[];u>p;)i.call(o,n=s[p++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var a,i=this,o=arguments,p=o.length,c=0,l=0;if(!u&&!p)return r(t,n,i);if(a=n.slice(),u)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;p>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",u=a(n),p=s.length;return 0>u||u>=p?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===p||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",u=s.length,p=void 0===n?" ":n+"",c=a(e);if(u>=c)return s;""==p&&(p=" ");var l=c-u,d=r.call(p,Math.ceil(l/p.length));return d.length>l&&(d=d.slice(0,l)),o?d+s:s+d}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",p=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(d),a(a.P+a.F*i(function(){return!!o[t]()||u[t]()!=u}),"String",n)},d=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(p,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),u=t(32),p=t(20),c=t(29),l=c.process,d=c.setImmediate,f=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};d&&f||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},f=function(t){delete v[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in p("script")?function(t){u.appendChild(p("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:d,clear:f}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),u=t(32),p=t(20),c=t(30),l=t(11),d=t(33),f=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),C=Object.prototype,P=Array.prototype,A=P.slice,O=P.join,T=r.setDesc,M=r.getDesc,R=r.setDescs,j={};o||(a=!f(function(){return 7!=T(p("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return M(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=R=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:R});var L="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),D=L.concat("length","prototype"),N=L.length,F=function(){var t,e=p("iframe"),n=N,a=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("