diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index c1b7a2d5e1..0fa3f315be 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -20,7 +20,7 @@ jobs: run: | ~/dmdoc touch dmdoc/.nojekyll - echo codedocs.tgstation13.org > dmdoc/CNAME + echo codedocs.citadel-station.net > dmdoc/CNAME - name: Deploy uses: JamesIves/github-pages-deploy-action@3.7.1 with: diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 7e9ce9db68..0d1e740d13 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -158,8 +158,8 @@ /area/ruin/powered/beach) "aF" = ( /obj/machinery/vending/boozeomat{ - set_obj_flags = "EMAGGED"; - req_access_txt = "0" + req_access_txt = "0"; + set_obj_flags = "EMAGGED" }, /turf/open/floor/wood, /area/ruin/powered/beach) @@ -547,8 +547,8 @@ "rV" = ( /obj/effect/turf_decal/sand, /obj/item/reagent_containers/food/drinks/beer/light{ - pixel_y = -3; - pixel_x = -9 + pixel_x = -9; + pixel_y = -3 }, /turf/open/floor/plating, /area/ruin/powered/beach) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 39ecc54ec7..2d13b2743e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -326,8 +326,8 @@ /area/ruin/unpowered/ash_walkers) "aO" = ( /obj/structure/stone_tile/surrounding/cracked{ - icon_state = "cracked_surrounding1"; - dir = 1 + dir = 1; + icon_state = "cracked_surrounding1" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) @@ -510,9 +510,7 @@ /obj/structure/stone_tile/cracked{ dir = 4 }, -/obj/item/construction/rcd/loaded/upgraded{ - - }, +/obj/item/construction/rcd/loaded/upgraded, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "bn" = ( @@ -1019,8 +1017,8 @@ /area/ruin/unpowered/ash_walkers) "cA" = ( /obj/structure/stone_tile/slab/cracked{ - icon_state = "cracked_slab1"; - dir = 4 + dir = 4; + icon_state = "cracked_slab1" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm index a14a8d3a13..c509fe8080 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -13,10 +13,10 @@ /area/ruin/unpowered) "f" = ( /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_x = -28; - broken = 1 + pixel_x = -28 }, /obj/item/clothing/suit/hooded/bloated_human, /obj/effect/decal/cleanable/blood, @@ -25,10 +25,10 @@ "g" = ( /obj/effect/decal/cleanable/blood/tracks, /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_x = -28; - broken = 1 + pixel_x = -28 }, /turf/open/floor/plating, /area/ruin/unpowered) @@ -45,10 +45,10 @@ /area/ruin/unpowered) "k" = ( /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_x = 28; - broken = 1 + pixel_x = 28 }, /turf/open/floor/plating{ icon_state = "panelscorched" @@ -56,19 +56,19 @@ /area/ruin/unpowered) "l" = ( /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_x = 28; - broken = 1 + pixel_x = 28 }, /turf/open/floor/plating, /area/ruin/unpowered) "m" = ( /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_x = -28; - broken = 1 + pixel_x = -28 }, /turf/open/floor/plating, /area/ruin/unpowered) @@ -79,10 +79,10 @@ /area/ruin/unpowered) "o" = ( /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_x = -28; - broken = 1 + pixel_x = -28 }, /turf/open/floor/plating{ icon_state = "platingdmg1" @@ -98,10 +98,10 @@ /area/lavaland/surface/outdoors) "T" = ( /obj/structure/mirror{ + broken = 1; desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; - pixel_y = 28; - broken = 1 + pixel_y = 28 }, /obj/item/kitchen/knife/envy, /turf/open/floor/plating, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 39ad846170..4e16f9a174 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -137,8 +137,8 @@ /area/ruin/powered) "D" = ( /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 1 + dir = 1; + icon_state = "blood1" }, /obj/machinery/door/airlock/survival_pod/glass, /obj/structure/fans/tiny, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm index aa56cce5ca..3576cab5c7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @@ -641,4 +641,4 @@ a a a a -"} \ No newline at end of file +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm index 7ea0145f94..47896ec886 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm @@ -87,8 +87,8 @@ /obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/blood/drip, /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 1 + dir = 1; + icon_state = "blood1" }, /turf/open/floor/pod/dark, /area/ruin/powered) @@ -106,24 +106,24 @@ /area/lavaland/surface/outdoors) "t" = ( /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 1 + dir = 1; + icon_state = "blood1" }, /obj/machinery/door/airlock/survival_pod/glass, /turf/open/floor/pod/dark, /area/ruin/powered) "u" = ( /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 8 + dir = 8; + icon_state = "blood1" }, /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "v" = ( /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 8 + dir = 8; + icon_state = "blood1" }, /obj/effect/decal/cleanable/blood/footprints{ icon_state = "blood1" @@ -139,8 +139,8 @@ "x" = ( /obj/effect/decal/cleanable/blood/drip, /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 1 + dir = 1; + icon_state = "blood1" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) @@ -149,15 +149,15 @@ pixel_y = 32 }, /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 8 + dir = 8; + icon_state = "blood1" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "z" = ( /obj/effect/decal/cleanable/blood/footprints{ - icon_state = "blood1"; - dir = 8 + dir = 8; + icon_state = "blood1" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm index ac1d1ca4d8..948ff7ebc8 100644 --- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm @@ -2268,9 +2268,9 @@ "hF" = ( /obj/structure/table, /obj/machinery/computer/pod/old{ + id = "derelict_gun"; name = "ProComp IIe"; - pixel_y = 7; - id = "derelict_gun" + pixel_y = 7 }, /turf/open/floor/plasteel/chapel, /area/ruin/space/derelict/medical/chapel) diff --git a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm index b553bb5c97..c12458ed16 100644 --- a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm +++ b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm @@ -66,8 +66,8 @@ /area/ruin/space/has_grav/powered/advancedlab) "n" = ( /obj/structure/chair/comfy/beige{ - icon_state = "comfychair"; - dir = 8 + dir = 8; + icon_state = "comfychair" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/advancedlab) @@ -85,10 +85,10 @@ }, /obj/structure/table/glass, /obj/item/paper{ + info = "As of yet, our experiments have seen a fair bit of success. Unfortunately, our business partners have stopped funding us as they realised they utterly hate each other. To whoever finds this place, they are yours. Use them how you will. I leave you with the next generation of greytiding."; name = "Note to finder"; pixel_x = -1; - pixel_y = 3; - info = "As of yet, our experiments have seen a fair bit of success. Unfortunately, our business partners have stopped funding us as they realised they utterly hate each other. To whoever finds this place, they are yours. Use them how you will. I leave you with the next generation of greytiding." + pixel_y = 3 }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/advancedlab) @@ -112,8 +112,8 @@ /area/ruin/space/has_grav/powered/advancedlab) "s" = ( /obj/structure/chair/comfy/beige{ - icon_state = "comfychair"; - dir = 1 + dir = 1; + icon_state = "comfychair" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/advancedlab) @@ -123,8 +123,8 @@ /area/ruin/space/has_grav/powered/advancedlab) "u" = ( /obj/machinery/light/small{ - icon_state = "bulb"; - dir = 4 + dir = 4; + icon_state = "bulb" }, /obj/structure/closet, /obj/item/clothing/suit/hooded/wintercoat/miner, @@ -132,8 +132,8 @@ /obj/item/clothing/under/pants/classicjeans, /obj/item/clothing/neck/scarf, /obj/item/clothing/neck/stripedgreenscarf, -/obj/item/toy/tennis/rainbow, -/obj/item/toy/tennis, +/obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow, +/obj/item/toy/fluff/tennis_poly, /obj/item/clothing/suit/hooded/wintercoat/miner, /obj/item/clothing/shoes/sneakers/brown, /obj/item/clothing/under/pants/classicjeans, @@ -161,8 +161,8 @@ /area/ruin/space/has_grav/powered/advancedlab) "y" = ( /obj/machinery/light/small{ - icon_state = "bulb"; - dir = 1 + dir = 1; + icon_state = "bulb" }, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/advancedlab) @@ -268,8 +268,8 @@ /area/ruin/space/has_grav/powered/advancedlab) "R" = ( /obj/machinery/light/small{ - icon_state = "bulb"; - dir = 1 + dir = 1; + icon_state = "bulb" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/advancedlab) diff --git a/_maps/RandomRuins/SpaceRuins/bigape.dmm b/_maps/RandomRuins/SpaceRuins/bigape.dmm index 602f1737e0..93583e8ebf 100644 --- a/_maps/RandomRuins/SpaceRuins/bigape.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigape.dmm @@ -57,8 +57,8 @@ dir = 4 }, /mob/living/simple_animal/hostile/gorilla/familiar{ - icon_state = "crawling"; - dir = 4 + dir = 4; + icon_state = "crawling" }, /turf/open/floor/plating/beach/sand, /area/ruin/powered) diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index 9c273f4d75..c8039c6c3c 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -65,10 +65,10 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "ao" = ( /obj/machinery/power/apc{ - start_charge = 0; dir = 4; name = "Cargo Bay APC"; - pixel_x = 24 + pixel_x = 24; + start_charge = 0 }, /obj/structure/cable{ icon_state = "0-8" @@ -385,9 +385,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 9; icon_state = "trails_1"; - dir = 9 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -398,9 +398,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -415,9 +415,9 @@ pixel_y = 32 }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -428,9 +428,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -479,9 +479,9 @@ /area/ruin/space/has_grav/derelictoutpost/dockedship) "bw" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -598,9 +598,9 @@ }, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 1; icon_state = "trails_1"; - dir = 1 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -755,9 +755,9 @@ /area/ruin/space/has_grav/derelictoutpost) "bU" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plating{ icon_state = "wall_thermite"; @@ -766,17 +766,17 @@ /area/ruin/space/has_grav/derelictoutpost) "bV" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) "bW" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 6; icon_state = "trails_1"; - dir = 6 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -787,9 +787,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 1; icon_state = "trails_1"; - dir = 1 + name = "dried blood trail" }, /obj/machinery/light{ dir = 4 @@ -813,11 +813,11 @@ /area/ruin/space/has_grav/derelictoutpost/powerstorage) "ca" = ( /obj/machinery/power/apc{ - start_charge = 0; dir = 4; name = "Power Storage APC"; pixel_x = 23; - pixel_y = 2 + pixel_y = 2; + start_charge = 0 }, /obj/structure/cable{ icon_state = "0-8" @@ -924,10 +924,10 @@ /area/ruin/space/has_grav/derelictoutpost) "ck" = ( /obj/machinery/power/apc{ - start_charge = 0; dir = 2; name = "Tradepost APC"; - pixel_y = -24 + pixel_y = -24; + start_charge = 0 }, /obj/structure/cable{ icon_state = "0-8" @@ -942,9 +942,9 @@ }, /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 1; icon_state = "trails_1"; - dir = 1 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -1106,9 +1106,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 10; icon_state = "trails_1"; - dir = 10 + name = "dried blood trail" }, /mob/living/simple_animal/hostile/netherworld{ desc = "Awh its so sm-OH GOD WHAT THE FUCK."; @@ -1126,9 +1126,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1139,9 +1139,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1182,9 +1182,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "cK" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 10; icon_state = "trails_1"; - dir = 10 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1198,9 +1198,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "cL" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1268,9 +1268,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 1; icon_state = "trails_1"; - dir = 1 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1297,9 +1297,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "cX" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 1; icon_state = "trails_1"; - dir = 1 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1325,9 +1325,9 @@ }, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 1; icon_state = "trails_1"; - dir = 1 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1366,25 +1366,25 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "dd" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 10; icon_state = "trails_1"; - dir = 10 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargobay) "de" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargobay) "df" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1399,9 +1399,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "dg" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1415,9 +1415,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "dh" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1436,9 +1436,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "di" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" @@ -1499,9 +1499,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1512,9 +1512,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 6; icon_state = "trails_1"; - dir = 6 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1574,9 +1574,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dv" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 9; icon_state = "trails_1"; - dir = 9 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1587,9 +1587,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dw" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1605,9 +1605,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dx" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1618,9 +1618,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dy" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1632,9 +1632,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dz" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" @@ -1648,17 +1648,17 @@ /area/ruin/space/has_grav/derelictoutpost) "dA" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) "dB" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 6; icon_state = "trails_1"; - dir = 6 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1706,9 +1706,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dF" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 10; icon_state = "trails_1"; - dir = 10 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1719,9 +1719,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dG" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1732,9 +1732,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dH" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 6; icon_state = "trails_1"; - dir = 6 + name = "dried blood trail" }, /obj/structure/alien/weeds{ color = "#4BAE56"; @@ -1779,9 +1779,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargobay) @@ -1795,9 +1795,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 9; icon_state = "trails_1"; - dir = 9 + name = "dried blood trail" }, /obj/structure/cable{ icon_state = "1-2" @@ -1806,9 +1806,9 @@ /area/ruin/space/has_grav/derelictoutpost) "dN" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /turf/open/floor/plating{ icon_state = "wall_thermite"; @@ -1823,9 +1823,9 @@ name = "gelatinous membrane" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /turf/open/floor/plating{ icon_state = "wall_thermite"; @@ -1840,9 +1840,9 @@ }, /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -1853,9 +1853,9 @@ name = "gelatinous floor" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 6; icon_state = "trails_1"; - dir = 6 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) @@ -2021,10 +2021,10 @@ /area/ruin/space/has_grav/derelictoutpost/cargostorage) "el" = ( /obj/machinery/power/apc{ - start_charge = 0; dir = 4; name = "Cargo Storage APC"; - pixel_x = 24 + pixel_x = 24; + start_charge = 0 }, /obj/structure/cable{ icon_state = "0-2" @@ -2099,35 +2099,35 @@ /area/ruin/space/has_grav/derelictoutpost) "ew" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargostorage) "ex" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargostorage) "ey" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 8; icon_state = "trails_1"; - dir = 8 + name = "dried blood trail" }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargostorage) "ez" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 5; icon_state = "trails_1"; - dir = 5 + name = "dried blood trail" }, /obj/structure/cable{ icon_state = "1-2" @@ -2188,9 +2188,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargostorage) "eI" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 10; icon_state = "trails_1"; - dir = 10 + name = "dried blood trail" }, /obj/structure/cable{ icon_state = "1-4" @@ -2204,9 +2204,9 @@ name = "pried-open airlock" }, /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 4; icon_state = "trails_1"; - dir = 4 + name = "dried blood trail" }, /obj/structure/cable{ icon_state = "4-8" @@ -2215,9 +2215,9 @@ /area/ruin/space/has_grav/derelictoutpost/cargostorage) "eK" = ( /obj/effect/decal/cleanable/blood/old{ - name = "dried blood trail"; + dir = 6; icon_state = "trails_1"; - dir = 6 + name = "dried blood trail" }, /obj/structure/cable{ icon_state = "1-8" diff --git a/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm b/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm index 1f258fad77..e9167a6a25 100644 --- a/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm +++ b/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm @@ -287,9 +287,9 @@ /area/space/nearstation) "M" = ( /obj/structure/fluff/broken_flooring{ - name = "broken plating"; + dir = 8; icon_state = "plating"; - dir = 8 + name = "broken plating" }, /turf/template_noop, /area/space/nearstation) diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index beb93b319e..337cb150f8 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -16,8 +16,8 @@ "ag" = ( /obj/machinery/porta_turret{ dir = 8; - set_obj_flags = "EMAGGED"; - installation = /obj/item/gun/energy/lasercannon + installation = /obj/item/gun/energy/lasercannon; + set_obj_flags = "EMAGGED" }, /turf/open/floor/engine, /area/awaymission/BMPship/Aft) @@ -2110,8 +2110,8 @@ "gl" = ( /obj/machinery/porta_turret{ dir = 8; - set_obj_flags = "EMAGGED"; - installation = /obj/item/gun/energy/lasercannon + installation = /obj/item/gun/energy/lasercannon; + set_obj_flags = "EMAGGED" }, /turf/open/floor/engine, /area/awaymission/BMPship/Fore) diff --git a/_maps/RandomRuins/SpaceRuins/derelict6.dmm b/_maps/RandomRuins/SpaceRuins/derelict6.dmm index 12d3733dc4..0a53b517d6 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict6.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict6.dmm @@ -5,8 +5,8 @@ "ab" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - icon_state = "singular"; - dir = 1 + dir = 1; + icon_state = "singular" }, /turf/template_noop, /area/space/nearstation) @@ -27,8 +27,8 @@ /area/space/nearstation) "af" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 8 + dir = 8; + icon_state = "pile" }, /turf/template_noop, /area/template_noop) @@ -45,8 +45,8 @@ /area/ruin/unpowered) "aj" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 4 + dir = 4; + icon_state = "pile" }, /turf/template_noop, /area/template_noop) @@ -58,8 +58,8 @@ /area/ruin/unpowered) "al" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "singular"; - dir = 4 + dir = 4; + icon_state = "singular" }, /obj/structure/lattice, /turf/template_noop, @@ -133,17 +133,17 @@ /area/ruin/unpowered) "az" = ( /obj/structure/fluff/broken_flooring{ - name = "broken plating"; + dir = 8; icon_state = "plating"; - dir = 8 + name = "broken plating" }, /obj/structure/lattice, /turf/template_noop, /area/ruin/unpowered) "aA" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 1 + dir = 1; + icon_state = "pile" }, /turf/template_noop, /area/template_noop) @@ -405,8 +405,8 @@ /area/ruin/unpowered) "bt" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "side"; - dir = 1 + dir = 1; + icon_state = "side" }, /obj/structure/lattice, /turf/template_noop, @@ -424,34 +424,34 @@ "bw" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - name = "broken plating"; + dir = 1; icon_state = "plating"; - dir = 1 + name = "broken plating" }, /turf/template_noop, /area/ruin/unpowered) "bx" = ( /obj/structure/fluff/broken_flooring{ - name = "broken plating"; + dir = 4; icon_state = "plating"; - dir = 4 + name = "broken plating" }, /obj/structure/lattice, /turf/template_noop, /area/ruin/unpowered) "by" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 4 + dir = 4; + icon_state = "pile" }, /turf/open/floor/plasteel/airless, /area/ruin/unpowered) "bz" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - name = "broken plating"; + dir = 4; icon_state = "plating"; - dir = 4 + name = "broken plating" }, /turf/template_noop, /area/ruin/unpowered) @@ -464,38 +464,38 @@ "bC" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - icon_state = "corner"; - dir = 1 + dir = 1; + icon_state = "corner" }, /turf/template_noop, /area/ruin/unpowered) "bD" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "singular"; - dir = 4 + dir = 4; + icon_state = "singular" }, /turf/open/floor/plasteel/airless, /area/ruin/unpowered) "bE" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - icon_state = "corner"; - dir = 8 + dir = 8; + icon_state = "corner" }, /turf/template_noop, /area/ruin/unpowered) "bF" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - icon_state = "side"; - dir = 4 + dir = 4; + icon_state = "side" }, /turf/template_noop, /area/ruin/unpowered) "bG" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "singular"; - dir = 4 + dir = 4; + icon_state = "singular" }, /turf/template_noop, /area/template_noop) @@ -510,9 +510,9 @@ "bI" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - name = "broken plating"; + dir = 8; icon_state = "plating"; - dir = 8 + name = "broken plating" }, /turf/template_noop, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 43aea1761a..808d239127 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -149,8 +149,8 @@ /area/ruin/space/has_grav/ancientstation/hivebot) "aF" = ( /obj/structure/shuttle/engine/large{ - icon_state = "large_engine"; - dir = 4 + dir = 4; + icon_state = "large_engine" }, /turf/closed/wall, /area/ruin/space/has_grav/ancientstation/hivebot) diff --git a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm index aebbdec92a..a0fc5fa8a7 100644 --- a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm +++ b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm @@ -54,15 +54,15 @@ /area/ruin/powered) "m" = ( /obj/structure/chair/old{ - icon_state = "chairold"; - dir = 1 + dir = 1; + icon_state = "chairold" }, /turf/open/floor/oldshuttle, /area/ruin/powered) "n" = ( /obj/structure/chair/old{ - icon_state = "chairold"; - dir = 1 + dir = 1; + icon_state = "chairold" }, /obj/item/crowbar/large{ desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big. It feels oddly heavy.."; @@ -73,8 +73,8 @@ /area/ruin/powered) "o" = ( /obj/structure/chair/old{ - icon_state = "chairold"; - dir = 1 + dir = 1; + icon_state = "chairold" }, /mob/living/simple_animal/hostile/retaliate/spaceman, /turf/open/floor/oldshuttle, diff --git a/_maps/RandomRuins/SpaceRuins/skelter.dmm b/_maps/RandomRuins/SpaceRuins/skelter.dmm index 77837392e4..e0de896480 100644 --- a/_maps/RandomRuins/SpaceRuins/skelter.dmm +++ b/_maps/RandomRuins/SpaceRuins/skelter.dmm @@ -13,8 +13,8 @@ "ad" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ - icon_state = "plating"; - dir = 4 + dir = 4; + icon_state = "plating" }, /turf/open/space/basic, /area/space/nearstation) @@ -45,8 +45,8 @@ /area/ruin/space/has_grav/skelter/crew) "am" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 6 + dir = 6; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "0-2" @@ -62,8 +62,8 @@ /obj/structure/bed, /obj/item/bedsheet/blue, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/crew) @@ -71,8 +71,8 @@ /obj/structure/bed, /obj/item/bedsheet/black, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/crew) @@ -80,8 +80,8 @@ /obj/structure/bed, /obj/item/bedsheet, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/crew) @@ -89,8 +89,8 @@ /obj/structure/bed, /obj/item/bedsheet/yellow, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/crew) @@ -98,8 +98,8 @@ /obj/structure/bed, /obj/item/bedsheet/brown, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 8 + dir = 8; + icon_state = "scrub_map_on-2" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/crew) @@ -133,8 +133,8 @@ /area/ruin/space/has_grav/skelter/crew) "ay" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 8 + dir = 8; + icon_state = "pile" }, /turf/template_noop, /area/template_noop) @@ -193,8 +193,8 @@ /area/ruin/space/has_grav/skelter/engine/upper) "aG" = ( /obj/machinery/light{ - icon_state = "tube"; - dir = 1 + dir = 1; + icon_state = "tube" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -202,8 +202,8 @@ /area/ruin/space/has_grav/skelter/engine/upper) "aH" = ( /obj/structure/shuttle/engine/large{ - icon_state = "large_engine"; - dir = 8 + dir = 8; + icon_state = "large_engine" }, /turf/open/space/basic, /area/space) @@ -237,8 +237,8 @@ /area/ruin/space/has_grav/skelter/engine/upper) "aN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 6 + dir = 6; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ @@ -250,8 +250,8 @@ /area/ruin/space/has_grav/skelter/engine/upper) "aO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ @@ -263,13 +263,13 @@ /area/ruin/space/has_grav/skelter/engine/upper) "aP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/corner{ - icon_state = "warninglinecorner"; - dir = 1 + dir = 1; + icon_state = "warninglinecorner" }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -284,8 +284,8 @@ "aQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -299,16 +299,16 @@ /area/ruin/space/has_grav/skelter/engine/upper) "aR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) @@ -331,36 +331,36 @@ icon_state = "1-2" }, /obj/machinery/light{ - icon_state = "tube"; - dir = 8 + dir = 8; + icon_state = "tube" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) "aV" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) "aW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/light{ - icon_state = "tube"; - dir = 1 + dir = 1; + icon_state = "tube" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) @@ -370,12 +370,12 @@ /area/crew_quarters/cafeteria) "aY" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -388,8 +388,8 @@ /area/space/nearstation) "ba" = ( /obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 4 + dir = 4; + icon_state = "pile" }, /turf/template_noop, /area/template_noop) @@ -398,8 +398,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /obj/machinery/camera{ c_tag = "North Hall"; @@ -416,15 +416,15 @@ /area/crew_quarters/cafeteria) "bd" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) @@ -434,8 +434,8 @@ /area/ruin/unpowered/no_grav) "bf" = ( /obj/structure/chair{ - icon_state = "chair"; - dir = 1 + dir = 1; + icon_state = "chair" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -444,8 +444,8 @@ /area/crew_quarters/cafeteria) "bh" = ( /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 1 + dir = 1; + icon_state = "railing" }, /obj/structure/shuttle/engine/heater{ dir = 8 @@ -455,8 +455,8 @@ "bi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 1 + dir = 1; + icon_state = "railing" }, /obj/structure/shuttle/engine/heater{ dir = 8 @@ -465,8 +465,8 @@ /area/ruin/space/has_grav/skelter/engine/upper) "bj" = ( /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 5 + dir = 5; + icon_state = "railing" }, /turf/open/floor/plating, /area/ruin/space/has_grav/skelter/engine/upper) @@ -502,12 +502,12 @@ /area/ruin/space/has_grav/skelter/engine/upper) "bn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) @@ -516,8 +516,8 @@ /area/ruin/space/has_grav/skelter/crew) "bp" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) @@ -540,15 +540,15 @@ }, /obj/effect/turf_decal/trimline/blue/corner, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) "bt" = ( /obj/item/chair{ - icon_state = "chair_toppled"; - dir = 1 + dir = 1; + icon_state = "chair_toppled" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -568,12 +568,12 @@ /area/crew_quarters/cafeteria) "bw" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/blue/corner{ - icon_state = "trimline_corner"; - dir = 8 + dir = 8; + icon_state = "trimline_corner" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/crew) @@ -596,8 +596,8 @@ /area/crew_quarters/cafeteria) "bA" = ( /obj/item/chair{ - icon_state = "chair_toppled"; - dir = 1 + dir = 1; + icon_state = "chair_toppled" }, /turf/template_noop, /area/template_noop) @@ -609,8 +609,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -624,8 +624,8 @@ /area/ruin/space/has_grav/skelter/engine/upper) "bD" = ( /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 6 + dir = 6; + icon_state = "railing" }, /turf/open/floor/plating, /area/ruin/space/has_grav/skelter/engine/upper) @@ -664,8 +664,8 @@ "bJ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/blue/filled/end{ - icon_state = "trimline_end_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_end_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/medical{ @@ -687,12 +687,12 @@ /area/ruin/space/has_grav/skelter) "bN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 4 + dir = 4; + icon_state = "scrub_map_on-2" }, /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -700,12 +700,12 @@ /area/ruin/space/has_grav/skelter/engine/upper) "bO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 4 + dir = 4; + icon_state = "manifold-2" }, /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -716,8 +716,8 @@ dir = 6 }, /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /obj/structure/cable/yellow{ icon_state = "2-4" @@ -728,12 +728,12 @@ /area/ruin/space/has_grav/skelter/engine/upper) "bQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/stripes/corner{ - icon_state = "warninglinecorner"; - dir = 4 + dir = 4; + icon_state = "warninglinecorner" }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -771,16 +771,16 @@ /area/ruin/space/has_grav/skelter/med) "bV" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/blue/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/med) @@ -788,8 +788,8 @@ /obj/structure/bed, /obj/item/bedsheet/blue, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 8 + dir = 8; + icon_state = "scrub_map_on-2" }, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/skelter/med) @@ -868,8 +868,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -880,8 +880,8 @@ /area/ruin/space/has_grav/skelter/sec) "ck" = ( /obj/structure/chair/office/dark{ - icon_state = "officechair_dark"; - dir = 1 + dir = 1; + icon_state = "officechair_dark" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/sec) @@ -907,12 +907,12 @@ /area/crew_quarters/cafeteria) "co" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/blue/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/med) @@ -950,8 +950,8 @@ "cv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 8 + dir = 8; + icon_state = "trimline" }, /obj/structure/cable/yellow{ icon_state = "0-2" @@ -965,8 +965,8 @@ /area/ruin/space/has_grav/skelter/nav) "cw" = ( /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 4 + dir = 4; + icon_state = "trimline" }, /turf/open/floor/mineral/titanium, /area/ruin/space/has_grav/skelter/nav) @@ -984,8 +984,8 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -999,8 +999,8 @@ "cC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -1012,8 +1012,8 @@ icon_state = "1-2" }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -1028,8 +1028,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -1038,8 +1038,8 @@ /area/ruin/space/has_grav/skelter/sec) "cG" = ( /obj/machinery/light/broken{ - icon_state = "tube-broken"; - dir = 4 + dir = 4; + icon_state = "tube-broken" }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1048,8 +1048,8 @@ /area/ruin/space/has_grav/skelter/sec) "cH" = ( /obj/machinery/light{ - icon_state = "tube"; - dir = 8 + dir = 8; + icon_state = "tube" }, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/skelter/med) @@ -1069,8 +1069,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plating/airless{ icon_state = "platingdmg2" @@ -1078,8 +1078,8 @@ /area/crew_quarters/cafeteria) "cL" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /obj/machinery/light/small{ dir = 4 @@ -1104,33 +1104,33 @@ /area/ruin/space/has_grav/skelter/forehall) "cN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "cO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "cP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "cQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) @@ -1139,8 +1139,8 @@ /area/ruin/space/has_grav/skelter/forehall) "cS" = ( /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 8 + dir = 8; + icon_state = "trimline" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ @@ -1150,8 +1150,8 @@ /area/ruin/space/has_grav/skelter/nav) "cT" = ( /obj/structure/chair/comfy/shuttle{ - icon_state = "shuttle_chair"; - dir = 1 + dir = 1; + icon_state = "shuttle_chair" }, /turf/open/floor/mineral/titanium/blue, /area/ruin/space/has_grav/skelter/nav) @@ -1170,8 +1170,8 @@ /area/ruin/space/has_grav/skelter/engine) "cX" = ( /obj/machinery/light/broken{ - icon_state = "tube-broken"; - dir = 8 + dir = 8; + icon_state = "tube-broken" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ @@ -1208,16 +1208,16 @@ /area/ruin/space/has_grav/skelter/med) "dd" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ - icon_state = "connector_map-2"; - dir = 4 + dir = 4; + icon_state = "connector_map-2" }, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/ruin/space/has_grav/skelter/oxy) "de" = ( /obj/machinery/atmospherics/components/binary/valve{ - icon_state = "mvalve_map-2"; - dir = 4 + dir = 4; + icon_state = "mvalve_map-2" }, /turf/open/floor/plating, /area/ruin/space/has_grav/skelter/oxy) @@ -1259,8 +1259,8 @@ dir = 4 }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/light, /obj/structure/cable/yellow{ @@ -1270,8 +1270,8 @@ /area/ruin/space/has_grav/skelter/forehall) "dk" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1293,8 +1293,8 @@ dir = 4 }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1310,8 +1310,8 @@ dir = 4 }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1336,8 +1336,8 @@ dir = 4 }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1349,12 +1349,12 @@ /area/ruin/space/has_grav/skelter/nav) "dq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -1363,26 +1363,26 @@ /area/ruin/space/has_grav/skelter/nav) "dr" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/nav) "ds" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 5 + dir = 5; + icon_state = "trimline_fill" }, /obj/structure/chair/comfy/shuttle{ - icon_state = "shuttle_chair"; - dir = 4 + dir = 4; + icon_state = "shuttle_chair" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/nav) "dt" = ( /obj/machinery/computer{ - icon_state = "computer"; - dir = 8 + dir = 8; + icon_state = "computer" }, /turf/open/floor/mineral/titanium/blue, /area/ruin/space/has_grav/skelter/nav) @@ -1394,8 +1394,8 @@ /area/ruin/space/has_grav/skelter/engine) "dv" = ( /obj/effect/turf_decal/trimline/purple/line{ - icon_state = "trimline"; - dir = 5 + dir = 5; + icon_state = "trimline" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/engine) @@ -1426,8 +1426,8 @@ icon_state = "4-8" }, /obj/effect/turf_decal/trimline/purple/corner{ - icon_state = "trimline_corner"; - dir = 8 + dir = 8; + icon_state = "trimline_corner" }, /obj/machinery/camera{ c_tag = "Reactor Hall"; @@ -1490,8 +1490,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -1507,8 +1507,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/airless/cafeteria, @@ -1516,8 +1516,8 @@ "dH" = ( /obj/machinery/clonepod, /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/med) @@ -1526,8 +1526,8 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /obj/item/paper/fluff/ruins/skelter/cloner, /turf/open/floor/plasteel, @@ -1535,8 +1535,8 @@ "dJ" = ( /obj/machinery/dna_scannernew, /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/med) @@ -1589,8 +1589,8 @@ "dT" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/item/stack/cable_coil/cut/yellow, /turf/template_noop, @@ -1606,8 +1606,8 @@ /area/ruin/space/has_grav/skelter/forehall) "dW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -1621,15 +1621,15 @@ /area/ruin/space/has_grav/skelter/forehall) "dY" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 8 + dir = 8; + icon_state = "manifold-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "dZ" = ( /obj/effect/decal/cleanable/glass{ - icon_state = "tiny"; - dir = 8 + dir = 8; + icon_state = "tiny" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, @@ -1656,20 +1656,20 @@ /area/crew_quarters/cafeteria) "ed" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "ee" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/door/airlock/maintenance/external{ @@ -1679,8 +1679,8 @@ /area/ruin/space/has_grav/skelter/nav) "ef" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/plasteel, @@ -1691,8 +1691,8 @@ /area/ruin/space/has_grav/skelter/nav) "eh" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 6 + dir = 6; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/nav) @@ -1709,8 +1709,8 @@ /area/ruin/space/has_grav/skelter/engine) "ek" = ( /obj/effect/turf_decal/trimline/purple/corner{ - icon_state = "trimline_corner"; - dir = 4 + dir = 4; + icon_state = "trimline_corner" }, /obj/effect/turf_decal/trimline/purple/corner, /obj/structure/cable{ @@ -1721,21 +1721,21 @@ "el" = ( /obj/structure/table, /obj/machinery/atmospherics/components/unary/vent_scrubber{ - icon_state = "scrub_map-2"; - dir = 4 + dir = 4; + icon_state = "scrub_map-2" }, /obj/item/trash/plate, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) "em" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/purple/line, /obj/effect/turf_decal/trimline/purple/line{ - icon_state = "trimline"; - dir = 1 + dir = 1; + icon_state = "trimline" }, /obj/structure/cable{ icon_state = "4-8" @@ -1754,13 +1754,13 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/purple/line, /obj/effect/turf_decal/trimline/purple/line{ - icon_state = "trimline"; - dir = 1 + dir = 1; + icon_state = "trimline" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/engine) @@ -1770,28 +1770,28 @@ /area/crew_quarters/cafeteria) "eq" = ( /obj/structure/chair{ - icon_state = "chair"; - dir = 8 + dir = 8; + icon_state = "chair" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) "er" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 4 + dir = 4; + icon_state = "manifold-2" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) "es" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable{ icon_state = "4-8" @@ -1800,8 +1800,8 @@ name = "Reactor" }, /obj/effect/turf_decal/trimline/purple/end{ - icon_state = "trimline_end"; - dir = 4 + dir = 4; + icon_state = "trimline_end" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/engine) @@ -1811,8 +1811,8 @@ icon_state = "4-8" }, /obj/effect/turf_decal/trimline/purple/line{ - icon_state = "trimline"; - dir = 8 + dir = 8; + icon_state = "trimline" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -1820,12 +1820,12 @@ /area/ruin/space/has_grav/skelter/afthall) "eu" = ( /obj/effect/turf_decal/trimline/green/line{ - icon_state = "trimline"; - dir = 4 + dir = 4; + icon_state = "trimline" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -1844,8 +1844,8 @@ name = "Security" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable{ icon_state = "4-8" @@ -1857,23 +1857,23 @@ icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/sec) "ex" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/sec) "ey" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/sec) @@ -1899,8 +1899,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "eC" = ( /obj/machinery/light{ - icon_state = "tube"; - dir = 8 + dir = 8; + icon_state = "tube" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/admin) @@ -1928,8 +1928,8 @@ /area/ruin/space/has_grav/skelter/admin) "eG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ - icon_state = "vent_map_on-2"; - dir = 4 + dir = 4; + icon_state = "vent_map_on-2" }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1938,8 +1938,8 @@ /area/ruin/space/has_grav/skelter/forehall) "eH" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) @@ -1948,19 +1948,19 @@ dir = 4 }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/light{ - icon_state = "tube"; - dir = 1 + dir = 1; + icon_state = "tube" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "eJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) @@ -1970,8 +1970,8 @@ /area/ruin/space/has_grav/skelter/forehall) "eL" = ( /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 8 + dir = 8; + icon_state = "trimline" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ @@ -1990,8 +1990,8 @@ /area/ruin/space/has_grav/skelter/engine) "eO" = ( /obj/effect/turf_decal/trimline/purple/line{ - icon_state = "trimline"; - dir = 6 + dir = 6; + icon_state = "trimline" }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/skelter/engine) @@ -2023,8 +2023,8 @@ dir = 4 }, /obj/effect/turf_decal/trimline/purple/corner{ - icon_state = "trimline_corner"; - dir = 1 + dir = 1; + icon_state = "trimline_corner" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -2032,8 +2032,8 @@ /area/ruin/space/has_grav/skelter/afthall) "eT" = ( /obj/effect/turf_decal/trimline/green/corner{ - icon_state = "trimline_corner"; - dir = 4 + dir = 4; + icon_state = "trimline_corner" }, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable/yellow{ @@ -2078,8 +2078,8 @@ /area/ruin/space/has_grav/skelter/sec) "eX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2195,8 +2195,8 @@ dir = 4 }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/camera{ c_tag = "Central Hall"; @@ -2216,8 +2216,8 @@ /area/ruin/space/has_grav/skelter/admin) "fk" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2229,8 +2229,8 @@ dir = 4 }, /obj/structure/chair/comfy/brown{ - icon_state = "comfychair"; - dir = 1 + dir = 1; + icon_state = "comfychair" }, /turf/open/floor/carpet, /area/ruin/space/has_grav/skelter/admin) @@ -2239,22 +2239,22 @@ dir = 4 }, /obj/structure/chair/comfy/brown{ - icon_state = "comfychair"; - dir = 4 + dir = 4; + icon_state = "comfychair" }, /turf/open/floor/carpet, /area/ruin/space/has_grav/skelter/admin) "fn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /turf/open/floor/carpet, /area/ruin/space/has_grav/skelter/admin) "fo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 6 + dir = 6; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2263,27 +2263,27 @@ /area/ruin/space/has_grav/skelter/forehall) "fp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "fq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/forehall) "fr" = ( /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 8 + dir = 8; + icon_state = "trimline" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 1 + dir = 1; + icon_state = "scrub_map_on-2" }, /turf/open/floor/mineral/titanium, /area/ruin/space/has_grav/skelter/nav) @@ -2327,8 +2327,8 @@ icon_state = "1-2" }, /obj/machinery/light{ - icon_state = "tube"; - dir = 8 + dir = 8; + icon_state = "tube" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/sec) @@ -2357,19 +2357,19 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 8 + dir = 8; + icon_state = "manifold-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/admin) "fC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2379,8 +2379,8 @@ "fD" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/door/airlock/security{ name = "Administration" @@ -2392,8 +2392,8 @@ /area/ruin/space/has_grav/skelter/admin) "fE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ @@ -2611,16 +2611,16 @@ /area/ruin/space/has_grav/skelter/engine/lower) "gj" = ( /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /obj/structure/window/reinforced/spawner/north, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/sec) "gk" = ( /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /obj/machinery/door/window/northleft{ name = "Armory" @@ -2649,8 +2649,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "go" = ( /obj/machinery/power/terminal{ - icon_state = "term"; - dir = 8 + dir = 8; + icon_state = "term" }, /obj/structure/cable, /obj/structure/cable{ @@ -2762,8 +2762,8 @@ "gD" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 4 + dir = 4; + icon_state = "scrub_map_on-2" }, /obj/structure/cable/yellow{ icon_state = "0-4" @@ -2780,8 +2780,8 @@ "gE" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 4 + dir = 4; + icon_state = "manifold-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2792,8 +2792,8 @@ /area/ruin/space/has_grav/skelter/engine/lower) "gF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ @@ -2811,8 +2811,8 @@ dir = 10 }, /obj/effect/turf_decal/stripes/corner{ - icon_state = "warninglinecorner"; - dir = 1 + dir = 1; + icon_state = "warninglinecorner" }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -2877,15 +2877,15 @@ "gQ" = ( /obj/machinery/shieldgen, /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 6 + dir = 6; + icon_state = "railing" }, /turf/open/floor/circuit, /area/ruin/space/has_grav/skelter/shields) "gR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 8 + dir = 8; + icon_state = "manifold-2" }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2897,8 +2897,8 @@ /area/ruin/space/has_grav/skelter/shields) "gS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ @@ -2908,8 +2908,8 @@ /area/ruin/space/has_grav/skelter/shields) "gT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 8 + dir = 8; + icon_state = "scrub_map_on-2" }, /obj/structure/cable/yellow{ icon_state = "0-8" @@ -2933,8 +2933,8 @@ /area/ruin/space/has_grav/skelter/forehall) "gW" = ( /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 1 + dir = 1; + icon_state = "railing" }, /obj/structure/shuttle/engine/heater{ dir = 8 @@ -2944,8 +2944,8 @@ "gX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 1 + dir = 1; + icon_state = "railing" }, /obj/structure/shuttle/engine/heater{ dir = 8 @@ -2954,8 +2954,8 @@ /area/ruin/space/has_grav/skelter/engine/lower) "gY" = ( /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 5 + dir = 5; + icon_state = "railing" }, /turf/open/floor/plating, /area/ruin/space/has_grav/skelter/engine/lower) @@ -2992,8 +2992,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "hc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 6 + dir = 6; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3002,8 +3002,8 @@ /area/ruin/space/has_grav/skelter/storage) "hd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/bot, /obj/structure/ore_box, @@ -3011,8 +3011,8 @@ /area/ruin/space/has_grav/skelter/storage) "he" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, @@ -3024,8 +3024,8 @@ /area/ruin/space/has_grav/skelter/storage) "hg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "1-4" @@ -3038,8 +3038,8 @@ name = "Storage" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3048,12 +3048,12 @@ /area/ruin/space/has_grav/skelter/storage) "hi" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3062,12 +3062,12 @@ /area/ruin/space/has_grav/skelter/comms) "hj" = ( /obj/machinery/light{ - icon_state = "tube"; - dir = 1 + dir = 1; + icon_state = "tube" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3076,8 +3076,8 @@ /area/ruin/space/has_grav/skelter/comms) "hk" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 1 + dir = 1; + icon_state = "manifold-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3092,12 +3092,12 @@ /area/ruin/space/has_grav/skelter/comms) "hl" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3107,8 +3107,8 @@ "hm" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3120,8 +3120,8 @@ /area/ruin/space/has_grav/skelter/shields) "hn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3130,8 +3130,8 @@ /area/ruin/space/has_grav/skelter/shields) "ho" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -3145,8 +3145,8 @@ "hq" = ( /obj/machinery/shieldgen, /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 9 + dir = 9; + icon_state = "railing" }, /turf/open/floor/circuit/airless, /area/ruin/space/has_grav/skelter/shields) @@ -3167,8 +3167,8 @@ /area/ruin/space/has_grav/skelter/engine/lower) "ht" = ( /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 6 + dir = 6; + icon_state = "railing" }, /turf/open/floor/plating, /area/ruin/space/has_grav/skelter/engine/lower) @@ -3195,12 +3195,12 @@ /area/ruin/space/has_grav/skelter/engine/lower) "hw" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/engine/powerstorage) @@ -3271,8 +3271,8 @@ /area/ruin/space/has_grav/skelter/storage) "hH" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -3293,12 +3293,12 @@ /area/ruin/space/has_grav/skelter/sec) "hK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/blue/corner{ - icon_state = "trimline_corner"; - dir = 8 + dir = 8; + icon_state = "trimline_corner" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -3330,15 +3330,15 @@ "hO" = ( /obj/machinery/shieldgen, /obj/structure/fluff/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /turf/open/floor/circuit/airless, /area/ruin/space/has_grav/skelter/shields) "hP" = ( /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -3346,12 +3346,12 @@ /area/ruin/space/has_grav/skelter/engine/lower) "hQ" = ( /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -3359,12 +3359,12 @@ /area/ruin/space/has_grav/skelter/engine/lower) "hR" = ( /obj/effect/turf_decal/stripes/line{ - icon_state = "warningline"; - dir = 1 + dir = 1; + icon_state = "warningline" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel{ icon_state = "sepia" @@ -3372,12 +3372,12 @@ /area/ruin/space/has_grav/skelter/engine/lower) "hS" = ( /obj/effect/turf_decal/stripes/corner{ - icon_state = "warninglinecorner"; - dir = 4 + dir = 4; + icon_state = "warninglinecorner" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ @@ -3390,8 +3390,8 @@ "hT" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3405,26 +3405,26 @@ /area/ruin/space/has_grav/skelter/engine/lower) "hU" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/turf_decal/trimline/red/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/engine/powerstorage) "hV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -3471,8 +3471,8 @@ /area/ruin/space/has_grav/skelter/storage) "ic" = ( /obj/machinery/light{ - icon_state = "tube"; - dir = 8 + dir = 8; + icon_state = "tube" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -3485,8 +3485,8 @@ name = "dust" }, /obj/machinery/light/broken{ - icon_state = "tube-broken"; - dir = 4 + dir = 4; + icon_state = "tube-broken" }, /turf/open/floor/plasteel/airless/cafeteria, /area/crew_quarters/cafeteria) @@ -3560,8 +3560,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "ir" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - icon_state = "manifold-2"; - dir = 8 + dir = 8; + icon_state = "manifold-2" }, /obj/machinery/firealarm{ dir = 8; @@ -3574,8 +3574,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "is" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3584,20 +3584,20 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "it" = ( /obj/effect/turf_decal/trimline/yellow/corner{ - icon_state = "trimline_corner"; - dir = 4 + dir = 4; + icon_state = "trimline_corner" }, /obj/machinery/light{ - icon_state = "tube"; - dir = 1 + dir = 1; + icon_state = "tube" }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3606,12 +3606,12 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "iu" = ( /obj/effect/turf_decal/trimline/yellow/line{ - icon_state = "trimline"; - dir = 1 + dir = 1; + icon_state = "trimline" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -3626,16 +3626,16 @@ pixel_y = 32 }, /obj/effect/turf_decal/trimline/yellow/corner{ - icon_state = "trimline_corner"; - dir = 1 + dir = 1; + icon_state = "trimline_corner" }, /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3644,12 +3644,12 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "iw" = ( /obj/effect/turf_decal/trimline/green/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3658,8 +3658,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "ix" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3676,8 +3676,8 @@ "iz" = ( /obj/structure/closet/crate/freezer, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 8 + dir = 8; + icon_state = "scrub_map_on-2" }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, @@ -3727,8 +3727,8 @@ pixel_y = 8 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 4 + dir = 4; + icon_state = "scrub_map_on-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/comms) @@ -3747,8 +3747,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/comms) @@ -3769,8 +3769,8 @@ /area/ruin/space/has_grav/skelter/comms) "iH" = ( /obj/machinery/computer{ - icon_state = "computer"; - dir = 4 + dir = 4; + icon_state = "computer" }, /turf/open/floor/mineral/titanium/white, /area/ruin/space/has_grav/skelter/shields) @@ -3780,8 +3780,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "iJ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/blue/corner, /turf/open/floor/plasteel/showroomfloor, @@ -3792,19 +3792,19 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "iL" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/blue/corner{ - icon_state = "trimline_corner"; - dir = 8 + dir = 8; + icon_state = "trimline_corner" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/engine/powerstorage) "iM" = ( /obj/effect/turf_decal/trimline/green/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/skelter/engine/powerstorage) @@ -3858,8 +3858,8 @@ /area/ruin/space/has_grav/skelter/storage) "iT" = ( /obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 8 + dir = 8; + icon_state = "pipe-t" }, /obj/machinery/disposal/bin, /obj/machinery/button/massdriver{ @@ -3948,8 +3948,8 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "ja" = ( /obj/structure/toilet{ - icon_state = "toilet00"; - dir = 8 + dir = 8; + icon_state = "toilet00" }, /obj/machinery/light/small{ dir = 1 @@ -3958,37 +3958,37 @@ /area/ruin/space/has_grav/skelter/engine/powerstorage) "jb" = ( /obj/structure/disposalpipe/segment{ - icon_state = "pipe"; - dir = 6 + dir = 6; + icon_state = "pipe" }, /turf/closed/wall/mineral/titanium, /area/ruin/space/has_grav/skelter/storage) "jc" = ( /obj/structure/disposalpipe/segment{ - icon_state = "pipe"; - dir = 8 + dir = 8; + icon_state = "pipe" }, /turf/closed/wall/mineral/titanium, /area/ruin/space/has_grav/skelter/storage) "jd" = ( /obj/structure/disposalpipe/segment{ - icon_state = "pipe"; - dir = 8 + dir = 8; + icon_state = "pipe" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/storage) "je" = ( /obj/machinery/door/window/eastright, /obj/structure/disposalpipe/segment{ - icon_state = "pipe"; - dir = 9 + dir = 9; + icon_state = "pipe" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/skelter/storage) "jf" = ( /obj/effect/turf_decal/stripes/end{ - icon_state = "warn_end"; - dir = 1 + dir = 1; + icon_state = "warn_end" }, /obj/machinery/mass_driver, /obj/structure/window/reinforced/spawner/north, @@ -4027,8 +4027,8 @@ /area/ruin/space/has_grav/skelter/comms) "ji" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos{ - icon_state = "inje_map-2"; - dir = 1 + dir = 1; + icon_state = "inje_map-2" }, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/skelter/oxy) @@ -4087,8 +4087,8 @@ /area/ruin/unpowered/no_grav) "jp" = ( /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 4 + dir = 4; + icon_state = "trimline" }, /obj/machinery/light{ dir = 1 @@ -4097,16 +4097,16 @@ /area/ruin/space/has_grav/skelter/nav) "jq" = ( /obj/effect/turf_decal/trimline/red/line{ - icon_state = "trimline"; - dir = 4 + dir = 4; + icon_state = "trimline" }, /obj/machinery/light, /turf/open/floor/mineral/titanium, /area/ruin/space/has_grav/skelter/nav) "jr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/carpet, /area/ruin/space/has_grav/skelter/admin) @@ -4118,8 +4118,8 @@ /area/ruin/space/has_grav/skelter/admin) "jt" = ( /obj/machinery/light/small/broken{ - icon_state = "bulb-broken"; - dir = 4 + dir = 4; + icon_state = "bulb-broken" }, /obj/item/stack/cable_coil/blue, /turf/open/floor/plating, @@ -4127,8 +4127,8 @@ "ju" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - icon_state = "scrub_map_on-2"; - dir = 1 + dir = 1; + icon_state = "scrub_map_on-2" }, /turf/open/floor/carpet, /area/ruin/space/has_grav/skelter/admin) diff --git a/_maps/RandomRuins/SpaceRuins/spacediner.dmm b/_maps/RandomRuins/SpaceRuins/spacediner.dmm index 16a6850130..755e5531bb 100644 --- a/_maps/RandomRuins/SpaceRuins/spacediner.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacediner.dmm @@ -40,8 +40,8 @@ /area/ruin/space/diner/interior) "ai" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 1 + dir = 1; + icon_state = "hrwindow_spawner_end" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) @@ -116,8 +116,8 @@ /area/ruin/space/diner) "aw" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 4 + dir = 4; + icon_state = "hrwindow_spawner_end" }, /turf/open/floor/plating/airless, /area/ruin/space/diner) @@ -253,8 +253,8 @@ /area/ruin/space/diner/interior) "aQ" = ( /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) @@ -438,8 +438,8 @@ }, /obj/machinery/grill, /obj/machinery/light/small/broken{ - icon_state = "bulb-broken"; - dir = 1 + dir = 1; + icon_state = "bulb-broken" }, /obj/machinery/power/apc/highcap/five_k{ name = "Space Diner APC"; @@ -468,8 +468,8 @@ /area/ruin/space/diner/interior) "bx" = ( /obj/structure/toilet/secret/low_loot{ - icon_state = "toilet00"; - dir = 4 + dir = 4; + icon_state = "toilet00" }, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, @@ -509,8 +509,8 @@ /area/ruin/space/diner/interior) "bB" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 8 + dir = 8; + icon_state = "hrwindow_spawner_end" }, /obj/structure/cable{ icon_state = "0-4" @@ -529,8 +529,8 @@ /area/ruin/space/diner/interior) "bD" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 4 + dir = 4; + icon_state = "hrwindow_spawner_end" }, /obj/structure/cable{ icon_state = "0-8" @@ -568,8 +568,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) @@ -579,8 +579,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) @@ -594,8 +594,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) @@ -616,8 +616,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) @@ -662,8 +662,8 @@ /area/ruin/space/diner/interior) "bP" = ( /obj/structure/toilet/secret/low_loot{ - icon_state = "toilet00"; - dir = 4 + dir = 4; + icon_state = "toilet00" }, /obj/structure/window/reinforced/spawner/north, /obj/effect/decal/cleanable/dirt, @@ -673,8 +673,8 @@ "bQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 6 + dir = 6; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) @@ -727,8 +727,8 @@ /area/ruin/space/diner/interior) "bX" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 1 + dir = 1; + icon_state = "hrwindow_spawner_end" }, /obj/structure/cable{ icon_state = "0-2" @@ -756,24 +756,24 @@ "ca" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/general/hidden{ - icon_state = "manifold-2"; - dir = 8 + dir = 8; + icon_state = "manifold-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) "cb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) "cc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 10 + dir = 10; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel, /area/ruin/space/diner/interior) @@ -962,8 +962,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /obj/item/beacon, /turf/open/floor/plasteel/dark, @@ -973,8 +973,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/dark, /area/ruin/space/diner/interior) @@ -993,8 +993,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plasteel/dark, /area/ruin/space/diner/interior) @@ -1105,8 +1105,8 @@ /area/ruin/space/diner/interior) "cM" = ( /obj/machinery/light/broken{ - icon_state = "tube-broken"; - dir = 1 + dir = 1; + icon_state = "tube-broken" }, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -1146,8 +1146,8 @@ }, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 8 + dir = 8; + icon_state = "arcade" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1161,8 +1161,8 @@ /area/ruin/space/diner/interior) "cS" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 1 + dir = 1; + icon_state = "hrwindow_spawner_end" }, /obj/structure/cable, /obj/structure/cable{ @@ -1242,8 +1242,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 5 + dir = 5; + icon_state = "pipe11-2" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1257,8 +1257,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1287,8 +1287,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1311,8 +1311,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 9 + dir = 9; + icon_state = "pipe11-2" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1351,8 +1351,8 @@ icon_state = "1-2" }, /obj/machinery/computer/teleporter{ - icon_state = "computer"; - dir = 1 + dir = 1; + icon_state = "computer" }, /obj/structure/cable, /turf/open/floor/plasteel/dark, @@ -1414,8 +1414,8 @@ "ds" = ( /obj/structure/cable, /obj/machinery/power/solar_control{ - icon_state = "computer"; - dir = 4 + dir = 4; + icon_state = "computer" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) @@ -1427,8 +1427,8 @@ /area/ruin/space/diner/interior) "dv" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 4 + dir = 4; + icon_state = "hrwindow_spawner_end" }, /obj/structure/cable, /obj/structure/cable{ @@ -1449,8 +1449,8 @@ dir = 1 }, /obj/machinery/light/broken{ - icon_state = "tube-broken"; - dir = 8 + dir = 8; + icon_state = "tube-broken" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1492,8 +1492,8 @@ name = "dust" }, /obj/item/chair{ - icon_state = "chair_toppled"; - dir = 1 + dir = 1; + icon_state = "chair_toppled" }, /turf/open/floor/carpet, /area/ruin/space/diner/interior) @@ -1508,8 +1508,8 @@ /area/ruin/space/diner/interior) "dE" = ( /obj/machinery/light/small/broken{ - icon_state = "bulb-broken"; - dir = 1 + dir = 1; + icon_state = "bulb-broken" }, /turf/open/floor/engine/airless, /area/ruin/space/diner) @@ -1663,8 +1663,8 @@ /area/ruin/space/diner/interior) "dV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/directional{ - icon_state = "hrwindow_spawner_directional"; - dir = 10 + dir = 10; + icon_state = "hrwindow_spawner_directional" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) @@ -1674,22 +1674,22 @@ /area/ruin/space/diner/interior) "dX" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 4 + dir = 4; + icon_state = "hrwindow_spawner_end" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) "dY" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 8 + dir = 8; + icon_state = "hrwindow_spawner_end" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) "dZ" = ( /obj/effect/spawner/structure/window/hollow/reinforced/directional{ - icon_state = "hrwindow_spawner_directional"; - dir = 6 + dir = 6; + icon_state = "hrwindow_spawner_directional" }, /turf/open/floor/plating, /area/ruin/space/diner/interior) @@ -1728,8 +1728,8 @@ /area/ruin/space/diner) "ef" = ( /obj/machinery/light/small/broken{ - icon_state = "bulb-broken"; - dir = 1 + dir = 1; + icon_state = "bulb-broken" }, /obj/machinery/vending/snack, /obj/effect/turf_decal/bot, @@ -1737,8 +1737,8 @@ /area/ruin/space/diner) "eg" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ - icon_state = "hrwindow_spawner_end"; - dir = 1 + dir = 1; + icon_state = "hrwindow_spawner_end" }, /turf/open/floor/plating/airless, /area/ruin/space/diner) diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 6e0c65f6aa..c2abea9a97 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -125,8 +125,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_3) "ay" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /obj/structure/toilet, /turf/open/floor/plasteel/showroomfloor, @@ -166,8 +166,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_4) "aG" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /obj/structure/toilet, /turf/open/floor/plasteel/showroomfloor, @@ -207,8 +207,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_5) "aO" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /obj/structure/toilet, /turf/open/floor/plasteel/showroomfloor, @@ -248,8 +248,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_6) "aW" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /obj/structure/toilet, /turf/open/floor/plasteel/showroomfloor, @@ -287,8 +287,8 @@ /area/ruin/unpowered/no_grav) "be" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/guestroom/room_3) @@ -319,8 +319,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_3) "bk" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/guestroom/room_4) @@ -351,8 +351,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_4) "bq" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/guestroom/room_5) @@ -383,8 +383,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_5) "bw" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/guestroom/room_6) @@ -1067,8 +1067,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_2) "dl" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /obj/structure/toilet, /turf/open/floor/plasteel/showroomfloor, @@ -1131,8 +1131,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_1) "dt" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /obj/structure/toilet, /turf/open/floor/plasteel/showroomfloor, @@ -1230,8 +1230,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_2) "dI" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/guestroom/room_2) @@ -1262,8 +1262,8 @@ /area/ruin/space/has_grav/hotel/guestroom/room_1) "dP" = ( /obj/structure/window{ - icon_state = "window"; - dir = 8 + dir = 8; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/guestroom/room_1) @@ -2564,16 +2564,16 @@ /area/ruin/space/has_grav/hotel/workroom) "hG" = ( /obj/effect/mob_spawn/human/hotel_staff{ - icon_state = "sleeper_s"; - dir = 1 + dir = 1; + icon_state = "sleeper_s" }, /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/hotel/workroom) "hH" = ( /obj/effect/mob_spawn/human/hotel_staff{ - icon_state = "sleeper_s"; - dir = 1 + dir = 1; + icon_state = "sleeper_s" }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/hotel/workroom) @@ -4283,8 +4283,8 @@ /area/ruin/space/has_grav/hotel/security) "lG" = ( /obj/structure/window{ - icon_state = "window"; - dir = 1 + dir = 1; + icon_state = "window" }, /obj/machinery/light{ dir = 8 @@ -4307,8 +4307,8 @@ /obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/sandal, /obj/structure/window{ - icon_state = "window"; - dir = 1 + dir = 1; + icon_state = "window" }, /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/hotel/pool) diff --git a/_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm b/_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm index 0bcfba908b..b5f2fb2237 100644 --- a/_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm +++ b/_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm @@ -9,9 +9,9 @@ dwidth = 11; height = 22; id = "whiteship_away"; + json_key = "whiteship"; name = "Deep Space"; - width = 35; - json_key = "whiteship" + width = 35 }, /turf/open/space, /area/space) diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/budget.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/budget.dmm index e241b776e1..62c261e8a0 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/budget.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/budget.dmm @@ -336,16 +336,6 @@ "yf" = ( /turf/open/space/basic, /area/space/nearstation) -"zw" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/plasma{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 10 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "zS" = ( /turf/open/space/basic, /area/space) @@ -715,12 +705,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"WB" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "Ys" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -1164,15 +1148,15 @@ zS MP dw lG -WB +eP Jq -WB +eP UD Cx UD -WB +eP Jq -WB +eP UD MP tw @@ -1276,15 +1260,15 @@ zS MP Cb AC -WB +eP mW -WB +eP Kl Cx Kl -WB +eP mW -WB +eP Kl MP tw @@ -1505,11 +1489,11 @@ Ok CH GI Ok -zw -zw -zw -zw -zw +gF +gF +gF +gF +gF MP tw yf diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/empty.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/empty.dmm index 6116e6a3b6..6a8a6f9288 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/empty.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/empty.dmm @@ -111,26 +111,14 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"uC" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "wt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/closet/radiation, /turf/open/floor/plasteel, /area/engine/engineering) -"wS" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "yf" = ( /turf/open/space/basic, /area/space/nearstation) -"yA" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "zS" = ( /turf/open/space/basic, /area/space) @@ -224,10 +212,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"Le" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "LS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plating/airless, @@ -397,17 +381,17 @@ ZT ZT ZT ZT -Le +hK tw -Le -Le +hK +hK tw -Le -Le +hK +hK tw -Le -Le -Le +hK +hK +hK YZ Oj YZ @@ -453,17 +437,17 @@ ZT ZT ZT ZT -Le +hK tw -Le -Le +hK +hK tw -Le -Le +hK +hK tw -Le -Le -Le +hK +hK +hK YZ Oj YZ @@ -509,17 +493,17 @@ Ke EL Tk MP -Le +hK tw -Le -Le +hK +hK tw -Le -Le +hK +hK tw -Le -Le -Le +hK +hK +hK YZ Oj YZ diff --git a/_maps/RandomZLevels/VR/snowdin_VR.dmm b/_maps/RandomZLevels/VR/snowdin_VR.dmm index cbece3304a..c76ee3d574 100644 --- a/_maps/RandomZLevels/VR/snowdin_VR.dmm +++ b/_maps/RandomZLevels/VR/snowdin_VR.dmm @@ -2411,8 +2411,8 @@ /area/awaymission/snowdin/post/dorm) "fw" = ( /obj/machinery/sleeper{ - icon_state = "sleeper"; - dir = 4 + dir = 4; + icon_state = "sleeper" }, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -6704,9 +6704,9 @@ "oo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4; + piping_layer = 3; pixel_x = 5; - pixel_y = 5; - piping_layer = 3 + pixel_y = 5 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -6714,9 +6714,9 @@ "op" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4; + piping_layer = 3; pixel_x = 5; - pixel_y = 5; - piping_layer = 3 + pixel_y = 5 }, /turf/open/floor/plasteel, /area/awaymission/snowdin/post/engineering) @@ -9707,10 +9707,10 @@ /area/awaymission/snowdin/post/broken_shuttle) "wc" = ( /obj/machinery/computer{ - name = "Shuttle Transist Console"; desc = "A console meant for calling and sending a transit ferry. It seems iced-over and non-functional."; dir = 1; - icon_screen = null + icon_screen = null; + name = "Shuttle Transist Console" }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/snowdin/post/broken_shuttle) @@ -9799,9 +9799,9 @@ "wm" = ( /obj/machinery/porta_turret/centcom_shuttle/weak{ desc = "A turret built with substandard parts and run down further with age."; - icon_state = "syndie_off"; dir = 9; - faction = list("pirate") + faction = list("pirate"); + icon_state = "syndie_off" }, /turf/open/floor/plating/snowed/smoothed, /area/awaymission/snowdin/cave) @@ -9926,8 +9926,8 @@ /area/awaymission/snowdin/outside) "wC" = ( /obj/vehicle/ridden/atv{ - icon_state = "atv"; - dir = 4 + dir = 4; + icon_state = "atv" }, /obj/effect/light_emitter{ name = "outdoor light"; @@ -10650,10 +10650,10 @@ /area/awaymission/snowdin/cave) "yu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - name = "toxin out"; dir = 8; + frequency = 1442; id_tag = "snowdin_toxins_mine_1"; - frequency = 1442 + name = "toxin out" }, /turf/open/floor/engine/vacuum, /area/awaymission/snowdin/cave) @@ -11025,8 +11025,8 @@ /area/awaymission/snowdin/post/minipost) "zq" = ( /obj/vehicle/ridden/atv{ - icon_state = "atv"; - dir = 8 + dir = 8; + icon_state = "atv" }, /turf/open/floor/plating, /area/awaymission/snowdin/post/minipost) @@ -11939,8 +11939,8 @@ /area/awaymission/snowdin/cave) "BO" = ( /obj/effect/turf_decal/stripes/end{ - icon_state = "warn_end"; - dir = 1 + dir = 1; + icon_state = "warn_end" }, /turf/open/floor/plating/snowed/cavern, /area/awaymission/snowdin/cave/cavern) @@ -11953,8 +11953,8 @@ /area/awaymission/snowdin/cave/cavern) "BQ" = ( /obj/effect/turf_decal/stripes/end{ - icon_state = "warn_end"; - dir = 8 + dir = 8; + icon_state = "warn_end" }, /turf/open/floor/plating/snowed/cavern, /area/awaymission/snowdin/cave/cavern) @@ -12268,8 +12268,8 @@ /area/awaymission/snowdin/cave) "CP" = ( /obj/structure/shuttle/engine/heater{ - icon_state = "heater"; - dir = 4 + dir = 4; + icon_state = "heater" }, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -12803,8 +12803,8 @@ /area/awaymission/snowdin/cave) "DU" = ( /obj/structure/shuttle/engine/heater{ - icon_state = "heater"; - dir = 4 + dir = 4; + icon_state = "heater" }, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -13244,8 +13244,8 @@ /area/awaymission/snowdin/cave) "EN" = ( /obj/machinery/sleeper/syndie{ - icon_state = "sleeper_s"; - dir = 1 + dir = 1; + icon_state = "sleeper_s" }, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, @@ -13257,8 +13257,8 @@ "EP" = ( /obj/effect/turf_decal/bot_white, /obj/machinery/sleeper/syndie{ - icon_state = "sleeper_s"; - dir = 1 + dir = 1; + icon_state = "sleeper_s" }, /turf/open/floor/plasteel/dark, /area/awaymission/snowdin/cave) @@ -14452,8 +14452,8 @@ /area/awaymission/snowdin/post/mining_main/mechbay) "In" = ( /obj/mecha/working/ripley/mining{ - icon_state = "ripley"; - dir = 1 + dir = 1; + icon_state = "ripley" }, /obj/effect/turf_decal/bot, /turf/open/floor/mech_bay_recharge_floor, @@ -14513,8 +14513,8 @@ /area/awaymission/snowdin/post/mining_main) "Ix" = ( /obj/vehicle/ridden/atv{ - icon_state = "atv"; - dir = 1 + dir = 1; + icon_state = "atv" }, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, diff --git a/_maps/RandomZLevels/VR/syndicate_trainer.dmm b/_maps/RandomZLevels/VR/syndicate_trainer.dmm index 5b010e74d9..a939b8424e 100644 --- a/_maps/RandomZLevels/VR/syndicate_trainer.dmm +++ b/_maps/RandomZLevels/VR/syndicate_trainer.dmm @@ -468,8 +468,8 @@ /area/awaymission/centcomAway/hangar) "cO" = ( /obj/machinery/sleep_console{ - icon_state = "console"; - dir = 8 + dir = 8; + icon_state = "console" }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/centcomAway/hangar) @@ -746,8 +746,8 @@ /area/awaymission/centcomAway/general) "eI" = ( /obj/machinery/sleep_console{ - icon_state = "console"; - dir = 8 + dir = 8; + icon_state = "console" }, /turf/open/indestructible, /area/awaymission/centcomAway/general) @@ -1787,8 +1787,8 @@ /area/awaymission/centcomAway/general) "kD" = ( /obj/machinery/door/window/northright{ - icon_state = "right"; - dir = 2 + dir = 2; + icon_state = "right" }, /turf/open/indestructible, /area/awaymission/centcomAway/general) diff --git a/_maps/RandomZLevels/away_mission/Academy.dmm b/_maps/RandomZLevels/away_mission/Academy.dmm index 9b61f50600..8bc4522ae0 100644 --- a/_maps/RandomZLevels/away_mission/Academy.dmm +++ b/_maps/RandomZLevels/away_mission/Academy.dmm @@ -3129,8 +3129,8 @@ /obj/structure/table, /obj/item/gun/ballistic/revolver/russian/soul, /turf/open/floor/plasteel/airless{ - icon_state = "whitered"; - dir = 4 + dir = 4; + icon_state = "whitered" }, /area/awaymission/academy/academyaft) "iY" = ( @@ -3197,8 +3197,8 @@ icon_state = "4-8" }, /turf/open/floor/plasteel/airless{ - icon_state = "whitered"; - dir = 4 + dir = 4; + icon_state = "whitered" }, /area/awaymission/academy/academyaft) "jh" = ( @@ -3258,8 +3258,8 @@ name = "The preserved brain of Harry Houdini" }, /turf/open/floor/plasteel/airless{ - icon_state = "whitered"; - dir = 4 + dir = 4; + icon_state = "whitered" }, /area/awaymission/academy/academyaft) "jp" = ( @@ -3365,8 +3365,8 @@ /obj/structure/window/reinforced, /obj/item/batterer, /turf/open/floor/plasteel/airless{ - icon_state = "whitered"; - dir = 4 + dir = 4; + icon_state = "whitered" }, /area/awaymission/academy/academyaft) "jB" = ( @@ -3616,8 +3616,8 @@ /area/awaymission/academy/academygate) "kw" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 8 + dir = 8; + icon_state = "fakewindows" }, /area/awaymission/academy/headmaster) "kx" = ( @@ -3671,8 +3671,8 @@ /area/awaymission/academy/academyaft) "kF" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 8 + dir = 8; + icon_state = "fakewindows2" }, /area/awaymission/academy/headmaster) "kG" = ( @@ -4270,8 +4270,8 @@ /area/awaymission/academy/academycellar) "mW" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 4 + dir = 4; + icon_state = "fakewindows" }, /area/awaymission/academy/headmaster) "mX" = ( @@ -4284,14 +4284,14 @@ /area/space/nearstation) "mZ" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 1 + dir = 1; + icon_state = "fakewindows" }, /area/awaymission/academy/headmaster) "na" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 1 + dir = 1; + icon_state = "fakewindows2" }, /area/awaymission/academy/headmaster) "nb" = ( @@ -4310,20 +4310,20 @@ /area/awaymission/academy/headmaster) "nd" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 1 + dir = 1; + icon_state = "fakewindows" }, /area/awaymission/academy/academyengine) "ne" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 1 + dir = 1; + icon_state = "fakewindows2" }, /area/awaymission/academy/academyengine) "nf" = ( /turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 6 + dir = 6; + icon_state = "fakewindows2" }, /area/awaymission/academy/headmaster) "ng" = ( diff --git a/_maps/RandomZLevels/away_mission/caves.dmm b/_maps/RandomZLevels/away_mission/caves.dmm index 33aca48f29..1576c144d8 100644 --- a/_maps/RandomZLevels/away_mission/caves.dmm +++ b/_maps/RandomZLevels/away_mission/caves.dmm @@ -11,8 +11,8 @@ "ad" = ( /turf/open/lava/smooth{ desc = "Looks hot."; - luminosity = 5; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + luminosity = 5 }, /area/awaymission/caves/BMP_asteroid/level_four) "ae" = ( @@ -35,8 +35,8 @@ "ah" = ( /turf/open/lava/smooth{ desc = "Looks hot."; - luminosity = 5; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + luminosity = 5 }, /area/awaymission/caves/BMP_asteroid/level_three) "ai" = ( @@ -305,8 +305,8 @@ /obj/effect/forcefield/cult, /turf/open/lava/smooth{ desc = "Looks hot."; - luminosity = 5; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + luminosity = 5 }, /area/awaymission/caves/BMP_asteroid/level_four) "aW" = ( @@ -540,8 +540,8 @@ "bM" = ( /turf/open/lava/smooth{ desc = "Looks hot."; - luminosity = 5; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + luminosity = 5 }, /area/awaymission/caves/BMP_asteroid) "bN" = ( @@ -550,8 +550,8 @@ "bO" = ( /turf/open/lava/smooth{ desc = "Looks hot."; - luminosity = 5; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + luminosity = 5 }, /area/awaymission/caves/BMP_asteroid/level_two) "bP" = ( @@ -1818,8 +1818,8 @@ /area/awaymission/caves/BMP_asteroid) "fQ" = ( /turf/open/floor/plasteel/elevatorshaft{ - name = "elevator flooring"; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + name = "elevator flooring" }, /area/awaymission/caves/BMP_asteroid) "fR" = ( @@ -1843,8 +1843,8 @@ "fU" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plasteel/elevatorshaft{ - name = "elevator flooring"; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + name = "elevator flooring" }, /area/awaymission/caves/BMP_asteroid) "fW" = ( @@ -2169,8 +2169,8 @@ /obj/effect/baseturf_helper/lava, /turf/open/lava/smooth{ desc = "Looks hot."; - luminosity = 5; - initial_gas_mix = "n2=23;o2=14" + initial_gas_mix = "n2=23;o2=14"; + luminosity = 5 }, /area/awaymission/caves/BMP_asteroid/level_four) "gZ" = ( diff --git a/_maps/RandomZLevels/away_mission/challenge.dmm b/_maps/RandomZLevels/away_mission/challenge.dmm index 7342f7ffe6..5393f3b09a 100644 --- a/_maps/RandomZLevels/away_mission/challenge.dmm +++ b/_maps/RandomZLevels/away_mission/challenge.dmm @@ -208,8 +208,8 @@ "aX" = ( /obj/machinery/porta_turret{ dir = 8; - set_obj_flags = "EMAGGED"; - installation = /obj/item/gun/energy/lasercannon + installation = /obj/item/gun/energy/lasercannon; + set_obj_flags = "EMAGGED" }, /turf/open/floor/plating/airless, /area/awaymission/challenge/main) @@ -354,8 +354,8 @@ "bq" = ( /obj/machinery/porta_turret{ dir = 8; - set_obj_flags = "EMAGGED"; - installation = /obj/item/gun/energy/lasercannon + installation = /obj/item/gun/energy/lasercannon; + set_obj_flags = "EMAGGED" }, /turf/open/floor/plating, /area/awaymission/challenge/main) diff --git a/_maps/RandomZLevels/away_mission/moonoutpost19.dmm b/_maps/RandomZLevels/away_mission/moonoutpost19.dmm index ff2db79c83..acd6489504 100644 --- a/_maps/RandomZLevels/away_mission/moonoutpost19.dmm +++ b/_maps/RandomZLevels/away_mission/moonoutpost19.dmm @@ -12,8 +12,8 @@ /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "ae" = ( @@ -26,43 +26,43 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - obj_integrity = 100; icon_state = "egg_hatched"; - name = "egg" + name = "egg"; + obj_integrity = 100 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "ai" = ( /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aj" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "ak" = ( /obj/structure/alien/weeds, /mob/living/simple_animal/hostile/alien, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "am" = ( /obj/structure/alien/weeds/node, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "ap" = ( @@ -72,8 +72,8 @@ /obj/item/clothing/mask/facehugger/impregnated, /obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "as" = ( @@ -81,8 +81,8 @@ /obj/structure/alien/resin/wall, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "at" = ( @@ -92,24 +92,24 @@ /obj/structure/alien/weeds, /mob/living/simple_animal/hostile/alien/sentinel, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "av" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aw" = ( /obj/structure/alien/weeds/node, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "ay" = ( @@ -164,8 +164,8 @@ /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aE" = ( @@ -178,8 +178,8 @@ /obj/item/melee/baton/loaded, /obj/item/clothing/head/helmet, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aF" = ( @@ -195,28 +195,28 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - obj_integrity = 100; icon_state = "egg_hatched"; - name = "egg" + name = "egg"; + obj_integrity = 100 }, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aK" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - obj_integrity = 100; icon_state = "egg_hatched"; - name = "egg" + name = "egg"; + obj_integrity = 100 }, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aM" = ( @@ -225,8 +225,8 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aN" = ( @@ -257,8 +257,8 @@ pixel_y = -6 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "aT" = ( @@ -269,8 +269,8 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "aU" = ( @@ -341,16 +341,16 @@ /area/awaymission/moonoutpost19/syndicate) "ba" = ( /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "bc" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "bd" = ( @@ -413,8 +413,8 @@ /obj/item/clothing/under/syndicate, /obj/item/clothing/glasses/night, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "bl" = ( @@ -848,8 +848,8 @@ /obj/structure/alien/weeds/node, /mob/living/simple_animal/hostile/alien, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "bX" = ( @@ -860,8 +860,8 @@ dir = 4 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -874,8 +874,8 @@ }, /obj/structure/alien/weeds, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "bZ" = ( @@ -887,16 +887,16 @@ }, /obj/structure/alien/weeds, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "ca" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -908,8 +908,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -922,8 +922,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -934,10 +934,10 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -950,8 +950,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -964,8 +964,8 @@ dir = 1 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -977,8 +977,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -995,8 +995,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1073,15 +1073,15 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "cp" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "cq" = ( @@ -1090,8 +1090,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1099,17 +1099,17 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/public/glass{ density = 0; - set_obj_flags = "EMAGGED"; icon_state = "open"; - name = "Dormitories" + name = "Dormitories"; + set_obj_flags = "EMAGGED" }, /obj/item/stack/rods, /obj/item/shard{ icon_state = "small" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "cs" = ( @@ -1120,8 +1120,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1133,8 +1133,8 @@ icon_state = "1-2" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "cu" = ( @@ -1143,8 +1143,8 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1157,8 +1157,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1232,8 +1232,8 @@ dir = 4 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1249,8 +1249,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1261,8 +1261,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1273,8 +1273,8 @@ /obj/item/shard, /obj/structure/alien/weeds, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "cH" = ( @@ -1286,8 +1286,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1298,8 +1298,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1309,8 +1309,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1328,8 +1328,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1343,8 +1343,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1398,17 +1398,17 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "cR" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged4"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1430,8 +1430,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1439,16 +1439,16 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock{ density = 0; - set_obj_flags = "EMAGGED"; icon_state = "open"; id_tag = "awaydorm4"; name = "Dorm 1"; - opacity = 0 + opacity = 0; + set_obj_flags = "EMAGGED" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "cU" = ( @@ -1466,26 +1466,26 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "cW" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "cX" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged3"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1500,9 +1500,9 @@ dir = 1 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 1; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1517,15 +1517,15 @@ /obj/structure/bed, /obj/item/bedsheet/syndie, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "da" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "db" = ( @@ -1553,8 +1553,8 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "de" = ( @@ -1567,8 +1567,8 @@ dir = 4 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1588,9 +1588,9 @@ dir = 1 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 1; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1604,8 +1604,8 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "di" = ( @@ -1613,8 +1613,8 @@ dir = 4 }, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "dj" = ( @@ -1641,8 +1641,8 @@ /obj/effect/turf_decal/loading_area, /obj/structure/alien/weeds, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1652,8 +1652,8 @@ dir = 1 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1662,17 +1662,17 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "do" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1684,9 +1684,9 @@ /obj/item/shovel, /obj/item/pickaxe, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg3"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1698,8 +1698,8 @@ pixel_y = -32 }, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "dr" = ( @@ -1717,8 +1717,8 @@ }, /obj/item/suppressor, /turf/open/floor/wood{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "ds" = ( @@ -1746,15 +1746,15 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/external{ density = 0; - set_obj_flags = "EMAGGED"; icon_state = "open"; opacity = 0; - req_access_txt = "150" + req_access_txt = "150"; + set_obj_flags = "EMAGGED" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "dv" = ( @@ -1764,8 +1764,8 @@ pixel_y = -4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dw" = ( @@ -1782,16 +1782,16 @@ dir = 9 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "dx" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "dy" = ( @@ -1804,8 +1804,8 @@ dir = 5 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1815,8 +1815,8 @@ pixel_y = 9 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dA" = ( @@ -1833,16 +1833,16 @@ dir = 10 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "dC" = ( /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1853,8 +1853,8 @@ dir = 6 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) @@ -1865,8 +1865,8 @@ icon_state = "ltrails_1" }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dF" = ( @@ -1876,8 +1876,8 @@ icon_state = "ltrails_2" }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dG" = ( @@ -1888,8 +1888,8 @@ }, /obj/item/mining_scanner, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dH" = ( @@ -1899,41 +1899,41 @@ }, /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dI" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/external{ density = 0; - set_obj_flags = "EMAGGED"; icon_state = "open"; opacity = 0; - req_access_txt = "150" + req_access_txt = "150"; + set_obj_flags = "EMAGGED" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "dJ" = ( /obj/item/storage/bag/ore, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dK" = ( /obj/item/pickaxe/drill, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dL" = ( @@ -1941,8 +1941,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) "dN" = ( @@ -1951,8 +1951,8 @@ pixel_y = -4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dO" = ( @@ -1965,23 +1965,23 @@ /obj/item/clothing/head/helmet/space/syndicate/orange, /obj/item/clothing/mask/facehugger/impregnated, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "dP" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dQ" = ( /obj/structure/alien/weeds/node, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dS" = ( @@ -1991,30 +1991,30 @@ plants_off = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "dT" = ( /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dV" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "dY" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/research) "dZ" = ( @@ -2143,9 +2143,9 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - obj_integrity = 100; icon_state = "egg_hatched"; - name = "egg" + name = "egg"; + obj_integrity = 100 }, /obj/machinery/camera{ c_tag = "Xenobiology Containment North"; @@ -2255,9 +2255,9 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - obj_integrity = 100; icon_state = "egg_hatched"; - name = "egg" + name = "egg"; + obj_integrity = 100 }, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) @@ -2675,11 +2675,11 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/research{ density = 0; - set_obj_flags = "EMAGGED"; icon_state = "open"; name = "Xenobiology Lab"; opacity = 0; - req_access_txt = "201" + req_access_txt = "201"; + set_obj_flags = "EMAGGED" }, /turf/open/floor/plasteel{ heat_capacity = 1e+006 @@ -3666,8 +3666,8 @@ /obj/structure/alien/weeds, /obj/structure/alien/egg, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) "hm" = ( @@ -3853,11 +3853,11 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/command{ density = 0; - set_obj_flags = "EMAGGED"; icon_state = "open"; name = "Research Director's Office"; opacity = 0; - req_access_txt = "201" + req_access_txt = "201"; + set_obj_flags = "EMAGGED" }, /turf/open/floor/plasteel/cafeteria{ dir = 5 @@ -4026,8 +4026,8 @@ "hV" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "hW" = ( @@ -4610,8 +4610,8 @@ /obj/item/stack/rods, /obj/item/shard, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "jb" = ( @@ -4850,24 +4850,24 @@ "jA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "jB" = ( /obj/structure/grille, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "jC" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "jD" = ( @@ -5101,10 +5101,10 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5113,10 +5113,10 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5127,8 +5127,8 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5141,8 +5141,8 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5151,10 +5151,10 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5163,9 +5163,9 @@ icon_state = "4-8" }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5174,10 +5174,10 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged3"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5361,17 +5361,17 @@ /area/awaymission/moonoutpost19/arrivals) "kB" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "kC" = ( /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "kD" = ( @@ -5380,27 +5380,27 @@ desc = "They look like human remains. The skeleton is curled up in fetal position with the hands placed near the throat." }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged4"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "kE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "kF" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged5"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5408,8 +5408,8 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5497,17 +5497,17 @@ icon_state = "medium" }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "kQ" = ( /obj/structure/grille/broken, /obj/item/stack/rods, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg3"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5674,8 +5674,8 @@ icon_state = "small" }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "lj" = ( @@ -5683,8 +5683,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "lk" = ( @@ -5695,8 +5695,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5707,8 +5707,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5866,8 +5866,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "lF" = ( @@ -5899,8 +5899,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -5909,8 +5909,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6040,8 +6040,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "mg" = ( @@ -6055,8 +6055,8 @@ "mh" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6202,8 +6202,8 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6349,8 +6349,8 @@ dir = 8 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "mP" = ( @@ -6366,8 +6366,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6378,10 +6378,10 @@ icon_state = "ltrails_1" }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6457,8 +6457,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6511,10 +6511,10 @@ /area/awaymission/moonoutpost19/arrivals) "ni" = ( /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6524,10 +6524,10 @@ pixel_x = 24 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6568,8 +6568,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "nq" = ( @@ -6583,10 +6583,10 @@ network = list("mo19") }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6618,8 +6618,8 @@ dir = 8 }, /turf/open/floor/plasteel/cafeteria{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6642,8 +6642,8 @@ dir = 8 }, /turf/open/floor/plasteel/cafeteria{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6655,8 +6655,8 @@ }, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6693,8 +6693,8 @@ icon_state = "ltrails_1" }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "nD" = ( @@ -6707,9 +6707,9 @@ icon_state = "ltrails_2" }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6720,9 +6720,9 @@ icon_state = "ltrails_2" }, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; icon_state = "platingdmg3"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6734,8 +6734,8 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6747,8 +6747,8 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6809,8 +6809,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6820,8 +6820,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6862,10 +6862,10 @@ /obj/structure/table, /obj/item/toy/cards/deck, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "damaged1"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6902,10 +6902,10 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6916,23 +6916,23 @@ /obj/effect/decal/cleanable/generic, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "nZ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "oa" = ( /obj/structure/chair/comfy/black, /turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) "ob" = ( @@ -6945,8 +6945,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) @@ -6956,8 +6956,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "od" = ( @@ -6965,15 +6965,15 @@ icon_state = "small" }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "oe" = ( /obj/item/trash/candy, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) "oT" = ( diff --git a/_maps/RandomZLevels/away_mission/research.dmm b/_maps/RandomZLevels/away_mission/research.dmm index f1c0f989df..3bcae8299a 100644 --- a/_maps/RandomZLevels/away_mission/research.dmm +++ b/_maps/RandomZLevels/away_mission/research.dmm @@ -3162,10 +3162,10 @@ /obj/effect/mob_spawn/human/doctor{ brute_damage = 145; id_job = "Geneticist"; + name = "Geneticist"; oxy_damage = 55; suit = /obj/item/clothing/suit/toggle/labcoat/genetics; - uniform = /obj/item/clothing/under/rank/medical/geneticist; - name = "Geneticist" + uniform = /obj/item/clothing/under/rank/medical/geneticist }, /obj/effect/decal/cleanable/blood, /obj/effect/turf_decal/tile/purple{ @@ -4276,10 +4276,10 @@ /obj/effect/mob_spawn/human/doctor{ brute_damage = 145; id_job = "Geneticist"; + name = "Geneticist"; oxy_damage = 55; suit = /obj/item/clothing/suit/toggle/labcoat/genetics; - uniform = /obj/item/clothing/under/rank/medical/geneticist; - name = "Geneticist" + uniform = /obj/item/clothing/under/rank/medical/geneticist }, /obj/effect/decal/cleanable/blood, /obj/effect/turf_decal/tile/purple{ @@ -4724,11 +4724,11 @@ "jp" = ( /obj/structure/barricade/wooden{ desc = "A wooden table hastily flipped over for cover."; - obj_integrity = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; max_integrity = 55; - name = "flipped table" + name = "flipped table"; + obj_integrity = 55 }, /turf/open/floor/plasteel/yellowsiding{ dir = 1 @@ -4874,11 +4874,11 @@ "jG" = ( /obj/structure/barricade/wooden{ desc = "A wooden table hastily flipped over for cover."; - obj_integrity = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; max_integrity = 55; - name = "flipped table" + name = "flipped table"; + obj_integrity = 55 }, /turf/open/floor/plasteel, /area/awaymission/research/interior/dorm) @@ -5051,11 +5051,11 @@ "kb" = ( /obj/structure/barricade/wooden{ desc = "A wooden table hastily flipped over for cover."; - obj_integrity = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; max_integrity = 55; - name = "flipped table" + name = "flipped table"; + obj_integrity = 55 }, /turf/open/floor/plasteel/yellowsiding, /area/awaymission/research/interior/dorm) @@ -5126,10 +5126,10 @@ /obj/effect/mob_spawn/human/doctor{ brute_damage = 145; id_job = "Geneticist"; + name = "Geneticist"; oxy_damage = 55; suit = /obj/item/clothing/suit/toggle/labcoat/genetics; - uniform = /obj/item/clothing/under/rank/medical/geneticist; - name = "Geneticist" + uniform = /obj/item/clothing/under/rank/medical/geneticist }, /obj/effect/decal/cleanable/blood, /obj/effect/turf_decal/tile/blue{ @@ -6000,10 +6000,10 @@ /obj/effect/mob_spawn/human/doctor{ brute_damage = 145; id_job = "Geneticist"; + name = "Geneticist"; oxy_damage = 55; suit = /obj/item/clothing/suit/toggle/labcoat/genetics; - uniform = /obj/item/clothing/under/rank/medical/geneticist; - name = "Geneticist" + uniform = /obj/item/clothing/under/rank/medical/geneticist }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/research/exterior) diff --git a/_maps/RandomZLevels/away_mission/snowdin.dmm b/_maps/RandomZLevels/away_mission/snowdin.dmm index 00530695e9..e80689ddcd 100644 --- a/_maps/RandomZLevels/away_mission/snowdin.dmm +++ b/_maps/RandomZLevels/away_mission/snowdin.dmm @@ -6699,9 +6699,9 @@ "oo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4; + piping_layer = 3; pixel_x = 5; - pixel_y = 5; - piping_layer = 3 + pixel_y = 5 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -6709,9 +6709,9 @@ "op" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4; + piping_layer = 3; pixel_x = 5; - pixel_y = 5; - piping_layer = 3 + pixel_y = 5 }, /turf/open/floor/plasteel, /area/awaymission/snowdin/post/engineering) @@ -9713,10 +9713,10 @@ /area/awaymission/snowdin/post/broken_shuttle) "wc" = ( /obj/machinery/computer{ - name = "Shuttle Transist Console"; desc = "A console meant for calling and sending a transit ferry. It seems iced-over and non-functional."; dir = 1; - icon_screen = null + icon_screen = null; + name = "Shuttle Transist Console" }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/snowdin/post/broken_shuttle) @@ -10657,10 +10657,10 @@ /area/awaymission/snowdin/cave) "yu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - name = "toxin out"; dir = 8; + frequency = 1442; id_tag = "snowdin_toxins_mine_1"; - frequency = 1442 + name = "toxin out" }, /turf/open/floor/engine/vacuum, /area/awaymission/snowdin/cave) diff --git a/_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm b/_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm index 78a656128c..bcda31dc6c 100644 --- a/_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm @@ -813,16 +813,16 @@ "bW" = ( /obj/structure/glowshroom/single, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 351.9 }, /area/awaymission/undergroundoutpost45/caves) "bX" = ( /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 351.9 }, @@ -2261,8 +2261,8 @@ /area/awaymission/undergroundoutpost45/central) "eJ" = ( /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -2632,8 +2632,8 @@ dir = 8 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -2868,8 +2868,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -3047,8 +3047,8 @@ "gf" = ( /obj/structure/glowshroom/single, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -3195,8 +3195,8 @@ "gB" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -3409,8 +3409,8 @@ dir = 8 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -3420,8 +3420,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -3452,8 +3452,8 @@ dir = 8 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -4787,8 +4787,8 @@ "jL" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -4821,8 +4821,8 @@ "jP" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -6604,8 +6604,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8354,8 +8354,8 @@ dir = 6 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8365,8 +8365,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8377,8 +8377,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8470,8 +8470,8 @@ name = "air out" }, /turf/open/floor/engine{ - name = "air floor"; - initial_gas_mix = "n2=10580;o2=2644" + initial_gas_mix = "n2=10580;o2=2644"; + name = "air floor" }, /area/awaymission/undergroundoutpost45/engineering) "pF" = ( @@ -8668,8 +8668,8 @@ "qa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8743,8 +8743,8 @@ dir = 10 }, /turf/open/floor/plasteel/dark{ - name = "Server Walkway"; - initial_gas_mix = "n2=500,TEMP=80" + initial_gas_mix = "n2=500,TEMP=80"; + name = "Server Walkway" }, /area/awaymission/undergroundoutpost45/research) "qj" = ( @@ -8900,8 +8900,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8911,8 +8911,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -8922,8 +8922,8 @@ dir = 9 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -9126,8 +9126,8 @@ dir = 8 }, /turf/open/floor/plasteel/dark{ - name = "Server Walkway"; - initial_gas_mix = "n2=500,TEMP=80" + initial_gas_mix = "n2=500,TEMP=80"; + name = "Server Walkway" }, /area/awaymission/undergroundoutpost45/research) "qR" = ( @@ -9545,8 +9545,8 @@ dir = 9 }, /turf/open/floor/plasteel/dark{ - name = "Server Walkway"; - initial_gas_mix = "n2=500,TEMP=80" + initial_gas_mix = "n2=500,TEMP=80"; + name = "Server Walkway" }, /area/awaymission/undergroundoutpost45/research) "rA" = ( @@ -11104,8 +11104,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -11750,8 +11750,8 @@ dir = 4 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -11976,8 +11976,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -12262,8 +12262,8 @@ dir = 8 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13481,8 +13481,8 @@ dir = 1 }, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13490,8 +13490,8 @@ "yh" = ( /obj/structure/ore_box, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13499,8 +13499,8 @@ "yi" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13510,8 +13510,8 @@ /obj/structure/bed/nest, /obj/effect/mob_spawn/human, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13520,8 +13520,8 @@ /obj/structure/alien/weeds, /obj/structure/bed/nest, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13531,8 +13531,8 @@ /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/blood/gibs/down, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13541,8 +13541,8 @@ /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs/core, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13550,8 +13550,8 @@ "yn" = ( /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13560,8 +13560,8 @@ /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13570,8 +13570,8 @@ /obj/structure/alien/weeds, /obj/effect/mob_spawn/human, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13579,8 +13579,8 @@ "yq" = ( /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13588,8 +13588,8 @@ "yr" = ( /obj/effect/decal/cleanable/blood/gibs/up, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13598,8 +13598,8 @@ /obj/structure/alien/weeds, /obj/structure/glowshroom/single, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13608,8 +13608,8 @@ /obj/structure/alien/resin/wall, /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13618,8 +13618,8 @@ /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13627,8 +13627,8 @@ "yz" = ( /obj/structure/alien/resin/membrane, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13637,8 +13637,8 @@ /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs/down, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13646,8 +13646,8 @@ "yB" = ( /obj/effect/decal/cleanable/blood/gibs/limb, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13656,8 +13656,8 @@ /obj/effect/decal/cleanable/blood/splatter, /obj/effect/mob_spawn/human, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13667,8 +13667,8 @@ /obj/effect/decal/cleanable/blood/splatter, /obj/effect/mob_spawn/human, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, @@ -13678,8 +13678,8 @@ /obj/effect/decal/cleanable/blood/gibs/down, /obj/effect/mob_spawn/human, /turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; heat_capacity = 1e+006; + initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; name = "Cave Floor"; temperature = 363.9 }, diff --git a/_maps/RandomZLevels/away_mission/wildwest.dmm b/_maps/RandomZLevels/away_mission/wildwest.dmm index 77d11a4552..1fc7da1acd 100644 --- a/_maps/RandomZLevels/away_mission/wildwest.dmm +++ b/_maps/RandomZLevels/away_mission/wildwest.dmm @@ -143,11 +143,6 @@ icon_state = "ironsand1" }, /area/awaymission/wildwest/mines) -"aT" = ( -/turf/open/floor/plating/ironsand{ - icon_state = "ironsand1" - }, -/area/awaymission/wildwest/mines) "aV" = ( /turf/closed/mineral, /area/awaymission/wildwest/refine) @@ -367,8 +362,8 @@ "bO" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) @@ -377,8 +372,8 @@ /area/awaymission/wildwest/gov) "bQ" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ icon_state = "fwindow" @@ -392,8 +387,8 @@ /area/awaymission/wildwest/gov) "bR" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ icon_state = "fwindow" @@ -405,16 +400,16 @@ /area/awaymission/wildwest/gov) "bS" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" @@ -422,8 +417,8 @@ /area/awaymission/wildwest/gov) "bT" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) @@ -445,24 +440,24 @@ /area/awaymission/wildwest/mines) "bW" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) "bX" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" @@ -480,12 +475,12 @@ /area/awaymission/wildwest/gov) "ca" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/effect/spawner/structure/window/hollow/reinforced/directional{ dir = 1 @@ -508,12 +503,12 @@ /area/awaymission/wildwest/mines) "ce" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plating/ironsand{ @@ -522,12 +517,12 @@ /area/awaymission/wildwest/gov) "cf" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plating/ironsand{ @@ -598,8 +593,8 @@ "ct" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) @@ -713,12 +708,12 @@ /area/awaymission/wildwest/gov) "cQ" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ @@ -736,12 +731,12 @@ /area/awaymission/wildwest/gov) "cS" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ @@ -807,12 +802,12 @@ /area/awaymission/wildwest/mines) "dc" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/effect/spawner/structure/window/hollow/reinforced/directional{ dir = 1 @@ -844,17 +839,17 @@ /area/awaymission/wildwest/gov) "dg" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" @@ -1054,13 +1049,13 @@ icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" @@ -1071,8 +1066,8 @@ icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plating/ironsand{ @@ -1084,13 +1079,13 @@ icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" @@ -1153,23 +1148,23 @@ /area/awaymission/wildwest/mines) "ed" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) "ee" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) "ef" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ dir = 4 @@ -1178,8 +1173,8 @@ /area/space/nearstation) "eg" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" @@ -1195,12 +1190,12 @@ /area/awaymission/wildwest/gov) "ei" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/space, /area/space/nearstation) @@ -1239,8 +1234,8 @@ /area/awaymission/wildwest/mines) "er" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand12" @@ -1272,8 +1267,8 @@ /area/awaymission/wildwest/mines) "ex" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand7" @@ -1361,8 +1356,8 @@ /area/awaymission/wildwest/mines) "eN" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plating/ironsand{ icon_state = "ironsand14" @@ -1371,12 +1366,12 @@ "eO" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, @@ -1384,16 +1379,16 @@ "eP" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, /area/awaymission/wildwest/refine) "eQ" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ icon_state = "fwindow" @@ -1403,12 +1398,12 @@ /area/awaymission/wildwest/refine) "eR" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ icon_state = "fwindow" @@ -1548,12 +1543,12 @@ /area/awaymission/wildwest/mines) "fj" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, @@ -1584,12 +1579,12 @@ /area/awaymission/wildwest/mines) "fo" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, @@ -1669,8 +1664,8 @@ /area/space/nearstation) "fz" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ icon_state = "fwindow" @@ -1679,12 +1674,12 @@ /area/space/nearstation) "fA" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/effect/spawner/structure/window/hollow/reinforced/directional, /turf/open/floor/plasteel, @@ -1749,19 +1744,19 @@ /area/awaymission/wildwest/mines) "fJ" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/grass, /area/awaymission/wildwest/gov) "fK" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/floor/grass, /area/awaymission/wildwest/gov) @@ -1773,15 +1768,15 @@ dir = 4 }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/floor/grass, /area/awaymission/wildwest/gov) "fN" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/lattice, /turf/open/space, @@ -1827,8 +1822,8 @@ /area/awaymission/wildwest/mines) "fU" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/grass, /area/awaymission/wildwest/gov) @@ -1844,17 +1839,17 @@ /area/awaymission/wildwest/gov) "fX" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /turf/open/floor/plasteel, /area/awaymission/wildwest/refine) @@ -1884,8 +1879,8 @@ /area/awaymission/wildwest/gov) "gc" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plasteel/airless, /area/space/nearstation) @@ -2006,24 +2001,24 @@ "gz" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /turf/open/floor/plasteel, /area/awaymission/wildwest/refine) "gA" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, @@ -2031,33 +2026,33 @@ "gB" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/grille, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /turf/open/floor/plasteel, /area/awaymission/wildwest/refine) "gC" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 1 + dir = 1; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, /area/awaymission/wildwest/refine) "gD" = ( /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/window/reinforced, /turf/open/floor/grass, @@ -2076,12 +2071,12 @@ "gG" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 4 + dir = 4; + icon_state = "fwindow" }, /obj/structure/window/reinforced{ - icon_state = "fwindow"; - dir = 8 + dir = 8; + icon_state = "fwindow" }, /obj/structure/grille, /turf/open/floor/plasteel, @@ -31916,9 +31911,9 @@ aN aN aN aN -aT -aT -aT +az +az +az aN aN aG @@ -32157,11 +32152,11 @@ aN aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN aN @@ -32171,10 +32166,10 @@ aN aN aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN @@ -32406,34 +32401,34 @@ aN aN aN aN -aT -aT +az +az aN aN aN aN aN aR -aT -aT -aT -aT -aT +az +az +az +az +az aN aN aN aN -aT +az aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN -aT +az aN aG aG @@ -32663,34 +32658,34 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az aN aN aN -aT -aT -aT +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aN aG aG @@ -32918,36 +32913,36 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aN aN aG @@ -33174,37 +33169,37 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN -aT -aT +az +az aw az -aT -aT -aT -aT +az +az +az +az aN aN aG @@ -33431,37 +33426,37 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aN aN aG @@ -33686,36 +33681,36 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az gV gV gV @@ -33941,38 +33936,38 @@ aW aW aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aP aN aN -aT -aT -aT +az +az +az gV gV gV @@ -34197,42 +34192,42 @@ aN aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT +az +az aN aN -aT -aT -aT +az +az +az aN aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aG aG @@ -34425,71 +34420,71 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT +az +az aN aN -aT -aT -aT +az +az +az aN aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aG aG @@ -34682,71 +34677,71 @@ aG aN aN aR -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aY -aT -aT -aT -aT -aT +az +az +az +az +az ba -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aY -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az bf -aT -aT -aT +az +az +az aR aN aN -aT +az gx aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN aN aN -aT -aT -aT +az +az +az aP aG aG @@ -34939,71 +34934,71 @@ aG aN aN aI -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT +az +az aP aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN aN aP aN -aT -aT +az +az aN aG aG @@ -35194,73 +35189,73 @@ aG aG aG aH -aT +az aI -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN aN -aT -aT -aT +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN -aT -aT -aT -aT +az +az +az +az aN aG aG @@ -35451,72 +35446,72 @@ aG aG aG aM -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bf -aT -aT -aT -aT -aT +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN -aT -aT -aT +az +az +az aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN -aT -aT -aT +az +az +az gY aN aN @@ -35708,15 +35703,15 @@ aG aG aG aI -aT -aT -aT -aT -aT +az +az +az +az +az aZ -aT -aT -aT +az +az +az bj bl bj @@ -35740,42 +35735,42 @@ bj bj bk bs -aT +az aY -aT -aT +az +az ej -aT -aT -aT -aT -aT +az +az +az +az +az aN aN aN -aT -aT -aT +az +az +az aN aN aN dw -aT -aT +az +az aN aN -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN aG aG @@ -35965,15 +35960,15 @@ aG aG aN aI -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj @@ -35997,42 +35992,42 @@ bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az aN aN aN -aT -aT +az +az aN aN aN -aT -aT -aT -aT +az +az +az +az aN aP -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aN aN -aT -aT -aT +az +az +az aN aG aG @@ -36222,15 +36217,15 @@ aG aG aN aR -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az be -aT -aT +az +az bj bj bj @@ -36254,42 +36249,42 @@ bk dy bj bj -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aZ -aT -aT -aT -aT +az +az +az +az aN aN aN -aT +az aN aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN -aT -aT -aT +az +az +az aN aG aG @@ -36479,15 +36474,15 @@ aG aG aN aM -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bp @@ -36511,42 +36506,42 @@ bj bj bj bj -aT -aT -aT -aT +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aN aN aN aN aN aP -aT +az ej -aT -aT +az +az aN aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aN aN -aT -aT -aT +az +az +az aN aG aG @@ -36736,74 +36731,74 @@ aG aG aM aM -aT -aT -aT -aT +az +az +az +az aY -aT -aT -aT -aT +az +az +az +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN aN aN aN aN -aT -aT +az +az ej -aT +az aN aN aN -aT -aT -aT -aT +az +az +az +az aN aN -aT -aT -aT +az +az +az aP aG aG @@ -36993,20 +36988,20 @@ aG aG aG aH -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bu bu @@ -37020,47 +37015,47 @@ bu bu bu bu -aT +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN aN -aT -aT +az +az aN aN -aT -aT -aT +az +az +az aN aG aG @@ -37251,19 +37246,19 @@ aG aG aN aH -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bx by @@ -37277,47 +37272,47 @@ cI cI cI bu -aT +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN aN -aT -aT +az +az aP aN -aT -aT -aT +az +az +az aN aG aG @@ -37508,19 +37503,19 @@ aG aG aN aH -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu by bU @@ -37534,12 +37529,12 @@ bE bj bj bu -aT +az bj bj bj bp -aT +az bu bu bu @@ -37553,28 +37548,28 @@ bu bu bu bu -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN aN aN -aT -aT +az +az aN aN aN -aT -aT +az +az aN aG aG @@ -37765,19 +37760,19 @@ aG aG aN aH -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu by bM @@ -37791,12 +37786,12 @@ bj bj bj bu -aT +az bj bj bj bj -aT +az bu by dV @@ -37810,28 +37805,28 @@ bj bj fp bu -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aN aN -aT +az ej -aT -aT +az +az aN aN aN -aT -aT +az +az aN aN -aT -aT +az +az aN aG aG @@ -38022,19 +38017,19 @@ aG aG aG aM -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bz bM @@ -38048,12 +38043,12 @@ cI cI cI bu -aT +az bj bj bj bj -aT +az bu by by @@ -38067,28 +38062,28 @@ bj bj bu bu -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aN aP -aT -aT -aT -aT +az +az +az +az aN aN -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aN aG aG @@ -38279,19 +38274,19 @@ aG aG aN aH -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bk bk bj bj -aT +az bu by bM @@ -38305,12 +38300,12 @@ bu bu bu bu -aT +az bj bj bj bj -aT +az bu by by @@ -38324,28 +38319,28 @@ bj bj fp bu -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aN aN -aT -aT +az +az aY -aT -aT +az +az aN aN aN -aT -aT -aT -aT +az +az +az +az aN aG aG @@ -38535,20 +38530,20 @@ aG aG aG aM -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bm bj bj -aT +az bu by bV @@ -38567,7 +38562,7 @@ du du bj bj -aT +az bu by by @@ -38581,7 +38576,7 @@ bj bj bu bu -aT +az bu bu bu @@ -38594,15 +38589,15 @@ aN aN aQ ej -aT +az aY aQ aN aN aN aP -aT -aT +az +az aN aG aG @@ -38792,20 +38787,20 @@ aG aG aG aM -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu by by @@ -38819,12 +38814,12 @@ bj bj bj ci -aT +az bm bj bj bj -aT +az bu by by @@ -38838,7 +38833,7 @@ bj dy fp bu -aT +az bu gf bj @@ -38847,14 +38842,14 @@ bj bj bj bu -aT -aT -aT -aT +az +az +az +az ej -aT -aT -aT +az +az +az aN aN aN @@ -39049,20 +39044,20 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bu bu @@ -39076,12 +39071,12 @@ bu bu bu bu -aT +az bj bj bj bj -aT +az bu by dW @@ -39095,7 +39090,7 @@ fe bk bu bu -aT +az bu bj bj @@ -39104,14 +39099,14 @@ dy bj bj bu -aT -aT +az +az aY -aT -aT -aT -aT -aT +az +az +az +az +az aN aN aG @@ -39307,19 +39302,19 @@ aG aG aN aR -aT -aT -aT -aT -aT +az +az +az +az +az bf -aT -aT +az +az bj bj bj bj -aT +az bu bA bj @@ -39333,12 +39328,12 @@ bj cY cY bu -aT +az bj bj bj bj -aT +az bu bu bu @@ -39352,7 +39347,7 @@ fe bj fp bu -aT +az bu bj bj @@ -39361,10 +39356,10 @@ bj bl bj bu -aT +az ej -aT -aT +az +az aQ aN aN @@ -39564,19 +39559,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bB bj @@ -39590,7 +39585,7 @@ bj bj bj dj -aT +az bj bj bk @@ -39609,7 +39604,7 @@ fe bj bu bu -aT +az bu bj bj @@ -39618,10 +39613,10 @@ bj bj bj bu -aT -aT -aT -aT +az +az +az +az aN aG aG @@ -39821,19 +39816,19 @@ aa aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bD bj @@ -39847,12 +39842,12 @@ bj bj bj dj -aT +az bj bj bj bj -aT +az bu bu bu @@ -39866,7 +39861,7 @@ fe bj bu bu -aT +az bu bj bl @@ -39875,7 +39870,7 @@ bj bp bj fs -aT +az aN aP aN @@ -40078,19 +40073,19 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aY -aT +az bj bj bj bj -aT +az bu bB bj @@ -40104,12 +40099,12 @@ bj bj bj bu -aT +az bj bj bj bm -aT +az bu dG dG @@ -40123,7 +40118,7 @@ bj bj fp bu -aT +az bu bj bj @@ -40132,7 +40127,7 @@ bj bj bj en -aT +az aN aN aG @@ -40335,19 +40330,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bD bj @@ -40361,12 +40356,12 @@ bj cZ cZ bu -aT +az bj bj bj bj -aT +az bu by by @@ -40380,7 +40375,7 @@ bj bj bu fs -aT +az bu bj gj @@ -40591,20 +40586,20 @@ aa aa aG aN -aT -aT -aT -aT +az +az +az +az aZ -aT -aT -aT -aT +az +az +az +az bj bj bj bj -aT +az bu bu bu @@ -40618,12 +40613,12 @@ bu bu bu bu -aT +az bj bj bj bj -aT +az bu by by @@ -40637,7 +40632,7 @@ bj bj fp bu -aT +az bu bj bj @@ -40849,38 +40844,38 @@ aa aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu by by @@ -40894,7 +40889,7 @@ bj bj bu bu -aT +az bu bj bl @@ -41106,14 +41101,14 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj @@ -41137,7 +41132,7 @@ bj bj bj bj -aT +az bu by by @@ -41151,7 +41146,7 @@ bj bj fp bu -aT +az bu bj dP @@ -41160,7 +41155,7 @@ bj bj bj bu -aT +az aN aN aG @@ -41362,14 +41357,14 @@ aa aa aG aG -aT -aT -aT -aT +az +az +az +az aY -aT -aT -aT +az +az +az bi bl bj @@ -41394,7 +41389,7 @@ bj bj bj bj -aT +az bu bu bu @@ -41417,7 +41412,7 @@ bj bj bj bu -aT +az aN aN aG @@ -41620,14 +41615,14 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj @@ -41651,20 +41646,20 @@ bj bj bj bj -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aY dt dt dt dt fr -aT +az aY fs bu @@ -41674,7 +41669,7 @@ eM bu bu bu -aT +az aN aN aG @@ -41877,14 +41872,14 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj @@ -41908,31 +41903,31 @@ bj cA bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az aY -aT +az fk aZ -aT +az fQ dt dt fC -aT -aT +az +az aY -aT -aT -aT -aT +az +az +az +az aN aG aG @@ -42133,39 +42128,39 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bu bu @@ -42188,8 +42183,8 @@ bu bu bu bu -aT -aT +az +az aN aG aG @@ -42390,20 +42385,20 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bu bu @@ -42417,12 +42412,12 @@ bu bu bu bu -aT +az bj bj bj bj -aT +az bu bj bj @@ -42435,7 +42430,7 @@ bj bj bj bu -aT +az bu fY bj @@ -42445,7 +42440,7 @@ bj bj bj bu -aT +az aN aN aG @@ -42648,19 +42643,19 @@ aa aG aN aN -aT -aT -aT -aT -aT +az +az +az +az +az aZ -aT -aT +az +az bj bj bj bj -aT +az bu bF bF @@ -42674,12 +42669,12 @@ bj da bj bu -aT +az bj bj bj bj -aT +az bu dH bj @@ -42702,7 +42697,7 @@ bj bj bj bu -aT +az aN aN aG @@ -42905,19 +42900,19 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bm bj bj -aT +az bu bF bF @@ -42931,12 +42926,12 @@ bj bD bj bu -aT +az bj bj bj bj -aT +az bu bj bj @@ -42949,7 +42944,7 @@ bj bj bj bu -aT +az bu bj bj @@ -42959,7 +42954,7 @@ bj cA bj bu -aT +az aN aN aG @@ -43162,19 +43157,19 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bF bF @@ -43188,12 +43183,12 @@ bj db bj bu -aT +az bj bj bm bj -aT +az bu dH bj @@ -43206,7 +43201,7 @@ eF bj bj eM -aT +az bu bj bj @@ -43216,7 +43211,7 @@ bj bj bj eM -aT +az aN aN aG @@ -43419,19 +43414,19 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bF bF @@ -43445,12 +43440,12 @@ bj bj bj dj -aT +az bj bj bj bj -aT +az bu bj bj @@ -43463,7 +43458,7 @@ bj bj bj bu -aT +az bu bj dy @@ -43473,7 +43468,7 @@ gw bj bj dj -aT +az aN aN aG @@ -43677,18 +43672,18 @@ aG aG aN aN -aT -aT -aT +az +az +az aZ -aT -aT -aT +az +az +az bj bj bj bj -aT +az bu bF bF @@ -43702,12 +43697,12 @@ bj da bj dj -aT +az bj bj bj bj -aT +az bu dH bj @@ -43720,7 +43715,7 @@ dH bj bj bu -aT +az eM bj cA @@ -43730,8 +43725,8 @@ bj bj bj dj -aT -aT +az +az aN aG aG @@ -43933,19 +43928,19 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bF bF @@ -43959,12 +43954,12 @@ bj bD bj dj -aT +az bj bj bj bj -aT +az bu bj bj @@ -43987,8 +43982,8 @@ dy bk bj bu -aT -aT +az +az aN aG aG @@ -44190,19 +44185,19 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bm -aT +az bu bF bF @@ -44216,12 +44211,12 @@ bj db bj bu -aT +az bj bj bj bj -aT +az bu dH bj @@ -44244,7 +44239,7 @@ bj bj bj bu -aT +az aN aN aN @@ -44448,18 +44443,18 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bD bj @@ -44473,12 +44468,12 @@ bj bj bj bu -aT +az bj bj bj bj -aT +az bu bj bj @@ -44501,7 +44496,7 @@ bj bj bj bu -aT +az aN aN aN @@ -44704,19 +44699,19 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az gH bD bj @@ -44730,12 +44725,12 @@ bj da bj bu -aT +az dv bj bj bj -aT +az bu dH bj @@ -44748,7 +44743,7 @@ dH bj bj bu -aT +az bu bj bj @@ -44758,8 +44753,8 @@ dP bj bj bu -aT -aT +az +az aN aN aG @@ -44961,19 +44956,19 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bk bj bj bj -aT +az bu bD bj @@ -44987,12 +44982,12 @@ bj bD bj bu -aT +az bj bk bj bj -aT +az bu bj bj @@ -45005,7 +45000,7 @@ bj bj bj bu -aT +az bu bj bj @@ -45015,8 +45010,8 @@ bj bj bj bu -aT -aT +az +az aN aN aG @@ -45219,18 +45214,18 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bG bj @@ -45244,12 +45239,12 @@ bj db bj gH -aT +az bj bj bj bj -aT +az bu bu bu @@ -45262,7 +45257,7 @@ bu bu bu bu -aT +az bu bu dm @@ -45475,19 +45470,19 @@ aG aG aN aN -aT -aT -aT +az +az +az ba -aT -aT +az +az bf -aT +az bj bj bj bj -aT +az bu bD bj @@ -45501,37 +45496,37 @@ bj bj bj bu -aT +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az eK -aT -aT -aT +az +az +az fr -aT -aT -aT -aT -aT +az +az +az +az +az dw -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aN aG aG @@ -45731,20 +45726,20 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bH bj @@ -45758,7 +45753,7 @@ bj da bj bu -aT +az bj bj bj @@ -45783,11 +45778,11 @@ bj bj bj bj -aT +az aZ -aT -aT -aT +az +az +az aN aN aG @@ -45989,19 +45984,19 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bk -aT +az bu bI bj @@ -46040,11 +46035,11 @@ bl gk bj bj -aT -aT -aT -aT -aT +az +az +az +az +az aN aG aG @@ -46246,19 +46241,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bD bj @@ -46297,11 +46292,11 @@ bj bj bj bj -aT -aT -aT -aT -aT +az +az +az +az +az aN aG aG @@ -46502,20 +46497,20 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bD bj @@ -46529,7 +46524,7 @@ bj bj bj bu -aT +az bj bj bj @@ -46554,10 +46549,10 @@ bj bj bj bj -aT -aT -aT -aT +az +az +az +az aN aN aG @@ -46760,19 +46755,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bp bj bj -aT +az bu bj bj @@ -46786,7 +46781,7 @@ bj da bj bu -aT +az bj bj bj @@ -47018,18 +47013,18 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bj bj @@ -47043,7 +47038,7 @@ bj bD bj bu -aT +az bj bj bj @@ -47274,19 +47269,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bj bj @@ -47300,7 +47295,7 @@ bj db bj bu -aT +az bm bj bj @@ -47531,19 +47526,19 @@ aG aG aN aN -aT -aT -aT -aT +az +az +az +az aY -aT -aT -aT +az +az +az bj bj bj bj -aT +az bu bj bj @@ -47557,7 +47552,7 @@ bj bj bj bu -aT +az bj bj bl @@ -47787,20 +47782,20 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bj bj @@ -47814,7 +47809,7 @@ bj da bj bu -aT +az bj bj bj @@ -48046,18 +48041,18 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az bj bj bj bj -aT +az bu by by @@ -48071,7 +48066,7 @@ bj bD bj bu -aT +az bj bj bj @@ -48303,18 +48298,18 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az bm bj bj bj -aT +az bu by by @@ -48328,7 +48323,7 @@ bj db bj dj -aT +az bj bj cA @@ -48560,18 +48555,18 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az bm bj bj bj -aT +az bu bJ by @@ -48585,7 +48580,7 @@ bj bj bj dj -aT +az bj bj bj @@ -48816,19 +48811,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bK by @@ -48842,7 +48837,7 @@ bj da bj dj -aT +az bj bj bm @@ -49073,19 +49068,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bL by @@ -49099,7 +49094,7 @@ bj bD bj bu -aT +az bj bj bj @@ -49330,19 +49325,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bM by @@ -49356,7 +49351,7 @@ bj db bj bu -aT +az bj bj bj @@ -49587,19 +49582,19 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bN by @@ -49613,7 +49608,7 @@ bj bj bj bu -aT +az bj bj bj @@ -49843,20 +49838,20 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT +az bu bu bu @@ -49870,7 +49865,7 @@ bu bu bu bu -aT +az bj bj bj @@ -50100,34 +50095,34 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj bj -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bj bj bj @@ -50357,15 +50352,15 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bj bj bj @@ -50615,14 +50610,14 @@ aG aG aN aN -aT -aT -aT -aT +az +az +az +az aZ -aT -aT -aT +az +az +az bj bj bj @@ -50872,14 +50867,14 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bm @@ -51129,14 +51124,14 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az bj bj bj @@ -51385,38 +51380,38 @@ aG aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bu dE bj @@ -51642,38 +51637,38 @@ aa aG aG aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bf -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bu bu bu @@ -51901,36 +51896,36 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az aY -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az cB -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az bu bj dM @@ -52158,36 +52153,36 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aZ -aT -aT +az +az ba -aT -aT -aT -aT -aT +az +az +az +az +az bu bj cA @@ -52415,36 +52410,36 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az dw -aT -aT -aT +az +az +az bu bj bj @@ -52672,36 +52667,36 @@ aG aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az dj bj bj @@ -52929,36 +52924,36 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az dj bj bl @@ -53189,33 +53184,33 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az aZ -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az aZ -aT -aT +az +az bu bj bj @@ -53446,33 +53441,33 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aY -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az bu bj bj @@ -53702,34 +53697,34 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bu bj dP @@ -53959,34 +53954,34 @@ aN aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az bu bj bj @@ -54216,34 +54211,34 @@ aG aG aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az +az +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az +az bu bu dQ @@ -54476,31 +54471,31 @@ aG aG aN aN -aT -aT -aT +az +az +az aN aN -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az aN aN aN -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT +az +az +az +az +az +az +az +az +az +az aN aN aN @@ -54738,25 +54733,25 @@ aN aN aN aN -aT -aT +az +az aN aN aN -aT -aT -aT +az +az +az aN aN -aT -aT -aT -aT +az +az +az +az aN -aT +az aN aN -aT +az aN aN aN diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index f7245ef535..ad4dd9ad26 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -1000,7 +1000,7 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hos) "act" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "acu" = ( @@ -3551,7 +3551,7 @@ /turf/open/floor/plasteel, /area/security/brig) "agU" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "agV" = ( @@ -19903,7 +19903,6 @@ /turf/open/floor/plasteel, /area/bridge) "aVk" = ( -/obj/machinery/holopad, /obj/structure/cable{ icon_state = "4-8" }, @@ -19913,6 +19912,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/bridge) "aVl" = ( @@ -22726,10 +22726,10 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "bcf" = ( -/obj/machinery/holopad, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "bcg" = ( @@ -23322,10 +23322,10 @@ /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet/locker) "bdK" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/bridge/meeting_room) "bdL" = ( @@ -24223,6 +24223,7 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/lapvend, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bgb" = ( @@ -24557,10 +24558,10 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/holopad, /obj/structure/cable{ icon_state = "2-8" }, +/obj/machinery/holopad/secure, /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bgX" = ( @@ -28662,7 +28663,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "bqB" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/crew_quarters/heads/hop) "bqC" = ( @@ -30845,6 +30846,7 @@ /area/science) "bvF" = ( /obj/machinery/requests_console{ + announcementConsole = 1; department = "Cargo Bay"; departmentType = 2; pixel_x = -30 @@ -32044,7 +32046,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "byr" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hor) "bys" = ( @@ -32134,13 +32136,13 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "byC" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/brown{ dir = 1 }, /obj/effect/turf_decal/tile/brown{ dir = 4 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/quartermaster/qm) "byD" = ( @@ -35875,13 +35877,13 @@ /turf/open/floor/engine, /area/science/storage) "bGZ" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "bHa" = ( @@ -40808,8 +40810,8 @@ /turf/open/floor/plasteel, /area/security/checkpoint/engineering) "bTI" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/tcommsat/computer) "bTJ" = ( @@ -45386,7 +45388,6 @@ name = "Privacy Shutters Control"; pixel_y = 26 }, -/obj/machinery/holopad, /obj/machinery/light{ dir = 1 }, @@ -45400,6 +45401,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) "cfI" = ( @@ -49627,12 +49629,12 @@ /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "ctJ" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ icon_state = "2-8" }, /obj/effect/landmark/start/cyborg, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "ctK" = ( @@ -50017,9 +50019,9 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/atmos) "cuC" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/start/cyborg, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/atmos) "cuD" = ( @@ -50074,12 +50076,12 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/landmark/start/cyborg, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "cuH" = ( @@ -50105,10 +50107,10 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/service) "cuJ" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/service) "cuK" = ( @@ -50675,8 +50677,8 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/hallway) "cvU" = ( @@ -50931,10 +50933,10 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "cwB" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 4e2b009c79..3761c6765e 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -25899,7 +25899,6 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "aVU" = ( -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -25907,6 +25906,7 @@ icon_state = "1-8" }, /obj/effect/turf_decal/bot, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/quartermaster/qm) "aVV" = ( @@ -36419,7 +36419,6 @@ /turf/open/floor/plasteel/dark, /area/aisat) "boh" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -36430,6 +36429,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/aisat) "boi" = ( @@ -37166,13 +37166,13 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "bpv" = ( -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "bpw" = ( @@ -46877,7 +46877,6 @@ /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "bEg" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -46888,6 +46887,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "bEh" = ( @@ -48308,12 +48308,12 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "bFZ" = ( -/obj/machinery/holopad, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bGa" = ( @@ -54052,10 +54052,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "2-8" }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bOL" = ( @@ -54114,7 +54114,6 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bOR" = ( -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -54123,6 +54122,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, +/obj/machinery/holopad/secure, /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bOS" = ( @@ -56069,8 +56069,8 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) "bRZ" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/bot, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "bSa" = ( @@ -58451,7 +58451,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/holopad, /obj/effect/landmark/start/cyborg, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -58463,6 +58462,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "bVy" = ( @@ -58795,7 +58795,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/holopad, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -58806,6 +58805,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/aisat) "bVT" = ( @@ -64575,7 +64575,6 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) "ceH" = ( -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -64586,6 +64585,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, +/obj/machinery/holopad/secure, /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) "ceI" = ( @@ -65455,10 +65455,6 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/kirbyplants/random, -/obj/structure/sign/plaques/kiddie/library{ - pixel_x = -32 - }, /turf/open/floor/wood, /area/library) "cfW" = ( @@ -66125,11 +66121,11 @@ /turf/open/floor/plasteel, /area/security/brig) "chd" = ( -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/effect/turf_decal/bot, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/security/brig) "che" = ( @@ -66303,7 +66299,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -66317,6 +66312,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "cho" = ( @@ -67663,10 +67659,10 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hop) "cjC" = ( -/obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hop) "cjD" = ( @@ -78882,20 +78878,20 @@ /turf/open/floor/plating, /area/maintenance/port) "cCN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/structure/table, +/obj/item/stack/sheet/metal/five, +/obj/item/circuitboard/machine/paystand, +/obj/item/radio/intercom{ + pixel_y = 26 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/brown{ dir = 4 }, -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/maintenance/port) +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "cCO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ @@ -78908,10 +78904,6 @@ heat_capacity = 1e+006 }, /area/maintenance/port) -"cCP" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/maintenance/port) "cCQ" = ( /obj/machinery/door/window/northleft{ dir = 4; @@ -79915,12 +79907,6 @@ /turf/open/floor/plasteel/dark, /area/library) "cEv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -79931,78 +79917,62 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/library) -"cEw" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "cEx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/structure/table, +/obj/item/storage/secure/briefcase, +/obj/structure/sign/poster/random, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "cEy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, -/area/maintenance/port) +/area/vacant_room/commissary) "cEz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/chair/stool, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) +"cEA" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, -/area/maintenance/port) -"cEA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "commissaryshutters"; + name = "Vacant Commissary Shutters" }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, -/area/maintenance/port) +/area/vacant_room/commissary) "cEB" = ( /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/fifty, @@ -80890,16 +80860,18 @@ /turf/open/floor/plasteel/dark/corner, /area/maintenance/port) "cGd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/west, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/brown{ dir = 8 }, /turf/open/floor/plasteel, -/area/maintenance/port) +/area/vacant_room/commissary) "cGe" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ @@ -81639,9 +81611,6 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -81654,88 +81623,86 @@ /turf/open/floor/plasteel, /area/maintenance/port) "cHA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/vacant_room/commissary) "cHB" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/port) -"cHC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/maintenance/port) -"cHD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/maintenance/port) "cHE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4; - name = "Library Junction"; - sortType = 16 +/obj/structure/closet/secure_closet/personal, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 }, -/turf/open/floor/plating, -/area/maintenance/port) -"cHF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ - dir = 4 + dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/brown{ dir = 8 }, /turf/open/floor/plasteel, -/area/maintenance/port) +/area/vacant_room/commissary) +"cHF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Vacant Commissary"; + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "cHG" = ( -/obj/structure/girder, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel, +/area/vacant_room/commissary) +"cHH" = ( +/obj/structure/rack, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/obj/machinery/button/door{ + id = "commissarydoor"; + name = "Commissary Door Lock"; + normaldoorcontrol = 1; + pixel_x = -5; + pixel_y = -26; + specialfunctions = 4 + }, +/obj/item/stack/cable_coil/yellow, +/obj/item/wrench, +/obj/item/screwdriver, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/port) -"cHH" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "cHI" = ( /obj/structure/sign/directions/engineering{ desc = "A sign that shows there are doors here. There are doors everywhere!"; @@ -82102,43 +82069,25 @@ }, /turf/open/floor/plasteel, /area/maintenance/port) -"cIt" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/port) "cIu" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/maintenance/port) "cIv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/port) -"cIw" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/closed/wall, +/area/vacant_room/commissary) "cIx" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) +/turf/closed/wall, +/area/vacant_room/commissary) "cIy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/closed/wall, -/area/maintenance/port) +/area/vacant_room/commissary) "cIA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -83232,7 +83181,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment{ - dir = 9 + dir = 4 }, /turf/open/floor/plating, /area/maintenance/port) @@ -83281,6 +83230,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/maintenance/port) "cKn" = ( @@ -83289,7 +83241,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -83297,6 +83248,13 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance_hatch, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -83308,10 +83266,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/maintenance/port) "cKp" = ( @@ -83321,6 +83281,15 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, /turf/open/floor/plating, /area/maintenance/port) "cKq" = ( @@ -83334,7 +83303,10 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 5 + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "2-4" }, /turf/open/floor/plating, /area/maintenance/port) @@ -83351,10 +83323,6 @@ /turf/open/floor/plating, /area/maintenance/port) "cKs" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" @@ -83368,6 +83336,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/door/airlock{ + name = "Miscellaneous Storage" + }, /turf/open/floor/plasteel, /area/maintenance/port) "cKt" = ( @@ -84246,7 +84217,12 @@ /area/maintenance/port) "cLL" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/port) "cLM" = ( @@ -84254,6 +84230,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/radio, /turf/open/floor/plating, /area/maintenance/port) "cLN" = ( @@ -85105,6 +85082,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/space_heater, /turf/open/floor/plasteel, /area/maintenance/port) "cNl" = ( @@ -91104,9 +91082,6 @@ /turf/open/floor/plasteel/white, /area/science/research) "cXw" = ( -/obj/structure/table, -/obj/item/gps, -/obj/item/assembly/flash/handheld, /obj/machinery/status_display/evac{ pixel_y = -32 }, @@ -91114,6 +91089,7 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/lapvend, /turf/open/floor/plasteel/white, /area/science/research) "cXx" = ( @@ -100440,6 +100416,13 @@ }, /turf/open/floor/plasteel, /area/maintenance/starboard/aft) +"dnV" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "dnZ" = ( /obj/machinery/light/small{ dir = 8 @@ -102510,10 +102493,10 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hor) "drY" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/purple{ dir = 1 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hor) "drZ" = ( @@ -106349,10 +106332,10 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/crate/freezer/blood, /turf/open/floor/plasteel/dark, /area/medical/surgery) "dyK" = ( -/obj/structure/closet/crate/freezer/blood, /obj/machinery/vending/wallmed{ name = "Emergency NanoMed"; pixel_x = 26; @@ -106368,6 +106351,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/limbgrower, /turf/open/floor/plasteel/dark, /area/medical/surgery) "dyL" = ( @@ -107085,7 +107069,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -107093,6 +107076,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/cmo) "dAd" = ( @@ -125453,7 +125437,7 @@ /turf/open/floor/plasteel, /area/medical/medbay/central) "fmW" = ( -/obj/structure/sign/painting/library_secure{ +/obj/structure/sign/painting/library{ pixel_y = 32 }, /turf/open/floor/wood, @@ -125725,10 +125709,31 @@ }, /turf/open/floor/plasteel, /area/maintenance/port/aft) +"hBD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "hCj" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/starboard/fore) +"hEK" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/item/flashlight, +/turf/open/floor/plating, +/area/maintenance/port) "hFo" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -125786,6 +125791,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/medbay/central) +"hVv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "hZh" = ( /turf/open/space/basic, /area/space/station_ruins) @@ -125866,6 +125881,16 @@ }, /turf/open/floor/engine/vacuum, /area/science/mixing) +"iAP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "iBf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -125991,6 +126016,16 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"iWB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "jdx" = ( /obj/structure/lattice, /obj/structure/grille, @@ -126156,6 +126191,15 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plating, /area/engine/atmos) +"jIP" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "jNQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/visible, @@ -126178,6 +126222,17 @@ /obj/machinery/chem_master, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) +"jQw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "jRy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -126266,6 +126321,29 @@ /obj/structure/bodycontainer/morgue, /turf/open/floor/plasteel/dark, /area/chapel/office) +"kuj" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "commissaryshutters"; + name = "Commissary Shutters Control"; + pixel_x = 26; + pixel_y = -5; + req_access_txt = null + }, +/obj/item/storage/secure/safe{ + pixel_y = 32 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "kvf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -126730,6 +126808,23 @@ }, /turf/open/floor/plasteel, /area/maintenance/port/aft) +"nxi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/port) "nyN" = ( /obj/machinery/vending/kink, /turf/open/floor/plating, @@ -126803,6 +126898,15 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"nZO" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "odz" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -126860,6 +126964,15 @@ /obj/machinery/door/airlock/research/glass/incinerator/toxmix_exterior, /turf/open/floor/engine, /area/science/mixing) +"oLk" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/library) "oMw" = ( /obj/docking_port/stationary/public_mining_dock{ dir = 4 @@ -126975,6 +127088,11 @@ dir = 1 }, /area/science/circuit) +"pnh" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "pok" = ( /mob/living/simple_animal/opossum/poppy, /turf/open/floor/plasteel/grimy, @@ -127045,6 +127163,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"pLE" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "pQm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -127140,6 +127265,25 @@ dir = 5 }, /area/science/circuit) +"qzY" = ( +/obj/structure/table, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "qBG" = ( /obj/effect/spawner/lootdrop/keg, /turf/open/floor/plating, @@ -127173,6 +127317,11 @@ dir = 9 }, /area/science/circuit) +"rkW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/vacant_room/commissary) "rCv" = ( /turf/open/floor/plasteel/white/side{ dir = 6 @@ -127261,6 +127410,25 @@ /obj/machinery/door/poddoor/incinerator_toxmix, /turf/open/floor/engine/vacuum, /area/science/mixing) +"svJ" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "sAr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown{ @@ -127276,6 +127444,11 @@ /obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/medical/surgery) +"sGr" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "sPd" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -127444,6 +127617,14 @@ /obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/chapel/office) +"ueh" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/maintenance/port) "upk" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Access" @@ -127519,6 +127700,11 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"uEc" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "uNP" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line{ @@ -127571,6 +127757,18 @@ /obj/item/clothing/under/color/grey, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"vkk" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4; + name = "Library Junction"; + sortType = 20 + }, +/turf/open/floor/plating, +/area/maintenance/port) "voA" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -127619,6 +127817,24 @@ /obj/effect/landmark/start/cyborg, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"vza" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "commissaryshutters"; + name = "Vacant Commissary Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "vAb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -127723,6 +127939,17 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/circuit) +"wiA" = ( +/obj/machinery/door/airlock{ + id_tag = "commissarydoor"; + name = "Commissary" + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/maintenance/port) "wlT" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -127909,6 +128136,12 @@ }, /turf/open/floor/plasteel, /area/science/research/abandoned) +"xzz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall, +/area/library) "xDZ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -157781,7 +158014,7 @@ cCG cEo cwp cHz -cIt +cqL cKi cLI cNd @@ -158037,9 +158270,9 @@ caG caG caG caG -cHA +cea ceb -cKj +nxi cLI cNc cNc @@ -158294,9 +158527,9 @@ cBa cCH cEp caG -cHB +ceb cjp -cKk +cJZ cLI cNd cNd @@ -158551,9 +158784,9 @@ cBb cxV cEq caG -cHC +cCO cea -cKk +cJZ cLI cNg cOM @@ -158808,9 +159041,9 @@ cBc cCI ehP caG -cHA +cea ceb -cKk +cJZ cLI cNd cNd @@ -159065,9 +159298,9 @@ cBd cCJ cEr caG -cHA +cea cIu -cKl +cKa cLI cNc cNc @@ -159322,9 +159555,9 @@ cBe ckR cEs caG -cHA +cea cjp -cKl +cKa cLI cNh cNh @@ -159579,9 +159812,9 @@ cBf cCK cEt caG -cHB +ceb cjp -cKj +nxi cLI cNh cOO @@ -159836,7 +160069,7 @@ cBg cCL cEu caG -cHD +cJK caE cKm cLI @@ -160092,10 +160325,10 @@ czJ cBh cCK cEv -caG +oLk cHB -cjp -cKk +ueh +vkk cLI cNh cOQ @@ -160347,13 +160580,13 @@ caG caG caG caG -cnL -cEw -caG +xzz +cvl +cvl cHA -ceb -cKk -cLI +rkW +cKh +cLJ cNh cNh cNh @@ -160604,7 +160837,7 @@ cwv cyc czK caG -cCM +qzY cEx cGd cHE @@ -160862,10 +161095,10 @@ cyd czL caG cCN -ccl -ccl +uEc +iWB cHF -ccl +cIv cKo cLL cNj @@ -161118,11 +161351,11 @@ cwx cye czM caG -cCO +hBD cEy -cGe +iAP cHG -cIu +wiA cKp cLM cNk @@ -161375,11 +161608,11 @@ cwy cyf czN caG -cea +kuj cEz -ceb +jQw cHH -cIw +cIv cKq cLN cAV @@ -161632,13 +161865,13 @@ cwz cyg czO caG -cCP -cEA -cjp +cIv cEA +vza +cIv cIx cKr -cLO +hEK cNl cOU cQC @@ -161889,10 +162122,10 @@ caG caG caG caG -caE -caE -caE -caE +sGr +pLE +dnV +pnh cIy cKs cLP @@ -162147,8 +162380,8 @@ cyh bvL bvL bvL -bvL -bvL +hVv +nZO bvL cjw cKt @@ -162404,7 +162637,7 @@ bvM bMP bvM bvM -bvM +svJ bvM bvM bFE @@ -162661,7 +162894,7 @@ brb czP brb brb -brb +jIP brb brb cIA diff --git a/_maps/map_files/LambdaStation/dorms.dmm b/_maps/map_files/LambdaStation/dorms.dmm index 0ed1b0203c..6fe0bb5268 100644 --- a/_maps/map_files/LambdaStation/dorms.dmm +++ b/_maps/map_files/LambdaStation/dorms.dmm @@ -2425,8 +2425,8 @@ "go" = ( /obj/machinery/camera/autoname, /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -2572,8 +2572,8 @@ "gO" = ( /obj/machinery/space_heater, /obj/structure/railing/corner{ - icon_state = "railing_corner"; - dir = 8 + dir = 8; + icon_state = "railing_corner" }, /turf/open/floor/plating, /area/maintenance/central) @@ -5594,8 +5594,8 @@ /area/maintenance/solars/starboard) "oy" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 4 + dir = 4; + icon_state = "railing" }, /turf/open/floor/plating, /area/maintenance/central) @@ -7058,8 +7058,8 @@ /area/hydroponics) "sn" = ( /obj/structure/railing/corner{ - icon_state = "railing_corner"; - dir = 8 + dir = 8; + icon_state = "railing_corner" }, /turf/open/floor/plating, /area/maintenance/central) @@ -7083,8 +7083,8 @@ /area/asteroid/nearstation) "sr" = ( /obj/structure/railing/corner{ - icon_state = "railing_corner"; - dir = 4 + dir = 4; + icon_state = "railing_corner" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -12130,8 +12130,8 @@ /area/hallway/secondary/service) "Fw" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /turf/open/floor/plating, /area/maintenance/central) @@ -13656,8 +13656,8 @@ /area/janitor) "IY" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /obj/structure/cable{ icon_state = "1-2" @@ -14004,8 +14004,8 @@ /area/vacant_room/commissary) "JT" = ( /obj/docking_port/stationary/public_mining_dock{ - icon_state = "pinonfar"; - dir = 2 + dir = 2; + icon_state = "pinonfar" }, /turf/open/floor/plating, /area/construction/mining/aux_base) @@ -14423,8 +14423,8 @@ /area/crew_quarters/kitchen) "KX" = ( /obj/structure/railing/corner{ - icon_state = "railing_corner"; - dir = 1 + dir = 1; + icon_state = "railing_corner" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -14469,8 +14469,8 @@ /area/hallway/secondary/service) "Le" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 5 + dir = 5; + icon_state = "railing" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -14493,8 +14493,8 @@ /area/crew_quarters/fitness/recreation) "Lg" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /obj/machinery/power/apc{ areastring = "/area/hallway/secondary/construction"; @@ -15478,8 +15478,8 @@ /area/maintenance/department/crew_quarters/dorms) "NG" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 9 + dir = 9; + icon_state = "railing" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -16723,8 +16723,8 @@ /area/crew_quarters/fitness/recreation) "QT" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -16896,8 +16896,8 @@ /area/gateway) "Rx" = ( /obj/structure/railing/corner{ - icon_state = "railing_corner"; - dir = 8 + dir = 8; + icon_state = "railing_corner" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) @@ -16929,8 +16929,8 @@ /area/gateway) "RA" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 4 + dir = 4; + icon_state = "railing" }, /turf/open/floor/grass, /area/hydroponics/garden/monastery) diff --git a/_maps/map_files/Mafia/mafia_lavaland.dmm b/_maps/map_files/Mafia/mafia_lavaland.dmm index 8c58fb9054..72d2934b4f 100644 --- a/_maps/map_files/Mafia/mafia_lavaland.dmm +++ b/_maps/map_files/Mafia/mafia_lavaland.dmm @@ -61,16 +61,16 @@ "n" = ( /obj/effect/landmark/mafia, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 9 + dir = 9; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/corner, /turf/open/floor/plasteel, /area/mafia) "o" = ( /obj/effect/turf_decal/trimline/brown/filled/end{ - icon_state = "trimline_end_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_end_fill" }, /obj/structure/closet{ desc = "It's a storage unit. For mining stuff. Y'know."; @@ -94,8 +94,8 @@ /area/mafia) "r" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 9 + dir = 9; + icon_state = "trimline_fill" }, /obj/structure/closet{ desc = "It's a storage unit. For mining stuff. Y'know."; @@ -107,8 +107,8 @@ /area/mafia) "s" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 9 + dir = 9; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) @@ -134,31 +134,31 @@ /area/mafia) "w" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/corner, /turf/open/floor/plasteel, /area/mafia) "x" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/plasteel, /area/mafia) "y" = ( /obj/effect/turf_decal/trimline/brown/filled/end{ - icon_state = "trimline_end_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_end_fill" }, /turf/open/floor/plasteel, /area/mafia) "z" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 5 + dir = 5; + icon_state = "trimline_fill" }, /obj/structure/closet{ desc = "It's a storage unit. For mining stuff. Y'know."; @@ -171,70 +171,70 @@ "A" = ( /obj/effect/landmark/mafia, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 6 + dir = 6; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "B" = ( /obj/effect/turf_decal/trimline/brown/filled/end{ - icon_state = "trimline_end_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_end_fill" }, /turf/open/floor/plasteel, /area/mafia) "C" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "D" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 10 + dir = 10; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/corner{ - icon_state = "trimline_corner_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_corner_fill" }, /turf/open/floor/plasteel, /area/mafia) "E" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/corner{ - icon_state = "trimline_corner_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_corner_fill" }, /turf/open/floor/plasteel, /area/mafia) "F" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 5 + dir = 5; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "G" = ( /obj/effect/landmark/mafia, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 10 + dir = 10; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "H" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 10 + dir = 10; + icon_state = "trimline_fill" }, /obj/structure/closet{ desc = "It's a storage unit. For mining stuff. Y'know."; @@ -246,8 +246,8 @@ /area/mafia) "I" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 6 + dir = 6; + icon_state = "trimline_fill" }, /obj/structure/closet{ desc = "It's a storage unit. For mining stuff. Y'know."; @@ -260,19 +260,19 @@ "J" = ( /obj/effect/landmark/mafia, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 6 + dir = 6; + icon_state = "trimline_fill" }, /obj/effect/turf_decal/trimline/brown/filled/corner{ - icon_state = "trimline_corner_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_corner_fill" }, /turf/open/floor/plasteel, /area/mafia) "K" = ( /obj/effect/turf_decal/trimline/brown/filled/end{ - icon_state = "trimline_end_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_end_fill" }, /obj/structure/closet{ desc = "It's a storage unit. For mining stuff. Y'know."; @@ -285,34 +285,34 @@ "L" = ( /obj/effect/landmark/mafia, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 5 + dir = 5; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "M" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 10 + dir = 10; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "N" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/effect/turf_decal/trimline/brown/filled/corner{ - icon_state = "trimline_corner_fill"; - dir = 4 + dir = 4; + icon_state = "trimline_corner_fill" }, /turf/open/floor/plasteel, /area/mafia) "O" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ - icon_state = "trimline_corner_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_corner_fill" }, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 5 + dir = 5; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) @@ -323,8 +323,8 @@ "Q" = ( /obj/effect/landmark/mafia, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 9 + dir = 9; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) @@ -345,31 +345,31 @@ /area/mafia) "S" = ( /obj/effect/turf_decal/trimline/brown/filled/end{ - icon_state = "trimline_end_fill"; - dir = 8 + dir = 8; + icon_state = "trimline_end_fill" }, /turf/open/floor/plasteel, /area/mafia) "T" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) "U" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/effect/turf_decal/trimline/brown/filled/corner{ - icon_state = "trimline_corner_fill"; - dir = 1 + dir = 1; + icon_state = "trimline_corner_fill" }, /turf/open/floor/plasteel, /area/mafia) "V" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ - icon_state = "trimline_fill"; - dir = 6 + dir = 6; + icon_state = "trimline_fill" }, /turf/open/floor/plasteel, /area/mafia) diff --git a/_maps/map_files/Mafia/mafia_reebe.dmm b/_maps/map_files/Mafia/mafia_reebe.dmm index e82174ff93..c8f7e0a1ae 100644 --- a/_maps/map_files/Mafia/mafia_reebe.dmm +++ b/_maps/map_files/Mafia/mafia_reebe.dmm @@ -62,8 +62,8 @@ /area/mafia) "n" = ( /obj/structure/chair/brass{ - icon_state = "brass_chair"; - dir = 1 + dir = 1; + icon_state = "brass_chair" }, /turf/open/floor/clockwork/reebe, /area/mafia) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index c2a0e5c353..f08d238292 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -3710,7 +3710,6 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "agS" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -3721,6 +3720,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "agT" = ( @@ -3795,11 +3795,11 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "agZ" = ( -/obj/machinery/holopad, /obj/structure/chair{ dir = 1 }, /obj/effect/landmark/start/head_of_security, +/obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "aha" = ( @@ -9617,8 +9617,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/obj/machinery/holopad, /obj/effect/turf_decal/stripes/line, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/engine/gravity_generator) "arR" = ( @@ -13304,13 +13304,6 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space/nearstation) -"aze" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/wood, -/area/library) "azg" = ( /obj/item/stack/cable_coil, /turf/open/floor/plating/airless, @@ -14062,18 +14055,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/engineering) -"aAz" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 30 - }, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel/cult, -/area/library) "aAA" = ( /obj/docking_port/stationary{ dir = 8; @@ -14907,6 +14888,12 @@ }, /turf/open/floor/plasteel/dark, /area/security/nuke_storage) +"aCi" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/library) "aCj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -16576,14 +16563,17 @@ /turf/open/floor/engine, /area/engine/engineering) "aFE" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/structure/table/wood/fancy/blue, +/obj/structure/table/wood/fancy/royalblue, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 }, -/obj/item/folder, -/obj/item/folder, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel/cult, +/obj/machinery/door/window{ + dir = 8; + name = "Secure Art Exhibition"; + req_access_txt = "37" + }, +/turf/open/floor/wood, /area/library) "aFF" = ( /obj/structure/table, @@ -20575,7 +20565,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "aOc" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "aOd" = ( @@ -21700,7 +21690,7 @@ /area/quartermaster/qm) "aQs" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/quartermaster/qm) "aQt" = ( @@ -25578,7 +25568,7 @@ dir = 1; pixel_y = 1 }, -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/aisat) "aYe" = ( @@ -27503,7 +27493,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "bbv" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -27514,6 +27503,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "bbw" = ( @@ -30698,7 +30688,6 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/holopad, /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) "bhz" = ( @@ -31161,8 +31150,8 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "bip" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "biq" = ( @@ -33899,12 +33888,12 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "bnC" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "bnD" = ( @@ -34887,11 +34876,11 @@ /turf/open/floor/plasteel/dark, /area/aisat) "bpF" = ( -/obj/machinery/holopad, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/aisat) "bpG" = ( @@ -34937,8 +34926,8 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/holopad, /obj/item/beacon, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/foyer) "bpL" = ( @@ -36523,16 +36512,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bsI" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "bsJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -37489,9 +37468,9 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) "buG" = ( -/obj/machinery/holopad{ - pixel_x = 9; - pixel_y = -9 +/obj/machinery/holopad/secure{ + pixel_x = 15; + pixel_y = -15 }, /turf/open/floor/carpet, /area/crew_quarters/heads/captain/private) @@ -38069,32 +38048,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet, /area/library) -"bwe" = ( -/obj/structure/chair/comfy/black{ - dir = 8 +"bwf" = ( +/obj/machinery/light{ + dir = 1 }, /turf/open/floor/wood, /area/library) -"bwf" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 30 - }, -/turf/open/floor/plasteel/cult, -/area/library) -"bwg" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/item/folder, -/obj/item/folder, -/turf/open/floor/plasteel/cult, -/area/library) "bwh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/extinguisher_cabinet{ @@ -38943,14 +38902,19 @@ /obj/effect/landmark/start/librarian, /turf/open/floor/wood, /area/library) -"bxW" = ( -/turf/open/floor/plasteel/cult, -/area/library) "bxX" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 +/obj/structure/table/wood/fancy/blue, +/obj/structure/table/wood/fancy/royalblue, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 }, -/turf/open/floor/plasteel/cult, +/obj/machinery/door/window{ + dir = 8; + name = "Secure Art Exhibition"; + req_access_txt = "37" + }, +/obj/structure/window/reinforced/spawner, +/turf/open/floor/wood, /area/library) "bxY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -39670,7 +39634,6 @@ /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bzq" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39681,6 +39644,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bzr" = ( @@ -39797,18 +39761,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet, /area/library) -"bzG" = ( -/obj/machinery/door/morgue{ - name = "Study #1" - }, -/turf/open/floor/plasteel/cult, -/area/library) -"bzH" = ( -/obj/machinery/door/morgue{ - name = "Study #2" - }, -/turf/open/floor/plasteel/cult, -/area/library) "bzI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light{ @@ -40511,9 +40463,6 @@ /area/engine/atmos) "bBu" = ( /obj/machinery/vending/coffee, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /turf/open/floor/wood, /area/library) "bBv" = ( @@ -40525,12 +40474,6 @@ /obj/machinery/bookbinder, /turf/open/floor/wood, /area/library) -"bBx" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, -/turf/open/floor/wood, -/area/library) "bBy" = ( /obj/structure/sign/directions/command{ dir = 4; @@ -43456,13 +43399,13 @@ /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) "bHE" = ( -/obj/machinery/holopad, /obj/structure/cable/yellow{ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) "bHF" = ( @@ -58787,7 +58730,7 @@ /area/science/explab) "cmX" = ( /obj/structure/window/reinforced, -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/aisat) "cmY" = ( @@ -61251,13 +61194,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/holopad, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "crA" = ( @@ -63638,7 +63581,7 @@ }, /area/crew_quarters/heads/hor) "cvU" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -75899,9 +75842,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/status_display/evac{ - pixel_y = 30 - }, /obj/machinery/photocopier{ pixel_y = 3 }, @@ -81614,6 +81554,12 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"iAG" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/turf/open/floor/wood, +/area/library) "iCn" = ( /obj/machinery/vr_sleeper, /turf/open/floor/plasteel, @@ -82628,12 +82574,11 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) "qBh" = ( -/obj/structure/table, -/obj/item/paicard, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/lapvend, /turf/open/floor/plasteel/white, /area/science/research) "qBq" = ( @@ -103714,8 +103659,8 @@ bnV bql awL bue -aze -bwe +bzE +bzE bGv bHT bwc @@ -103971,8 +103916,8 @@ bod bql bsG bue -bue -bue +aCi +iAG bue bBu bwc @@ -104228,9 +104173,9 @@ boe bql bsH bue -aAz -bxW -bzG +aCi +iAG +bue bzE bwc bEA @@ -104485,8 +104430,8 @@ bof bqu bsz bue -bwg -bxX +aCi +iAG bue bBv bwc @@ -104740,10 +104685,10 @@ bku bml bog bqv -bsI -bue -bue +bsz bue +aCi +iAG bue cUT bwc @@ -105000,8 +104945,8 @@ bqw bsx bue bwf -bxW -bzH +bzE +bzE bzE dCX bwc @@ -105258,11 +105203,11 @@ bsx bue aFE bxX -bue +bzE +bzE +bwc +bwc bBw -bwc -bwc -bBx bue bue bue diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 12c507c2bf..aef188164e 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -3,9 +3,9 @@ /turf/open/space/basic, /area/space) "aab" = ( -/obj/machinery/holopad, /obj/effect/landmark/start/cyborg, /mob/living/simple_animal/bot/secbot/pingsky, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "aac" = ( @@ -999,7 +999,7 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/white, /area/ai_monitored/turret_protected/ai) "acs" = ( @@ -11793,7 +11793,7 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) "aBn" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) "aBo" = ( @@ -12592,7 +12592,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "aCR" = ( -/obj/machinery/holopad, +/obj/machinery/holopad/secure, /turf/open/floor/wood, /area/crew_quarters/heads/hop) "aCS" = ( @@ -12995,7 +12995,6 @@ /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) "aDM" = ( -/obj/machinery/holopad, /obj/machinery/camera/motion{ c_tag = "AI Upload Center"; dir = 1; @@ -13008,6 +13007,7 @@ name = "Station Intercom (AI Private)"; pixel_y = -28 }, +/obj/machinery/holopad/secure, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) "aDN" = ( @@ -37478,11 +37478,10 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bHb" = ( -/obj/structure/closet/crate/freezer/surplus_limbs, -/obj/item/reagent_containers/glass/beaker/synthflesh, /obj/machinery/newscaster/security_unit{ pixel_y = 32 }, +/obj/machinery/limbgrower, /turf/open/floor/plasteel/freezer, /area/medical/surgery) "bHc" = ( @@ -38110,6 +38109,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/structure/closet/crate/freezer/surplus_limbs, +/obj/item/reagent_containers/glass/beaker/synthflesh, /turf/open/floor/plasteel/white, /area/medical/surgery) "bIq" = ( diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm index 5a18682129..d5d116d418 100644 --- a/_maps/map_files/debug/multiz.dmm +++ b/_maps/map_files/debug/multiz.dmm @@ -435,8 +435,8 @@ /area/engine/atmos) "bm" = ( /obj/machinery/atmospherics/components/binary/valve/on{ - icon_state = "mvalve_map-2"; - dir = 4 + dir = 4; + icon_state = "mvalve_map-2" }, /turf/open/floor/plating, /area/engine/atmos) @@ -1502,8 +1502,8 @@ /area/engine/storage) "gK" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ - icon_state = "connector_map-2"; - dir = 8 + dir = 8; + icon_state = "connector_map-2" }, /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, @@ -1514,8 +1514,8 @@ /area/hallway/secondary/service) "hi" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ - icon_state = "inje_map-2"; - dir = 4 + dir = 4; + icon_state = "inje_map-2" }, /turf/open/floor/plating, /area/construction) @@ -1555,8 +1555,8 @@ /area/hallway/secondary/service) "jA" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 8 + dir = 8; + icon_state = "warningline_white" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -1567,8 +1567,8 @@ /area/construction) "jV" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 6 + dir = 6; + icon_state = "warningline_white" }, /turf/open/floor/plating, /area/engine/storage) @@ -1637,8 +1637,8 @@ /area/engine/storage) "qR" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 9 + dir = 9; + icon_state = "warningline_white" }, /turf/open/floor/plating, /area/engine/storage) @@ -1659,15 +1659,15 @@ /area/construction) "sE" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 4 + dir = 4; + icon_state = "warningline_white" }, /turf/open/floor/plating, /area/engine/storage) "td" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 8 + dir = 8; + icon_state = "warningline_white" }, /turf/open/floor/plating, /area/engine/storage) @@ -1704,8 +1704,8 @@ /area/construction) "xB" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 1 + dir = 1; + icon_state = "warningline_white" }, /turf/open/floor/plating, /area/engine/storage) @@ -1720,8 +1720,8 @@ /area/construction) "zZ" = ( /obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 1 + dir = 1; + icon_state = "pipe-t" }, /obj/machinery/disposal/bin, /turf/open/floor/plating, @@ -1788,12 +1788,12 @@ /area/construction) "EH" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 1 + dir = 1; + icon_state = "warningline_white" }, /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 4 + dir = 4; + icon_state = "warningline_white" }, /turf/open/floor/plating, /area/engine/storage) @@ -1804,8 +1804,8 @@ "FL" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/green/hidden{ - icon_state = "pipe11-2"; - dir = 4 + dir = 4; + icon_state = "pipe11-2" }, /turf/open/floor/plating, /area/construction) @@ -1896,8 +1896,8 @@ /area/engine/storage) "Qo" = ( /obj/structure/disposalpipe/trunk/multiz/down{ - icon_state = "pipe-down"; - dir = 1 + dir = 1; + icon_state = "pipe-down" }, /turf/open/floor/plating, /area/hallway/secondary/service) @@ -1966,8 +1966,8 @@ /area/construction) "ZQ" = ( /obj/effect/turf_decal/stripes/white/line{ - icon_state = "warningline_white"; - dir = 5 + dir = 5; + icon_state = "warningline_white" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 0a73818ab3..895f21e630 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -1407,8 +1407,8 @@ height = 5; id = "laborcamp_home"; name = "fore bay 1"; - width = 9; - roundstart_template = /datum/map_template/shuttle/labour/box + roundstart_template = /datum/map_template/shuttle/labour/box; + width = 9 }, /turf/open/space/basic, /area/space) @@ -1419,8 +1419,8 @@ height = 15; id = "arrivals_stationary"; name = "arrivals"; - width = 7; - roundstart_template = /datum/map_template/shuttle/arrival/box + roundstart_template = /datum/map_template/shuttle/arrival/box; + width = 7 }, /turf/open/space/basic, /area/space) @@ -2325,8 +2325,8 @@ height = 5; id = "mining_home"; name = "mining shuttle bay"; - width = 7; - roundstart_template = /datum/map_template/shuttle/mining/box + roundstart_template = /datum/map_template/shuttle/mining/box; + width = 7 }, /turf/open/space/basic, /area/space) diff --git a/_maps/map_files/generic/City_of_Cogs.dmm b/_maps/map_files/generic/City_of_Cogs.dmm index 9ef765aa28..aba6569fd9 100644 --- a/_maps/map_files/generic/City_of_Cogs.dmm +++ b/_maps/map_files/generic/City_of_Cogs.dmm @@ -80,10 +80,6 @@ }, /turf/open/floor/clockwork/reebe, /area/reebe/city_of_cogs) -"az" = ( -/obj/structure/destructible/clockwork/eminence_spire, -/turf/open/floor/clockwork/reebe, -/area/reebe/city_of_cogs) "aA" = ( /obj/machinery/door/airlock/clockwork/brass{ name = "Infirmary" @@ -168,21 +164,6 @@ /obj/effect/clockwork/sigil/transmission, /turf/open/floor/clockwork/reebe, /area/reebe/city_of_cogs) -"ew" = ( -/obj/structure/table/reinforced/brass, -/obj/item/clockwork/construct_chassis/cogscarab{ - pixel_y = 20 - }, -/obj/item/clockwork/construct_chassis/cogscarab{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/clockwork/construct_chassis/cogscarab{ - pixel_x = 7; - pixel_y = 6 - }, -/turf/open/floor/clockwork/reebe, -/area/reebe/city_of_cogs) "hY" = ( /obj/item/clockwork/alloy_shards/pinion_lock, /turf/open/floor/clockwork/reebe, @@ -208,10 +189,6 @@ /obj/item/storage/belt/utility/servant, /turf/open/floor/clockwork/reebe, /area/reebe/city_of_cogs) -"vx" = ( -/obj/effect/clockwork/sigil/transmission, -/turf/open/floor/clockwork/reebe, -/area/reebe/city_of_cogs) "wV" = ( /obj/item/clockwork/alloy_shards/large, /turf/open/indestructible/reebe_void/spawning/lattices, @@ -244,6 +221,10 @@ /obj/item/clockwork/alloy_shards/small, /turf/open/indestructible/reebe_void/spawning/lattices, /area/reebe) +"Ox" = ( +/obj/structure/destructible/clockwork/eminence_spire, +/turf/open/floor/clockwork/reebe, +/area/reebe/city_of_cogs) "OB" = ( /obj/item/clockwork/component/geis_capacitor/fallen_armor, /turf/open/floor/clockwork/reebe, @@ -32770,7 +32751,7 @@ ae ae ag ah -ew +aL aj aj aj @@ -33284,8 +33265,8 @@ ab ab ae ai -az -vx +Ox +aj aj aj aE diff --git a/_maps/map_files/generic/SpaceDock.dmm b/_maps/map_files/generic/SpaceDock.dmm index 286ca3e97d..1188aa25fb 100644 --- a/_maps/map_files/generic/SpaceDock.dmm +++ b/_maps/map_files/generic/SpaceDock.dmm @@ -9,9 +9,9 @@ dwidth = 11; height = 22; id = "whiteship_away"; + json_key = "whiteship"; name = "Deep Space"; - width = 35; - json_key = "whiteship" + width = 35 }, /turf/open/space, /area/space) diff --git a/_maps/shuttles/arrival_kilo.dmm b/_maps/shuttles/arrival_kilo.dmm index 125f017a2b..6596539d55 100644 --- a/_maps/shuttles/arrival_kilo.dmm +++ b/_maps/shuttles/arrival_kilo.dmm @@ -75,8 +75,8 @@ }, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/arrows{ - icon_state = "arrows"; - dir = 1 + dir = 1; + icon_state = "arrows" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -112,8 +112,8 @@ /area/shuttle/arrival) "n" = ( /obj/structure/shuttle/engine/propulsion/left{ - icon_state = "propulsion_l"; - dir = 8 + dir = 8; + icon_state = "propulsion_l" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -124,8 +124,8 @@ /obj/structure/window/shuttle, /obj/structure/grille, /obj/structure/shuttle/engine/heater{ - icon_state = "heater"; - dir = 8 + dir = 8; + icon_state = "heater" }, /turf/open/floor/plating, /area/shuttle/arrival) @@ -143,8 +143,8 @@ }, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/arrows{ - icon_state = "arrows"; - dir = 1 + dir = 1; + icon_state = "arrows" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -157,8 +157,8 @@ }, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/arrows{ - icon_state = "arrows"; - dir = 1 + dir = 1; + icon_state = "arrows" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -194,8 +194,8 @@ /area/shuttle/arrival) "u" = ( /obj/structure/shuttle/engine/propulsion{ - icon_state = "propulsion"; - dir = 8 + dir = 8; + icon_state = "propulsion" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -237,8 +237,8 @@ pixel_x = 28 }, /obj/effect/turf_decal/arrows{ - icon_state = "arrows"; - dir = 1 + dir = 1; + icon_state = "arrows" }, /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ @@ -327,8 +327,8 @@ /area/shuttle/arrival) "G" = ( /obj/structure/shuttle/engine/propulsion/right{ - icon_state = "propulsion_r"; - dir = 8 + dir = 8; + icon_state = "propulsion_r" }, /obj/effect/turf_decal/stripes/line{ dir = 8 diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index dcffda7ba2..21bacaedb0 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -198,9 +198,9 @@ dir = 8; dwidth = 6; height = 18; + name = "Birdboat emergency escape shuttle"; port_direction = 4; - width = 14; - name = "Birdboat emergency escape shuttle" + width = 14 }, /obj/structure/fans/tiny, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index b4b22b2ff6..a0b9d63e94 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -545,9 +545,9 @@ dwidth = 11; height = 18; name = "Delta emergency shuttle"; - width = 30; + port_direction = 4; preferred_direction = 2; - port_direction = 4 + width = 30 }, /obj/structure/fans/tiny, /turf/open/floor/plating, diff --git a/_maps/shuttles/escape_pod_default.dmm b/_maps/shuttles/escape_pod_default.dmm index ea0882d0b7..498a4cf764 100644 --- a/_maps/shuttles/escape_pod_default.dmm +++ b/_maps/shuttles/escape_pod_default.dmm @@ -19,10 +19,10 @@ name = "Escape Pod Airlock" }, /obj/docking_port/mobile/pod{ - port_direction = 2; dwidth = 1; - width = 3; - height = 4 + height = 4; + port_direction = 2; + width = 3 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) diff --git a/_maps/shuttles/labour_cog.dmm b/_maps/shuttles/labour_cog.dmm index 10f6561ed3..b98d52f10f 100644 --- a/_maps/shuttles/labour_cog.dmm +++ b/_maps/shuttles/labour_cog.dmm @@ -4,8 +4,8 @@ /area/shuttle/labor) "b" = ( /obj/structure/shuttle/engine/propulsion{ - icon_state = "propulsion"; - dir = 1 + dir = 1; + icon_state = "propulsion" }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -14,8 +14,8 @@ /area/shuttle/labor) "c" = ( /obj/structure/shuttle/engine/heater{ - icon_state = "heater"; - dir = 1 + dir = 1; + icon_state = "heater" }, /obj/structure/window/reinforced, /obj/effect/turf_decal/stripes/line{ diff --git a/_maps/shuttles/mining_kilo.dmm b/_maps/shuttles/mining_kilo.dmm index 5609ecfc06..404c9a3666 100644 --- a/_maps/shuttles/mining_kilo.dmm +++ b/_maps/shuttles/mining_kilo.dmm @@ -86,8 +86,8 @@ width = 7 }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /turf/open/floor/mineral/plastitanium, /area/shuttle/mining) @@ -115,8 +115,8 @@ "p" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "pipe11-2"; - dir = 8 + dir = 8; + icon_state = "pipe11-2" }, /obj/effect/turf_decal/stripes/corner{ dir = 8 diff --git a/code/__DEFINES/_flags/obj_flags.dm b/code/__DEFINES/_flags/obj_flags.dm index ce1e126f12..724dc24fdd 100644 --- a/code/__DEFINES/_flags/obj_flags.dm +++ b/code/__DEFINES/_flags/obj_flags.dm @@ -13,7 +13,8 @@ #define BLOCK_Z_OUT_UP (1<<10) // Should this object block z uprise from loc? #define BLOCK_Z_IN_DOWN (1<<11) // Should this object block z falling from above? #define BLOCK_Z_IN_UP (1<<12) // Should this object block z uprise from below? -#define SHOVABLE_ONTO (1<<13) //called on turf.shove_act() to consider whether an object should have a niche effect (defined in their own shove_act()) when someone is pushed onto it, or do a sanity CanPass() check. +#define SHOVABLE_ONTO (1<<13)//called on turf.shove_act() to consider whether an object should have a niche effect (defined in their own shove_act()) when someone is pushed onto it, or do a sanity CanPass() check. +#define EXAMINE_SKIP (1<<14) /// Makes the Examine proc not read out this item. /// Integrity defines for clothing (not flags but close enough) #define CLOTHING_PRISTINE 0 // We have no damage on the clothing diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index e71243994d..9a778aafc7 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -80,6 +80,7 @@ GLOBAL_LIST_EMPTY(living_heart_cache) //A list of all living hearts in existance #define PATH_ASH "Ash" #define PATH_RUST "Rust" #define PATH_FLESH "Flesh" +#define PATH_VOID "Void" //Overthrow time to update heads obj #define OBJECTIVE_UPDATING_TIME 300 diff --git a/code/__DEFINES/blackmarket.dm b/code/__DEFINES/blackmarket.dm new file mode 100644 index 0000000000..3ec45a3a99 --- /dev/null +++ b/code/__DEFINES/blackmarket.dm @@ -0,0 +1,5 @@ +// Shipping methods + +#define SHIPPING_METHOD_LTSRBT "LTSRBT" // The BEST way of shipping items: accurate, "undetectable" +#define SHIPPING_METHOD_TELEPORT "Teleport" // Picks a random area to teleport the item to and gives you a minute to get there before it is sent. +#define SHIPPING_METHOD_LAUNCH "Launch" // Throws the item from somewhere at the station. diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index c12ec20de2..13e6c5772a 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -462,6 +462,9 @@ #define COMSIG_CLEAR_MOOD_EVENT "clear_mood" //Called when you clear a mood event from anywhere in the code. #define COMSIG_MODIFY_SANITY "modify_sanity" //Called when you want to increase or decrease sanity from anywhere in the code. +///Mask of Madness +#define COMSIG_VOID_MASK_ACT "void_mask_act" + //NTnet #define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" //called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata)) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index faffea0e6e..f16b10538b 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -59,6 +59,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( //Human sub-species #define isabductor(A) (is_species(A, /datum/species/abductor)) #define isgolem(A) (is_species(A, /datum/species/golem)) +#define isclockworkgolem(A) (is_species(A, /datum/species/golem/clockwork/no_scrap)) #define islizard(A) (is_species(A, /datum/species/lizard)) #define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) #define ispodperson(A) (is_species(A, /datum/species/pod)) @@ -225,6 +226,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isfood(A) (istype(A, /obj/item/reagent_containers/food/snacks)) +#define iscontainer(A) (istype(A, /obj/structure/reagent_dispensers)) + //Assemblies #define isassembly(O) (istype(O, /obj/item/assembly)) diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 854b6c9dcf..09009550f6 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -42,6 +42,7 @@ require only minor tweaks. #define ZTRAIT_SNOWSTORM "Weather_Snowstorm" #define ZTRAIT_ASHSTORM "Weather_Ashstorm" #define ZTRAIT_ACIDRAIN "Weather_Acidrain" +#define ZTRAIT_VOIDSTORM "Weather_Voidstorm" // number - bombcap is multiplied by this before being applied to bombs #define ZTRAIT_BOMBCAP_MULTIPLIER "Bombcap Multiplier" diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index 3fdda06dbf..4c9c195def 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -205,6 +205,14 @@ #define RULE_OF_THREE(a, b, x) ((a*x)/b) // ) +/// Converts a probability/second chance to probability/delta_time chance +/// For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*DT_PROB_RATE(0.1, 5)))` +#define DT_PROB_RATE(prob_per_second, delta_time) (1 - (1 - (prob_per_second)) ** (delta_time)) + +/// Like DT_PROB_RATE but easier to use, simply put `if(DT_PROB(10, 5))` +#define DT_PROB(prob_per_second_percent, delta_time) (prob(100*DT_PROB_RATE((prob_per_second_percent)/100, (delta_time)))) +// ) + #define MANHATTAN_DISTANCE(a, b) (abs(a.x - b.x) + abs(a.y - b.y)) #define LOGISTIC_FUNCTION(L,k,x,x_0) (L/(1+(NUM_E**(-k*(x-x_0))))) diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm index 8f01f453b6..b5d322a091 100644 --- a/code/__DEFINES/reactions.dm +++ b/code/__DEFINES/reactions.dm @@ -21,10 +21,10 @@ #define STIMULUM_FIRST_DROP 0.065 #define STIMULUM_SECOND_RISE 0.0009 #define STIMULUM_ABSOLUTE_DROP 0.00000335 -#define REACTION_OPPRESSION_THRESHOLD 5 +#define REACTION_OPPRESSION_THRESHOLD 10 #define NOBLIUM_FORMATION_ENERGY 2e9 //1 Mole of Noblium takes the planck energy to condense. //Research point amounts -#define NOBLIUM_RESEARCH_AMOUNT 1000 +#define NOBLIUM_RESEARCH_AMOUNT 25 #define BZ_RESEARCH_SCALE 4 #define BZ_RESEARCH_MAX_AMOUNT 400 #define MIASMA_RESEARCH_AMOUNT 6 diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 605b3f6485..09b5be572f 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -45,6 +45,7 @@ //The gamemode specific ones are just so the gamemodes can query whether a player is old enough //(in game days played) to play that role GLOBAL_LIST_INIT(special_roles, list( + ROLE_SYNDICATE, ROLE_TRAITOR = /datum/game_mode/traitor, ROLE_BROTHER = /datum/game_mode/traitor/bros, ROLE_OPERATIVE = /datum/game_mode/nuclear, diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 9403eca2da..d04004c659 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -87,12 +87,15 @@ //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam #define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? -#define MAX_FLAVOR_LEN 4096 +#define MAX_FLAVOR_LEN 4096 #define MAX_TASTE_LEN 40 //lick... vore... ew... #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 #define MAX_CHARTER_LEN 80 +// Is something in the IC chat filter? This is config dependent. +#define CHAT_FILTER_CHECK(T) (config.ic_filter_regex && findtext(T, config.ic_filter_regex)) + // Audio/Visual Flags. Used to determine what sense are required to notice a message. #define MSG_VISUAL (1<<0) #define MSG_AUDIBLE (1<<1) diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index e2ace84156..a047020999 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -106,6 +106,9 @@ #define STATUS_EFFECT_FAKE_VIRUS /datum/status_effect/fake_virus //gives you fluff messages for cough, sneeze, headache, etc but without an actual virus #define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode //Wont allow combat mode and will disable it + +#define STATUS_EFFECT_STASIS /datum/status_effect/grouped/stasis //Halts biological functions like bleeding, chemical processing, blood regeneration, walking, etc + #define STATUS_EFFECT_MESMERIZE /datum/status_effect/mesmerize //Just reskinned no_combat_mode #define STATUS_EFFECT_ELECTROSTAFF /datum/status_effect/electrostaff //slows down victim @@ -138,3 +141,9 @@ #define STATUS_EFFECT_RAINBOWPROTECTION /datum/status_effect/rainbow_protection //Invulnerable and pacifistic #define STATUS_EFFECT_SLIMESKIN /datum/status_effect/slimeskin //Increased armor #define STATUS_EFFECT_DNA_MELT /datum/status_effect/dna_melt //usually does something horrible to you when you hit 100 genetic instability + +///////////// +// GROUPED // +///////////// + +#define STASIS_ASCENSION_EFFECT "heretic_ascension" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 8e0886a30d..42e630a75e 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -323,6 +323,7 @@ #define ABDUCTOR_ANTAGONIST "abductor-antagonist" #define MADE_UNCLONEABLE "made-uncloneable" #define TIMESTOP_TRAIT "timestop" +#define DOMAIN_TRAIT "domain" #define NUKEOP_TRAIT "nuke-op" #define CLOWNOP_TRAIT "clown-op" #define MEGAFAUNA_TRAIT "megafauna" diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 936040432b..f0a8a4e2c6 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -153,18 +153,20 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list( "Yes-Man" )) -/proc/resolve_ai_icon(input) +/proc/resolve_ai_icon(input, radial_preview = FALSE) if(!input || !(input in GLOB.ai_core_display_screens)) return "ai" - else - if(input == "Random") - input = pick(GLOB.ai_core_display_screens - "Random") - if(input == "Portrait") - var/datum/portrait_picker/tgui = new(usr)//create the datum - tgui.ui_interact(usr)//datum has a tgui component, here we open the window - return "ai-portrait" //just take this until they decide + if(radial_preview) return "ai-[lowertext(input)]" + if(input == "Random") + input = pick(GLOB.ai_core_display_screens - "Random") + if(input == "Portrait") + var/datum/portrait_picker/tgui = new(usr)//create the datum + tgui.ui_interact(usr)//datum has a tgui component, here we open the window + return "ai-portrait" //just take this until they decide + return "ai-[lowertext(input)]" + GLOBAL_LIST_INIT(security_depts_prefs, list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) //Backpacks @@ -282,6 +284,17 @@ GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt")) GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitters", "chimpers", "declares", "bellows", "buzzes" ,"beeps", "chirps", "clicks", "hisses" ,"poofs" , "puffs", "rattles", "mewls" ,"barks", "blorbles", "squeaks", "squawks", "flutters", "warbles", "caws", "gekkers", "clucks")) GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc, "xeno tongue" = /obj/item/organ/tongue/alien)) +/proc/get_roundstart_languages() + var/list/languages = subtypesof(/datum/language) + var/list/roundstart_languages = list("None") //default option for the list + for(var/some_language in languages) + var/datum/language/language = some_language + if(initial(language.chooseable_roundstart)) + roundstart_languages[initial(language.name)] = some_language + return roundstart_languages + +GLOBAL_LIST_INIT(roundstart_languages, get_roundstart_languages()) + //SPECIES BODYPART LISTS //locked parts are those that your picked species requires to have //unlocked parts are those that anyone can choose on customisation regardless diff --git a/code/_onclick/hud/clockwork_marauder.dm b/code/_onclick/hud/clockwork_marauder.dm index 09f85db574..b1b24cc58b 100644 --- a/code/_onclick/hud/clockwork_marauder.dm +++ b/code/_onclick/hud/clockwork_marauder.dm @@ -3,7 +3,7 @@ var/obj/screen/blockchance var/obj/screen/counterchance -/datum/hud/marauder/New(mob/living/simple_animal/hostile/clockwork/marauder/guardian/owner) +/datum/hud/marauder/New(mob/living/simple_animal/hostile/clockwork/guardian/owner) ..() var/obj/screen/using @@ -24,7 +24,7 @@ hosthealth = null return ..() -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/create_mob_hud() +/mob/living/simple_animal/hostile/clockwork/guardian/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud/marauder(src, ui_style2icon(client.prefs.UI_style)) @@ -37,8 +37,8 @@ desc = "Emerge or Return." /obj/screen/marauder/emerge/Click() - if(istype(usr, /mob/living/simple_animal/hostile/clockwork/marauder/guardian)) - var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/G = usr + if(istype(usr, /mob/living/simple_animal/hostile/clockwork/guardian)) + var/mob/living/simple_animal/hostile/clockwork/guardian/G = usr if(G.is_in_host()) G.try_emerge() else diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 53fbd15651..5d7de05598 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -22,7 +22,7 @@ var/motd // var/policy - // var/static/regex/ic_filter_regex + var/static/regex/ic_filter_regex /datum/controller/configuration/proc/admin_reload() if(IsAdminAdvancedProcCall()) @@ -53,7 +53,7 @@ loadmaplist(CONFIG_MAPS_FILE) LoadMOTD() // LoadPolicy() - // LoadChatFilter() + LoadChatFilter() if (Master) Master.OnConfigLoad() @@ -425,6 +425,7 @@ Example config: var/list/min_pop = Get(/datum/config_entry/keyed_list/min_pop) var/list/max_pop = Get(/datum/config_entry/keyed_list/max_pop) var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust) + var/desired_chaos_level = 9 - SSpersistence.get_recent_chaos() for(var/T in gamemode_cache) var/datum/game_mode/M = new T() if(!(M.config_tag in modes)) @@ -449,6 +450,17 @@ Example config: adjustment += repeated_mode_adjust[recent_round] recent_round = SSpersistence.saved_modes.Find(M.config_tag,recent_round+1,0) final_weight *= max(0,((100-adjustment)/100)) + if(Get(/datum/config_entry/flag/weigh_by_recent_chaos)) + var/chaos_level = M.get_chaos() + var/exponent = Get(/datum/config_entry/number/chaos_exponent) + var/delta = chaos_level - desired_chaos_level + if(desired_chaos_level > 5) + delta = abs(min(delta, 0)) + else if(desired_chaos_level < 5) + delta = max(delta, 0) + else + delta = abs(delta) + final_weight /= (delta + 1) ** exponent runnable_modes[M] = final_weight return runnable_modes @@ -474,7 +486,7 @@ Example config: continue runnable_modes[M] = probabilities[M.config_tag] return runnable_modes -/* + /datum/controller/configuration/proc/LoadChatFilter() var/list/in_character_filter = list() if(!fexists("[directory]/in_character_filter.txt")) @@ -487,7 +499,7 @@ Example config: continue in_character_filter += REGEX_QUOTE(line) ic_filter_regex = in_character_filter.len ? regex("\\b([jointext(in_character_filter, "|")])\\b", "i") : null -*/ + //Message admins when you can. /datum/controller/configuration/proc/DelayedMessageAdmins(text) addtimer(CALLBACK(GLOBAL_PROC, /proc/message_admins, text), 0) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 4034722417..76a5f5060c 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -7,6 +7,13 @@ /datum/config_entry/keyed_list/probability/ValidateListEntry(key_name) return key_name in config.modes +/datum/config_entry/keyed_list/chaos_level + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_NUM + +/datum/config_entry/keyed_list/chaos_level/ValidateListEntry(key_name) + return key_name in config.modes + /datum/config_entry/keyed_list/max_pop key_mode = KEY_MODE_TEXT value_mode = VALUE_MODE_NUM @@ -596,3 +603,8 @@ /// Dirtyness multiplier for making turfs dirty /datum/config_entry/number/turf_dirty_multiplier config_entry_value = 1 + +/datum/config_entry/flag/weigh_by_recent_chaos + +/datum/config_entry/number/chaos_exponent + config_entry_value = 1 diff --git a/code/controllers/subsystem/blackmarket.dm b/code/controllers/subsystem/blackmarket.dm new file mode 100644 index 0000000000..c26a030e0a --- /dev/null +++ b/code/controllers/subsystem/blackmarket.dm @@ -0,0 +1,89 @@ +SUBSYSTEM_DEF(blackmarket) + name = "Blackmarket" + flags = SS_BACKGROUND + init_order = INIT_ORDER_DEFAULT + + // Descriptions for each shipping method. + var/shipping_method_descriptions = list( + SHIPPING_METHOD_LAUNCH="Launches the item at the station from space, cheap but you might not recieve your item at all.", + SHIPPING_METHOD_LTSRBT="Long-To-Short-Range-Bluespace-Transceiver, a machine that recieves items outside the station and then teleports them to the location of the uplink.", + SHIPPING_METHOD_TELEPORT="Teleports the item in a random area in the station, you get 60 seconds to get there first though." + ) + + var/list/datum/blackmarket_market/markets = list() // List of all existing markets. + var/list/obj/machinery/ltsrbt/telepads = list() // List of existing ltsrbts. + var/list/queued_purchases = list() // Currently queued purchases. + +/datum/controller/subsystem/blackmarket/Initialize(timeofday) + for(var/market in subtypesof(/datum/blackmarket_market)) + markets[market] += new market + for(var/item in subtypesof(/datum/blackmarket_item)) + var/datum/blackmarket_item/I = new item() + if(!I.item) + continue + for(var/M in I.markets) + if(!markets[M]) + stack_trace("SSblackmarket: Item [I] available in market that does not exist.") + continue + markets[M].add_item(item) + qdel(I) + . = ..() + +/datum/controller/subsystem/blackmarket/fire(resumed) + while(length(queued_purchases)) + var/datum/blackmarket_purchase/purchase = queued_purchases[1] + queued_purchases.Cut(1,2) + if(!purchase.uplink || QDELETED(purchase.uplink)) // Uh oh, uplink is gone. We will just keep the money and you will not get your order. + queued_purchases -= purchase + qdel(purchase) + continue + switch(purchase.method) + if(SHIPPING_METHOD_LTSRBT) // Find a ltsrbt pad and make it handle the shipping. + if(!telepads.len) + continue + var/free_pad_found = FALSE // Prioritize pads that don't have a cooldown active. + for(var/obj/machinery/ltsrbt/pad in telepads) + if(pad.recharge_cooldown) + continue + pad.add_to_queue(purchase) + queued_purchases -= purchase + free_pad_found = TRUE + break + if(free_pad_found) + continue + var/obj/machinery/ltsrbt/pad = pick(telepads) + to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message noting that the order is being processed by [pad].") + queued_purchases -= purchase + pad.add_to_queue(purchase) + if(SHIPPING_METHOD_TELEPORT) // Get random area, throw it somewhere there. + var/turf/targetturf = get_safe_random_station_turf() + if (!targetturf) // This shouldn't happen. + continue + to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message noting that the order is being teleported to [get_area(targetturf)] in 60 seconds.") + addtimer(CALLBACK(src, /datum/controller/subsystem/blackmarket/proc/fake_teleport, purchase.entry.spawn_item(), targetturf), 60 SECONDS) // do_teleport does not want to teleport items from nullspace, so it just forceMoves and does sparks. + queued_purchases -= purchase + qdel(purchase) + if(SHIPPING_METHOD_LAUNCH) // Get the current location of the uplink if it exists, then throws the item from space at the station from a random direction. + var/startSide = pick(GLOB.cardinals) + var/turf/T = get_turf(purchase.uplink) + var/pickedloc = spaceDebrisStartLoc(startSide, T.z) + var/atom/movable/item = purchase.entry.spawn_item(pickedloc) + item.throw_at(purchase.uplink, 3, 3, spin = FALSE) + to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message noting the order is being launched at the station from [dir2text(startSide)].") + queued_purchases -= purchase + qdel(purchase) + if(MC_TICK_CHECK) + break + +/datum/controller/subsystem/blackmarket/proc/fake_teleport(atom/movable/item, turf/target) // Used to make a teleportation effect as do_teleport does not like moving items from nullspace. + item.forceMove(target) + var/datum/effect_system/spark_spread/sparks = new + sparks.set_up(5, 1, target) + sparks.attach(item) + sparks.start() + +/datum/controller/subsystem/blackmarket/proc/queue_item(datum/blackmarket_purchase/P) // Used to add /datum/blackmarket_purchase to queued_purchases var. Returns TRUE when queued. + if(P.method == SHIPPING_METHOD_LTSRBT && !telepads.len) + return FALSE + queued_purchases += P + return TRUE diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index c090d7367c..7e7efe398f 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -490,42 +490,29 @@ SUBSYSTEM_DEF(job) job.after_spawn(H, M, joined_late) // note: this happens before the mob has a key! M will always have a client, H might not. equip_loadout(N, H, TRUE)//CIT CHANGE - makes players spawn with in-backpack loadout items properly. A little hacky but it works - if(ishuman(H) && H.client && N) - if(H.client && H.client.prefs && length(H.client.prefs.tcg_cards)) - var/obj/item/tcgcard_binder/binder = new(get_turf(H)) - H.equip_to_slot_if_possible(binder, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE) - for(var/card_type in H.client.prefs.tcg_cards) - if(card_type) - if(islist(H.client.prefs.tcg_cards[card_type])) - for(var/duplicate in H.client.prefs.tcg_cards[card_type]) - var/obj/item/tcg_card/card = new(get_turf(H), card_type, duplicate) - card.forceMove(binder) - binder.cards.Add(card) - else - var/obj/item/tcg_card/card = new(get_turf(H), card_type, H.client.prefs.tcg_cards[card_type]) + var/list/tcg_cards + if(ishuman(H)) + if(length(H.client?.prefs?.tcg_cards)) + tcg_cards = H.client.prefs.tcg_cards + else if(length(N?.client?.prefs?.tcg_cards)) + tcg_cards = N.client.prefs.tcg_cards + if(tcg_cards) + var/obj/item/tcgcard_binder/binder = new(get_turf(H)) + H.equip_to_slot_if_possible(binder, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE) + for(var/card_type in N.client.prefs.tcg_cards) + if(card_type) + if(islist(H.client.prefs.tcg_cards[card_type])) + for(var/duplicate in N.client.prefs.tcg_cards[card_type]) + var/obj/item/tcg_card/card = new(get_turf(H), card_type, duplicate) card.forceMove(binder) binder.cards.Add(card) - binder.check_for_exodia() - if(length(H.client.prefs.tcg_decks)) - binder.decks = H.client.prefs.tcg_decks - else - if(H && N.client.prefs && length(N.client.prefs.tcg_cards)) - var/obj/item/tcgcard_binder/binder = new(get_turf(H)) - H.equip_to_slot_if_possible(binder, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE) - for(var/card_type in N.client.prefs.tcg_cards) - if(card_type) - if(islist(H.client.prefs.tcg_cards[card_type])) - for(var/duplicate in N.client.prefs.tcg_cards[card_type]) - var/obj/item/tcg_card/card = new(get_turf(H), card_type, duplicate) - card.forceMove(binder) - binder.cards.Add(card) - else - var/obj/item/tcg_card/card = new(get_turf(H), card_type, N.client.prefs.tcg_cards[card_type]) - card.forceMove(binder) - binder.cards.Add(card) - binder.check_for_exodia() - if(length(N.client.prefs.tcg_decks)) - binder.decks = N.client.prefs.tcg_decks + else + var/obj/item/tcg_card/card = new(get_turf(H), card_type, N.client.prefs.tcg_cards[card_type]) + card.forceMove(binder) + binder.cards.Add(card) + binder.check_for_exodia() + if(length(N.client.prefs.tcg_decks)) + binder.decks = N.client.prefs.tcg_decks return H /* diff --git a/code/controllers/subsystem/persistence/recent_votes_etc.dm b/code/controllers/subsystem/persistence/recent_votes_etc.dm index f1b902d6ab..87f1ec0d4f 100644 --- a/code/controllers/subsystem/persistence/recent_votes_etc.dm +++ b/code/controllers/subsystem/persistence/recent_votes_etc.dm @@ -3,6 +3,7 @@ */ /datum/controller/subsystem/persistence var/list/saved_modes = list(1,2,3) + var/list/saved_chaos = list(5,5,5) var/list/saved_dynamic_rules = list(list(),list(),list()) var/list/saved_storytellers = list("foo","bar","baz") var/list/average_dynamic_threat = 50 @@ -20,6 +21,7 @@ /datum/controller/subsystem/persistence/LoadServerPersistence() . = ..() LoadRecentModes() + LoadRecentChaos() LoadRecentStorytellers() LoadRecentRulesets() LoadRecentMaps() @@ -33,6 +35,14 @@ file_data["data"] = saved_modes fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) + saved_chaos[3] = saved_chaos[2] + saved_chaos[2] = saved_chaos[1] + saved_chaos[1] = SSticker.mode.get_chaos() + json_file = file("data/RecentChaos.json") + file_data = list() + file_data["data"] = saved_chaos + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) /datum/controller/subsystem/persistence/proc/CollectStoryteller(var/datum/game_mode/dynamic/mode) saved_storytellers.len = 3 @@ -76,6 +86,15 @@ return saved_modes = json["data"] +/datum/controller/subsystem/persistence/proc/LoadRecentChaos() + var/json_file = file("data/RecentChaos.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + saved_chaos = json["data"] + /datum/controller/subsystem/persistence/proc/LoadRecentRulesets() var/json_file = file("data/RecentRulesets.json") if(!fexists(json_file)) @@ -105,3 +124,9 @@ if(!json) return saved_maps = json["maps"] + +/datum/controller/subsystem/persistence/proc/get_recent_chaos() + var/sum = 0 + for(var/n in saved_chaos) + sum += n + return sum/length(saved_chaos) diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 5cefd3a148..f5a423b353 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -47,5 +47,5 @@ SUBSYSTEM_DEF(processing) * If you override this do not call parent, as it will return PROCESS_KILL. This is done to prevent objects that dont override process() from staying in the processing list */ /datum/proc/process(delta_time) - set waitfor = FALSE + // SHOULD_NOT_SLEEP(TRUE) return PROCESS_KILL diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index f37feeea34..58238247ff 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -609,9 +609,9 @@ SUBSYSTEM_DEF(ticker) var/list/ded = SSblackbox.first_death if(ded.len) var/last_words = ded["last_words"] ? " Their last words were: \"[ded["last_words"]]\"" : "" - news_message += " NT Sanctioned Psykers picked up faint traces of someone near the station, allegedly having had died. Their name was: [ded["name"]], [ded["role"]], at [ded["area"]].[last_words]" + news_message += "\nNT Sanctioned Psykers picked up faint traces of someone near the station, allegedly having had died. Their name was: [ded["name"]], [ded["role"]], at [ded["area"]].[last_words]" else - news_message += " NT Sanctioned Psykers proudly confirm reports that nobody died this shift!" + news_message += "\nNT Sanctioned Psykers proudly confirm reports that nobody died this shift!" if(news_message) send2otherserver(news_source, news_message,"News_Report") diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index d85df8c010..032dd0ea90 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -336,6 +336,18 @@ subcategory = CAT_TOOL category = CAT_MISC +/datum/crafting_recipe/blackmarket_uplink + name = "Black Market Uplink" + result = /obj/item/blackmarket_uplink + time = 20 + tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + reqs = list(/obj/item/stock_parts/subspace/amplifier = 1, + /obj/item/stack/cable_coil = 15, + /obj/item/radio = 1, + /obj/item/analyzer = 1) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + /datum/crafting_recipe/heretic/codex name = "Codex Cicatrix" result = /obj/item/forbidden_book diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 203414b47c..359c97c507 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -33,6 +33,8 @@ RegisterSignal(parent, COMSIG_LIVING_REVIVE, .proc/on_revive) RegisterSignal(parent, COMSIG_MOB_HUD_CREATED, .proc/modify_hud) RegisterSignal(parent, COMSIG_MOB_DEATH, .proc/stop_processing) + RegisterSignal(parent, COMSIG_VOID_MASK_ACT, .proc/direct_sanity_drain) + if(owner.hud_used) modify_hud() @@ -377,6 +379,10 @@ remove_temp_moods() setSanity(initial(sanity)) +///Causes direct drain of someone's sanity, call it with a numerical value corresponding how badly you want to hurt their sanity +/datum/component/mood/proc/direct_sanity_drain(datum/source, amount) + setSanity(sanity + amount) + #undef ECSTATIC_SANITY_PEN #undef SLIGHT_INSANITY_PEN #undef MINOR_INSANITY_PEN diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 6a879a3fed..20e1a0a4e2 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -97,3 +97,11 @@ . = ..() can_hold = typecacheof(list(/obj/item/reagent_containers/glass/bottle, /obj/item/ammo_box/a762)) + +/datum/component/storage/concrete/pockets/void_cloak + quickdraw = TRUE + max_items = 3 + +/datum/component/storage/concrete/pockets/void_cloak/Initialize() + . = ..() + var/static/list/exception_cache = typecacheof(list(/obj/item/living_heart,/obj/item/forbidden_book)) diff --git a/code/datums/looping_sounds/weather.dm b/code/datums/looping_sounds/weather.dm index ea34fbb693..0dedfe94b8 100644 --- a/code/datums/looping_sounds/weather.dm +++ b/code/datums/looping_sounds/weather.dm @@ -45,3 +45,12 @@ start_length = 130 end_sound = 'sound/weather/ashstorm/inside/weak_end.ogg' volume = 30 + +/datum/looping_sound/void_loop + mid_sounds = list('sound/ambience/VoidsEmbrace.ogg'=1) + mid_length = 1669 // exact length of the music in ticks + volume = 100 + extra_range = 30 + +/datum/looping_sound/void_loop/start(atom/add_thing) + . = ..() diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 62f8cef5dc..add0668950 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -204,12 +204,11 @@ // first 10 minutes only return world.time - SSticker.round_start_time < 6000 -// this is broken and does not work. Thanks TG -// /datum/map_template/shuttle/emergency/airless/post_load() -// . = ..() -// //enable buying engines from cargo -// var/datum/supply_pack/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/shuttle_engine] -// P.special_enabled = TRUE +/datum/map_template/shuttle/emergency/construction/post_load() + . = ..() + //enable buying engines from cargo + var/datum/supply_pack/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/shuttle_engine] + P.special_enabled = TRUE /datum/map_template/shuttle/emergency/asteroid diff --git a/code/datums/skills/modifiers/job.dm b/code/datums/skills/modifiers/job.dm index e989ab11e3..e751fbf120 100644 --- a/code/datums/skills/modifiers/job.dm +++ b/code/datums/skills/modifiers/job.dm @@ -34,3 +34,6 @@ /datum/skill_modifier/job/level/wiring/basic level_mod = JOB_SKILL_BASIC + +/datum/skill_modifier/job/level/dwarfy/blacksmithing + target_skills = /datum/skill/level/dwarfy/blacksmithing diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index fb6b5c9a65..9cfec43013 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -768,3 +768,98 @@ M.dna.species.punchdamagelow -= damageboost M.dna.species.punchwoundbonus -= woundboost to_chat(M, "You calm yourself, and your unnatural strength dissipates.") + +/datum/status_effect/crucible_soul + id = "Blessing of Crucible Soul" + status_type = STATUS_EFFECT_REFRESH + duration = 15 SECONDS + examine_text = "They don't seem to be all here." + alert_type = /obj/screen/alert/status_effect/crucible_soul + var/turf/location + +/datum/status_effect/crucible_soul/on_apply() + . = ..() + to_chat(owner,"You phase through reality, nothing is out of bounds!") + owner.alpha = 180 + owner.pass_flags |= PASSCLOSEDTURF | PASSGLASS | PASSGRILLE | PASSTABLE | PASSMOB + location = get_turf(owner) + +/datum/status_effect/crucible_soul/on_remove() + to_chat(owner,"You regain your physicality, returning you to your original location...") + owner.alpha = initial(owner.alpha) + owner.pass_flags &= ~(PASSCLOSEDTURF | PASSGLASS | PASSGRILLE | PASSTABLE | PASSMOB) + owner.forceMove(location) + location = null + return ..() + +/datum/status_effect/duskndawn + id = "Blessing of Dusk and Dawn" + status_type = STATUS_EFFECT_REFRESH + duration = 60 SECONDS + alert_type =/obj/screen/alert/status_effect/duskndawn + +/datum/status_effect/duskndawn/on_apply() + . = ..() + ADD_TRAIT(owner,TRAIT_XRAY_VISION,type) + owner.update_sight() + +/datum/status_effect/duskndawn/on_remove() + REMOVE_TRAIT(owner,TRAIT_XRAY_VISION,type) + owner.update_sight() + return ..() + +/datum/status_effect/marshal + id = "Blessing of Wounded Soldier" + status_type = STATUS_EFFECT_REFRESH + duration = 60 SECONDS + tick_interval = 1 SECONDS + alert_type = /obj/screen/alert/status_effect/marshal + +/datum/status_effect/marshal/on_apply() + . = ..() + ADD_TRAIT(owner,TRAIT_IGNOREDAMAGESLOWDOWN,type) + +/datum/status_effect/marshal/on_remove() + . = ..() + REMOVE_TRAIT(owner,TRAIT_IGNOREDAMAGESLOWDOWN,type) + +/datum/status_effect/marshal/tick() + . = ..() + if(!iscarbon(owner)) + return + var/mob/living/carbon/carbie = owner + + for(var/BP in carbie.bodyparts) + var/obj/item/bodypart/part = BP + for(var/W in part.wounds) + var/datum/wound/wound = W + var/heal_amt = 0 + + switch(wound.severity) + if(WOUND_SEVERITY_MODERATE) + heal_amt = 1 + if(WOUND_SEVERITY_SEVERE) + heal_amt = 3 + if(WOUND_SEVERITY_CRITICAL) + heal_amt = 6 + if(wound.wound_type == WOUND_BURN) + carbie.adjustFireLoss(-heal_amt) + else + carbie.adjustBruteLoss(-heal_amt) + carbie.blood_volume += carbie.blood_volume >= BLOOD_VOLUME_NORMAL ? 0 : heal_amt*3 + + +/obj/screen/alert/status_effect/crucible_soul + name = "Blessing of Crucible Soul" + desc = "You phased through the reality, you are halfway to your final destination..." + icon_state = "crucible" + +/obj/screen/alert/status_effect/duskndawn + name = "Blessing of Dusk and Dawn" + desc = "Many things hide beyond the horizon, with Owl's help i managed to slip past sun's guard and moon's watch." + icon_state = "duskndawn" + +/obj/screen/alert/status_effect/marshal + name = "Blessing of Wounded Soldier" + desc = "Some people seek power through redemption, one thing many people don't know is that battle is the ultimate redemption and wounds let you bask in eternal glory." + icon_state = "wounded_soldier" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index fe59bbe14a..1c25cde286 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -117,6 +117,12 @@ desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." icon_state = "asleep" +/datum/status_effect/grouped/stasis + id = "stasis" + duration = -1 + tick_interval = 10 + var/last_dead_time + /datum/status_effect/no_combat_mode id = "no_combat_mode" alert_type = null @@ -498,6 +504,32 @@ I.take_damage(100) return ..() +/datum/status_effect/eldritch/void + id = "void_mark" + effect_sprite = "emark4" + +/datum/status_effect/eldritch/void/on_effect() + var/turf/open/turfie = get_turf(owner) + turfie.TakeTemperature(-40) + owner.adjust_bodytemperature(-60) + return ..() + +/datum/status_effect/domain + id = "domain" + alert_type = null + var/movespeed_mod = /datum/movespeed_modifier/status_effect/domain + +/datum/status_effect/domain/on_creation(mob/living/new_owner, set_duration) + if(isliving(owner)) + var/mob/living/carbon/C = owner + C.add_movespeed_modifier(movespeed_mod) + +/datum/status_effect/electrode/on_remove() + if(isliving(owner)) + var/mob/living/carbon/C = owner + C.remove_movespeed_modifier(movespeed_mod) + . = ..() + /datum/status_effect/corrosion_curse id = "corrosion_curse" status_type = STATUS_EFFECT_REPLACE @@ -506,7 +538,7 @@ /datum/status_effect/corrosion_curse/on_creation(mob/living/new_owner, ...) . = ..() - to_chat(owner, "Your feel your body starting to break apart...") + to_chat(owner, "You feel your body starting to break apart...") /datum/status_effect/corrosion_curse/tick() . = ..() @@ -577,7 +609,7 @@ /datum/status_effect/amok/on_apply(mob/living/afflicted) . = ..() - to_chat(owner, "Your feel filled with a rage that is not your own!") + to_chat(owner, "You feel filled with a rage that is not your own!") /datum/status_effect/amok/tick() . = ..() diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 659149a123..23fd75f982 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -219,19 +219,3 @@ /datum/quirk/night_vision/on_spawn() var/mob/living/carbon/human/H = quirk_holder H.update_sight() - -/datum/quirk/multilingual - name = "Multi-Lingual" - desc = "You spent a portion of your life learning to understand an additional language. You may or may not be able to speak it based on your anatomy." - value = 1 - mob_trait = TRAIT_MULTILINGUAL - gain_text = "You've learned an extra language!" - lose_text = "You've forgotten your extra language." - -/datum/quirk/multilingual/post_add() - var/mob/living/carbon/human/H = quirk_holder - H.grant_language(H.client.prefs.language, TRUE, TRUE, LANGUAGE_MULTILINGUAL) - -/datum/quirk/multilingual/remove() - var/mob/living/carbon/human/H = quirk_holder - H.remove_language(H.client.prefs.language, TRUE, TRUE, LANGUAGE_MULTILINGUAL) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index cce138e82c..38007023b5 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) name = "Light Sensitivity" desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..." value = -1 - gain_text = "The safty of light feels off..." + gain_text = "Bright lights seem irritating." lose_text = "Enlightening." medical_record_text = "Despite my warnings, the patient refuses turn on the lights, only to end up rolling down a full flight of stairs and into the cellar." diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index 98a25053e1..fcc1f92bec 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -58,13 +58,13 @@ /// The list of z-levels that this weather is actively affecting var/impacted_z_levels - /// Since it's above everything else, this is the layer used by default. TURF_LAYER is below mobs and walls if you need to use that. - var/overlay_layer = AREA_LAYER + /// Since it's above everything else, this is the layer used by default. TURF_LAYER is below mobs and walls if you need to use that. + var/overlay_layer = AREA_LAYER /// Plane for the overlay var/overlay_plane = BLACKNESS_PLANE - /// If the weather has no purpose but aesthetics. + /// If the weather has no purpose but aesthetics. var/aesthetic = FALSE - /// Used by mobs to prevent them from being affected by the weather + /// Used by mobs to prevent them from being affected by the weather var/immunity_type = "storm" /// The stage of the weather, from 1-4 @@ -79,6 +79,8 @@ var/barometer_predictable = FALSE /// For barometers to know when the next storm will hit var/next_hit_time = 0 + /// This causes the weather to only end if forced to + var/perpetual = FALSE /datum/weather/New(z_levels) ..() @@ -140,7 +142,8 @@ to_chat(M, weather_message) if(weather_sound) SEND_SOUND(M, sound(weather_sound)) - addtimer(CALLBACK(src, .proc/wind_down), weather_duration) + if(!perpetual) + addtimer(CALLBACK(src, .proc/wind_down), weather_duration) /** * Weather enters the winding down phase, stops effects diff --git a/code/datums/weather/weather_types/void_storm.dm b/code/datums/weather/weather_types/void_storm.dm new file mode 100644 index 0000000000..41c3b95bbf --- /dev/null +++ b/code/datums/weather/weather_types/void_storm.dm @@ -0,0 +1,31 @@ +/datum/weather/void_storm + name = "void storm" + desc = "A rare and highly anomalous event often accompanied by unknown entities shredding spacetime continouum. We'd advise you to start running." + + telegraph_duration = 2 SECONDS + telegraph_overlay = "void" + + weather_message = "You feel air around you getting colder... and void's sweet embrace..." + weather_overlay = "void_storm" + weather_duration_lower = 60 SECONDS + weather_duration_upper = 120 SECONDS + + + end_duration = 10 SECONDS + + area_type = /area + protect_indoors = FALSE + target_trait = ZTRAIT_VOIDSTORM + + immunity_type = "void" + + barometer_predictable = FALSE + perpetual = TRUE + +/datum/weather/void_storm/weather_act(mob/living/L) + if(IS_HERETIC(L) || IS_HERETIC_MONSTER(L)) + return + L.adjustOxyLoss(rand(1,3)) + L.adjustFireLoss(rand(1,3)) + L.adjust_blurriness(rand(0,1)) + L.adjust_bodytemperature(-rand(5,15)) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a582fa03e4..fbda722e4f 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -331,6 +331,7 @@ return . = anchored anchored = anchorvalue + SEND_SIGNAL(src, COMSIG_OBJ_SETANCHORED, anchorvalue) // SEND_SIGNAL(src, COMSIG_MOVABLE_SET_ANCHORED, anchorvalue) /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index a16e7eab59..65321f5820 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -24,6 +24,7 @@ traitor_name = "Bloodsucker" antag_flag = ROLE_BLOODSUCKER false_report_weight = 1 + chaos = 4 restricted_jobs = list("AI","Cyborg") protected_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 20 diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm index 718ed2c103..eda6b5f9e2 100644 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ b/code/game/gamemodes/brother/traitor_bro.dm @@ -6,6 +6,7 @@ name = "traitor+brothers" config_tag = "traitorbro" required_players = 25 + chaos = 5 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 8029685bf7..20ef83a54c 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -10,6 +10,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th config_tag = "changeling" antag_flag = ROLE_CHANGELING false_report_weight = 10 + chaos = 5 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist required_players = 15 diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index b010b08bc3..88a1cde8ce 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -2,6 +2,7 @@ name = "traitor+changeling" config_tag = "traitorchan" false_report_weight = 10 + chaos = 6 traitors_possible = 3 //hard limit on traitors if scaling is turned off restricted_jobs = list("AI", "Cyborg") required_players = 25 diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 29455afe56..d8ebf6f20c 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -134,6 +134,7 @@ Credit where due: config_tag = "clockwork_cult" antag_flag = ROLE_SERVANT_OF_RATVAR false_report_weight = 10 + chaos = 8 required_players = 24 //Fixing this directly for now since apparently config machine for forcing modes broke. required_enemies = 3 recommended_enemies = 5 diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 108c67ad27..659d2de105 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -1,7 +1,7 @@ /datum/game_mode/nuclear/clown_ops name = "clown ops" config_tag = "clownops" - + chaos = 8 announce_span = "danger" announce_text = "Clown empire forces are approaching the station in an attempt to HONK it!\n\ Operatives: Secure the nuclear authentication disk and use your bananium fission explosive to HONK the station.\n\ diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 8ec4123201..ba9fad7a84 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -38,6 +38,7 @@ config_tag = "cult" antag_flag = ROLE_CULTIST false_report_weight = 10 + chaos = 8 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 30 diff --git a/code/game/gamemodes/devil/devil agent/devil_agent.dm b/code/game/gamemodes/devil/devil agent/devil_agent.dm index 789cff5c8f..ccfd6f1dd5 100644 --- a/code/game/gamemodes/devil/devil agent/devil_agent.dm +++ b/code/game/gamemodes/devil/devil agent/devil_agent.dm @@ -1,6 +1,7 @@ /datum/game_mode/devil/devil_agents name = "Devil Agents" config_tag = "devil_agents" + chaos = 5 required_players = 25 required_enemies = 3 recommended_enemies = 8 diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm index 0f2e8f7858..9bf7fc0e82 100644 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ b/code/game/gamemodes/devil/devil_game_mode.dm @@ -3,6 +3,7 @@ config_tag = "devil" antag_flag = ROLE_DEVIL false_report_weight = 1 + chaos = 3 protected_jobs = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") required_players = 0 required_enemies = 1 diff --git a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm index a3e3c54dce..1693163fa2 100644 --- a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm +++ b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm @@ -3,6 +3,7 @@ config_tag = "heresy" antag_flag = ROLE_HERETIC false_report_weight = 5 + chaos = 5 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist required_players = 15 diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index 976f3e3eca..a6abcbefbd 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -3,6 +3,7 @@ config_tag = "secret_extended" false_report_weight = 5 required_players = 0 + chaos = 0 announce_span = "notice" announce_text = "Just have fun and enjoy the game!" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 8bef236c5e..610db63b1b 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -17,6 +17,7 @@ var/config_tag = null var/votable = 1 var/probability = 0 + var/chaos = 5 // 0-9, used for weighting round-to-round var/false_report_weight = 0 //How often will this show up incorrectly in a centcom report? var/station_was_nuked = 0 //see nuclearbomb.dm and malfunction.dm var/nuke_off_station = 0 //Used for tracking where the nuke hit @@ -419,7 +420,7 @@ for(var/mob/dead/new_player/player in players) if(player.client && player.ready == PLAYER_READY_TO_PLAY) - if(role in player.client.prefs.be_special) + if((role in player.client.prefs.be_special) && (ROLE_SYNDICATE in player.client.prefs.be_special)) if(!jobban_isbanned(player, ROLE_SYNDICATE) && !QDELETED(player) && !jobban_isbanned(player, role) && !QDELETED(player)) //Nodrak/Carn: Antag Job-bans if(age_check(player.client)) //Must be older than the minimum age candidates += player.mind // Get a list of all the people who want to be the antagonist for this round @@ -623,3 +624,10 @@ /// Mode specific info for ghost game_info /datum/game_mode/proc/ghost_info() return + +/datum/game_mode/proc/get_chaos() + var/chaos_levels = CONFIG_GET(keyed_list/chaos_level) + if(config_tag in chaos_levels) + return chaos_levels[config_tag] + else + return chaos diff --git a/code/game/gamemodes/gangs/gangs.dm b/code/game/gamemodes/gangs/gangs.dm index 0dc4a520ef..100669c487 100644 --- a/code/game/gamemodes/gangs/gangs.dm +++ b/code/game/gamemodes/gangs/gangs.dm @@ -6,6 +6,7 @@ GLOBAL_LIST_EMPTY(gangs) name = "gang war" config_tag = "gang" antag_flag = ROLE_GANG + chaos = 9 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 15 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index afeebb770b..78fe6d9324 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -2,6 +2,7 @@ name = "meteor" config_tag = "meteor" false_report_weight = 1 + chaos = 9 var/meteordelay = 2000 var/nometeors = 0 var/rampupdelta = 5 diff --git a/code/game/gamemodes/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm index 76460ffbb8..c91252258a 100644 --- a/code/game/gamemodes/monkey/monkey.dm +++ b/code/game/gamemodes/monkey/monkey.dm @@ -11,6 +11,7 @@ required_players = 20 required_enemies = 1 recommended_enemies = 1 + chaos = 9 restricted_jobs = list("Cyborg", "AI") diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 48a298984c..dcf84e84db 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -2,6 +2,7 @@ name = "nuclear emergency" config_tag = "nuclear" false_report_weight = 10 + chaos = 9 required_players = 28 // 30 players - 3 players to be the nuke ops = 25 players remaining required_enemies = 2 recommended_enemies = 5 diff --git a/code/game/gamemodes/overthrow/overthrow.dm b/code/game/gamemodes/overthrow/overthrow.dm index dca0c1ade1..6a118567df 100644 --- a/code/game/gamemodes/overthrow/overthrow.dm +++ b/code/game/gamemodes/overthrow/overthrow.dm @@ -3,6 +3,7 @@ name = "overthrow" config_tag = "overthrow" antag_flag = ROLE_OVERTHROW + chaos = 5 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 20 // the core idea is of a swift, bloodless coup, so it shouldn't be as chaotic as revs. diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 9eed18d906..419a74d616 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -12,6 +12,7 @@ config_tag = "revolution" antag_flag = ROLE_REV false_report_weight = 10 + chaos = 8 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 20 diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm index fc669d4855..c64e508cef 100644 --- a/code/game/gamemodes/traitor/double_agents.dm +++ b/code/game/gamemodes/traitor/double_agents.dm @@ -10,6 +10,7 @@ required_enemies = 5 recommended_enemies = 8 reroll_friendly = 0 + chaos = 7 traitor_name = "Nanotrasen Internal Affairs Agent" antag_flag = ROLE_INTERNAL_AFFAIRS diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 8b1b18660a..d42fe615cd 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -17,6 +17,7 @@ recommended_enemies = 4 reroll_friendly = 1 enemy_minimum_age = 0 + chaos = 2 announce_span = "danger" announce_text = "There are Syndicate agents on the station!\n\ diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 23f065318e..d8cb851aad 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -12,6 +12,7 @@ recommended_enemies = 1 enemy_minimum_age = 7 round_ends_with_antag_death = 1 + chaos = 9 announce_span = "danger" announce_text = "There is a space wizard attacking the station!\n\ Wizard: Accomplish your objectives and cause mayhem on the station.\n\ diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 8d7a8c047a..e37fd13106 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -137,7 +137,7 @@ Class Procs: GLOB.machines += src if(ispath(circuit, /obj/item/circuitboard)) - circuit = new circuit + circuit = new circuit(src) circuit.apply_default_parts(src) if(!speed_process && init_process) @@ -361,11 +361,11 @@ Class Procs: /obj/machinery/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) on_deconstruction() - if(component_parts && component_parts.len) + if(LAZYLEN(component_parts)) spawn_frame(disassembled) for(var/obj/item/I in component_parts) I.forceMove(loc) - component_parts.Cut() + LAZYCLEARLIST(component_parts) qdel(src) /obj/machinery/proc/spawn_frame(disassembled) @@ -539,12 +539,17 @@ Class Procs: /obj/machinery/Exited(atom/movable/AM, atom/newloc) . = ..() + // if(AM == occupant) + // set_occupant(null) if (AM == occupant) SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant) occupant = null + if(AM == circuit && circuit.loc != src) + component_parts -= AM //TODO: make the cmp part functions use lazyX + circuit = null -/obj/machinery/proc/adjust_item_drop_location(atom/movable/AM) // Adjust item drop location to a 3x3 grid inside the tile, returns slot id from 0 to 8 - var/md5 = md5(AM.name) // Oh, and it's deterministic too. A specific item will always drop from the same slot. +/obj/machinery/proc/adjust_item_drop_location(atom/movable/AM) // Adjust item drop location to a 3x3 grid inside the tile, returns slot id from 0 to 8 + var/md5 = md5(AM.name) // Oh, and it's deterministic too. A specific item will always drop from the same slot. for (var/i in 1 to 32) . += hex2num(md5[i]) . = . % 9 diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index d8a5f7d2c7..0e7b4aa0fa 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -48,13 +48,14 @@ ) /obj/machinery/autolathe/Initialize() - AddComponent(/datum/component/material_container, SSmaterials.materialtypes_by_category[MAT_CATEGORY_RIGID], 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) . = ..() - wires = new /datum/wires/autolathe(src) stored_research = new /datum/techweb/specialized/autounlocking/autolathe matching_designs = list() +/obj/machinery/autolathe/ComponentInitialize() + AddComponent(/datum/component/material_container, SSmaterials.materialtypes_by_category[MAT_CATEGORY_RIGID], 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) + /obj/machinery/autolathe/Destroy() QDEL_NULL(wires) return ..() @@ -439,6 +440,9 @@ /obj/machinery/autolathe/secure/Initialize() . = ..() + // let's not leave the parent datum floating, right? + if(stored_research) + QDEL_NULL(stored_research) stored_research = new /datum/techweb/specialized/autounlocking/autolathe/public /obj/machinery/autolathe/toy @@ -457,8 +461,18 @@ "Misc", "Imported" ) +/obj/machinery/autolathe/toy/Initialize() + . = ..() + // let's not leave the parent datum floating, right? + if(stored_research) + QDEL_NULL(stored_research) + stored_research = new /datum/techweb/specialized/autounlocking/autolathe/toy /obj/machinery/autolathe/toy/hacked/Initialize() . = ..() adjust_hacked(TRUE) - stored_research = new /datum/techweb/specialized/autounlocking/autolathe/toy + +// override the base to allow plastics +/obj/machinery/autolathe/ComponentInitialize() + var/list/extra_mats = list(/datum/material/plastic) + AddComponent(/datum/component/material_container, SSmaterials.materialtypes_by_category[MAT_CATEGORY_RIGID] + extra_mats, 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 16081db2c1..0c628ba43e 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -17,20 +17,16 @@ /obj/machinery/computer/Initialize(mapload, obj/item/circuitboard/C) . = ..() + power_change() - if(!QDELETED(C)) - qdel(circuit) - circuit = C - C.moveToNullspace() /obj/machinery/computer/Destroy() - QDEL_NULL(circuit) - return ..() + . = ..() /obj/machinery/computer/process() if(stat & (NOPOWER|BROKEN)) - return 0 - return 1 + return FALSE + return TRUE /obj/machinery/computer/ratvar_act() if(!clockwork) @@ -87,25 +83,32 @@ switch(damage_type) if(BRUTE) if(stat & BROKEN) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) else - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1) + playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) + playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) /obj/machinery/computer/obj_break(damage_flag) - if(circuit && !(flags_1 & NODECONSTRUCT_1)) //no circuit, no breaking - if(!(stat & BROKEN)) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, 1) - stat |= BROKEN - update_icon() - set_light(0) + if(!circuit) //no circuit, no breaking + return + . = ..() + if(. && !(stat & BROKEN)) + stat |= BROKEN + playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + set_light(0) + update_icon() /obj/machinery/computer/emp_act(severity) . = ..() if (!(. & EMP_PROTECT_SELF)) - if(prob(severity/1.8)) - obj_break("energy") + switch(severity) + if(1) + if(prob(50)) + obj_break("energy") + if(2) + if(prob(10)) + obj_break("energy") /obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) on_deconstruction() @@ -114,12 +117,14 @@ var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) A.setDir(dir) A.circuit = circuit - A.setAnchored(TRUE) + // Circuit removal code is handled in /obj/machinery/Exited() + circuit.forceMove(A) + A.set_anchored(TRUE) if(stat & BROKEN) if(user) to_chat(user, "The broken glass falls out.") else - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) new /obj/item/shard(drop_location()) new /obj/item/shard(drop_location()) A.state = 3 @@ -129,8 +134,11 @@ to_chat(user, "You disconnect the monitor.") A.state = 4 A.icon_state = "4" - circuit = null for(var/obj/C in src) C.forceMove(loc) - qdel(src) + +/obj/machinery/computer/AltClick(mob/user) + . = ..() + if(!user.canUseTopic(src, !issilicon(user)) || !(stat & (NOPOWER|BROKEN))) + return diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index d5bbcb0adc..bdf7a80c96 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -36,7 +36,7 @@ /obj/structure/frame/machine/examine(user) . = ..() if(state == 3 && req_components && req_component_names) - var/hasContent = 0 + var/hasContent = FALSE var/requires = "It requires" for(var/i = 1 to req_components.len) @@ -46,10 +46,10 @@ continue var/use_and = i == req_components.len requires += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" - hasContent = 1 + hasContent = TRUE if(hasContent) - . += requires + "." + . += "[requires]." else . += "It does not require any more components." @@ -76,7 +76,7 @@ amt += req_components[path] return amt -/obj/structure/frame/machine/attackby(obj/item/P, mob/user, params) +/obj/structure/frame/machine/attackby(obj/item/P, mob/living/user, params) switch(state) if(1) if(istype(P, /obj/item/circuitboard/machine)) @@ -88,6 +88,7 @@ if(istype(P, /obj/item/stack/cable_coil)) if(!P.tool_start_check(user, amount=5)) return + to_chat(user, "You start to add cables to the frame...") if(P.use_tool(src, user, 20, volume=50, amount=5, extra_checks = CALLBACK(src, .proc/check_state, 1))) to_chat(user, "You add cables to the frame.") @@ -97,39 +98,41 @@ return if(P.tool_behaviour == TOOL_SCREWDRIVER && !anchored) user.visible_message("[user] disassembles the frame.", \ - "You start to disassemble the frame...", "You hear banging and clanking.") + "You start to disassemble the frame...", "You hear banging and clanking.") if(P.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, .proc/check_state, 1))) - to_chat(user, "You disassemble the frame.") - var/obj/item/stack/sheet/metal/M = new (loc, 5) - M.add_fingerprint(user) - qdel(src) + if(state == 1) + to_chat(user, "You disassemble the frame.") + var/obj/item/stack/sheet/metal/M = new (loc, 5) + M.add_fingerprint(user) + qdel(src) return if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") + to_chat(user, "You start [anchored ? "un" : ""]securing [src]...") if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 1))) - to_chat(user, "You [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) + if(state == 1) + to_chat(user, "You [anchored ? "un" : ""]secure [src].") + set_anchored(!anchored) return if(2) if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") + to_chat(user, "You start [anchored ? "un" : ""]securing [src]...") if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 2))) - to_chat(user, "You [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) + to_chat(user, "You [anchored ? "un" : ""]secure [src].") + set_anchored(!anchored) return if(istype(P, /obj/item/circuitboard/machine)) var/obj/item/circuitboard/machine/B = P if(!B.build_path) - to_chat(user, "This circuitboard seems to be broken.") + to_chat(user, "This circuitboard seems to be broken.") return if(!anchored && B.needs_anchored) to_chat(user, "The frame needs to be secured first!") return if(!user.transferItemToLoc(B, src)) return - playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, TRUE) to_chat(user, "You add the circuit board to the frame.") circuit = B icon_state = "box_2" @@ -171,34 +174,49 @@ return if(P.tool_behaviour == TOOL_WRENCH && !circuit.needs_anchored) - to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") + to_chat(user, "You start [anchored ? "un" : ""]securing [src]...") if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 3))) - to_chat(user, "You [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) + to_chat(user, "You [anchored ? "un" : ""]secure [src].") + set_anchored(!anchored) return if(P.tool_behaviour == TOOL_SCREWDRIVER) - var/component_check = 1 + var/component_check = TRUE for(var/R in req_components) if(req_components[R] > 0) - component_check = 0 + component_check = FALSE break if(component_check) P.play_tool_sound(src) var/obj/machinery/new_machine = new circuit.build_path(loc) - if(new_machine.circuit) - QDEL_NULL(new_machine.circuit) - new_machine.circuit = circuit - new_machine.setAnchored(anchored) - new_machine.on_construction() - for(var/obj/O in new_machine.component_parts) - qdel(O) - new_machine.component_parts = list() - for(var/obj/O in src) - O.moveToNullspace() - new_machine.component_parts += O - circuit.moveToNullspace() - new_machine.RefreshParts() + if(istype(new_machine)) + // Machines will init with a set of default components. Move to nullspace so we don't trigger handle_atom_del, then qdel. + // Finally, replace with this frame's parts. + if(new_machine.circuit) + // Move to nullspace and delete. + new_machine.circuit.moveToNullspace() + QDEL_NULL(new_machine.circuit) + for(var/obj/old_part in new_machine.component_parts) + // Move to nullspace and delete. + old_part.moveToNullspace() + qdel(old_part) + + // Set anchor state and move the frame's parts over to the new machine. + // Then refresh parts and call on_construction(). + + new_machine.set_anchored(anchored) + new_machine.component_parts = list() + + circuit.forceMove(new_machine) + new_machine.component_parts += circuit + new_machine.circuit = circuit + + for(var/obj/new_part in src) + new_part.forceMove(new_machine) + new_machine.component_parts += new_part + new_machine.RefreshParts() + + new_machine.on_construction() qdel(src) return @@ -232,12 +250,15 @@ for(var/obj/item/part in added_components) if(istype(part,/obj/item/stack)) - var/obj/item/stack/S = part - var/obj/item/stack/NS = locate(S.merge_type) in components //find a stack to merge with - if(NS) - S.merge(NS) + var/obj/item/stack/incoming_stack = part + for(var/obj/item/stack/merge_stack in components) + if(incoming_stack.can_merge(merge_stack)) + incoming_stack.merge(merge_stack) + if(QDELETED(incoming_stack)) + break if(!QDELETED(part)) //If we're a stack and we merged we might not exist anymore components += part + part.forceMove(src) to_chat(user, "[part.name] applied.") if(added_components.len) replacer.play_rped_sound() @@ -267,9 +288,9 @@ to_chat(user, "You add [P] to [src].") components += P req_components[I]-- - return 1 + return TRUE to_chat(user, "You cannot add that to the machine!") - return 0 + return FALSE if(user.a_intent == INTENT_HARM) return ..() @@ -280,5 +301,4 @@ for(var/X in components) var/obj/item/I = X I.forceMove(loc) - ..() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 4a576c5a6e..853bd73eac 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(network_holopads) var/secure = FALSE /// If we are currently calling another holopad var/calling = FALSE -/* + /obj/machinery/holopad/secure name = "secure holopad" desc = "It's a floor-mounted device for projecting holographic images. This one will refuse to auto-connect incoming calls." @@ -90,7 +90,7 @@ GLOBAL_LIST_EMPTY(network_holopads) var/obj/item/circuitboard/machine/holopad/board = circuit board.secure = TRUE board.build_path = /obj/machinery/holopad/secure -*/ + /obj/machinery/holopad/tutorial resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags_1 = NODECONSTRUCT_1 @@ -372,7 +372,7 @@ GLOBAL_LIST_EMPTY(network_holopads) if(force_answer_call && world.time > (HC.call_start_time + (HOLOPAD_MAX_DIAL_TIME / 2))) HC.Answer(src) break - if(!secure) //HC.head_call && + if(HC.head_call && !secure) HC.Answer(src) break if(outgoing_call) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index d1c7222485..9876206724 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -243,13 +243,14 @@ // Check if the user can use it. /obj/machinery/telecomms/proc/canInteract(mob/user) - var/get = user.get_active_held_item() - var/obj/item/I = get - if(I.tool_behaviour == TOOL_MULTITOOL) - return TRUE + var/obj/item/I = user.get_active_held_item() + if(!issilicon(user) && I) + if(I.tool_behaviour == TOOL_MULTITOOL) + return TRUE if(hasSiliconAccessInArea(user)) return TRUE return FALSE + // Check if the user is nearby and has a multitool. /obj/machinery/telecomms/proc/canAccess(mob/user) if((canInteract(user) && in_range(user, src)) || hasSiliconAccessInArea(user)) @@ -262,14 +263,13 @@ return null var/obj/item/P = user.get_active_held_item() // Is the ref not a null? and is it the actual type? - if(P.tool_behaviour == TOOL_MULTITOOL) - return P - else if(isAI(user)) + if(isAI(user)) var/mob/living/silicon/ai/U = user P = U.aiMulti - else if(iscyborg(user) && in_range(user, src)) - var/get = user.get_active_held_item() - var/obj/item/I = get - if(I.tool_behaviour == TOOL_MULTITOOL) - I = user.get_active_held_item() + else if(iscyborg(user) && !in_range(user, src)) + return null + if(!P) + return null + else if(P.tool_behaviour == TOOL_MULTITOOL) + return P return P diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e325ab96a4..ce8171405f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -132,7 +132,6 @@ events = new icon_state += "-open" add_radio() - add_cabin() spark_system.set_up(2, 0, src) spark_system.attach(src) smoke_system.set_up(3, src) @@ -153,6 +152,7 @@ /obj/mecha/LateInitialize() . = ..() add_airtank() + add_cabin() /obj/mecha/get_cell() return cell @@ -255,9 +255,8 @@ cell = new /obj/item/stock_parts/cell/high/plus(src) /obj/mecha/proc/add_cabin() - cabin_air = new + cabin_air = new(200) cabin_air.set_temperature(T20C) - cabin_air.set_volume(200) cabin_air.set_moles(/datum/gas/oxygen,O2STANDARD*cabin_air.return_volume()/(R_IDEAL_GAS_EQUATION*cabin_air.return_temperature())) cabin_air.set_moles(/datum/gas/nitrogen,N2STANDARD*cabin_air.return_volume()/(R_IDEAL_GAS_EQUATION*cabin_air.return_temperature())) return cabin_air diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 44fa231c07..069e72b318 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -243,6 +243,17 @@ icon_state = "shieldsparkles" duration = 5 +/obj/effect/temp_visual/voidpush + name = "eldritch energy" + icon_state = "emark4" + duration = 5 + +/obj/effect/temp_visual/voidswap + name = "altered space" + icon = 'icons/mob/mob.dmi' + icon_state = "voidalter" + duration = 5 + /obj/effect/temp_visual/telekinesis name = "telekinetic force" icon_state = "empdisable" diff --git a/code/game/objects/items/balls.dm b/code/game/objects/items/balls.dm deleted file mode 100644 index 2e5a385ead..0000000000 --- a/code/game/objects/items/balls.dm +++ /dev/null @@ -1,92 +0,0 @@ -/* BALLS - GLORIOUS BALLS -// -// Includes:- -// 1) Tennis balls, lines 10 - 92 -// -// -// -*/ - -/obj/item/toy/tennis - name = "tennis ball" - desc = "A classical tennis ball. It appears to have faint bite marks scattered all over its surface." - icon = 'modular_citadel/icons/obj/balls.dmi' - icon_state = "tennis_classic" - lefthand_file = 'modular_citadel/icons/mob/inhands/balls_left.dmi' - righthand_file = 'modular_citadel/icons/mob/inhands/balls_right.dmi' - item_state = "tennis_classic" - mob_overlay_icon = 'modular_citadel/icons/mob/mouthball.dmi' - slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_NECK | ITEM_SLOT_EARS //Fluff item, put it wherever you want! - throw_range = 14 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/toy/tennis/alt_pre_attack(atom/A, mob/living/user, params) //checks if it can do right click memes - altafterattack(A, user, TRUE, params) - return TRUE - -/obj/item/toy/tennis/altafterattack(atom/target, mob/living/carbon/user, proximity_flag, click_parameters) //does right click memes - if(istype(user)) - user.visible_message("[user] waggles [src] at [target].", "You waggle [src] at [target].") - return TRUE - -/obj/item/toy/tennis/rainbow - name = "pseudo-euclidean interdimensional tennis sphere" - desc = "A tennis ball from another plane of existance. Really groovy." - icon_state = "tennis_rainbow" - item_state = "tennis_rainbow" - actions_types = list(/datum/action/item_action/squeeze) //Giving the masses easy access to unilimted honks would be annoying - -/obj/item/toy/tennis/rainbow/Initialize() - . = ..() - AddComponent(/datum/component/squeak) - -/obj/item/toy/tennis/rainbow/izzy //izzyinbox's donator item - name = "Katlin's Ball" - desc = "A tennis ball that's seen a good bit of love, being covered in a few black and white hairs and slobber." - icon_state = "tennis_izzy" - item_state = "tennis_izzy" - -/obj/item/toy/tennis/red //da red wuns go fasta - name = "red tennis ball" - desc = "A red tennis ball. It goes three times faster!" - icon_state = "tennis_red" - item_state = "tennis_red" - throw_speed = 9 - -/obj/item/toy/tennis/yellow //because yellow is hot I guess - name = "yellow tennis ball" - desc = "A yellow tennis ball. It seems to have a flame-retardant coating." - icon_state = "tennis_yellow" - item_state = "tennis_yellow" - resistance_flags = FIRE_PROOF - -/obj/item/toy/tennis/green //pestilence - name = "green tennis ball" - desc = "A green tennis ball. It seems to have an impermeable coating." - icon_state = "tennis_green" - item_state = "tennis_green" - permeability_coefficient = 0.9 - -/obj/item/toy/tennis/cyan //electric - name = "cyan tennis ball" - desc = "A cyan tennis ball. It seems to have odd electrical properties." - icon_state = "tennis_cyan" - item_state = "tennis_cyan" - siemens_coefficient = 0.9 - -/obj/item/toy/tennis/blue //reliability - name = "blue tennis ball" - desc = "A blue tennis ball. It seems ever so slightly more robust than normal." - icon_state = "tennis_blue" - item_state = "tennis_blue" - max_integrity = 300 - -/obj/item/toy/tennis/purple //because purple dyes have high pH and would neutralize acids I guess - name = "purple tennis ball" - desc = "A purple tennis ball. It seems to have an acid-resistant coating." - icon_state = "tennis_purple" - item_state = "tennis_purple" - resistance_flags = ACID_PROOF - -/datum/action/item_action/squeeze - name = "Squeak!" diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 428efe4abe..5dc9a3580c 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -16,6 +16,9 @@ if(isopenturf(target)) deploy_bodybag(user, target) +/obj/item/bodybag/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool) + return (user in src) + /obj/item/bodybag/proc/deploy_bodybag(mob/user, atom/location) var/obj/structure/closet/body_bag/R = new unfoldedbag_path(location) R.open(user) diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 01bed631fa..afab49ac76 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -549,6 +549,7 @@ contraband = TRUE obj_flags |= EMAGGED to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") + return TRUE /obj/item/circuitboard/computer/cargo/configure_machine(obj/machinery/computer/cargo/machine) if(!istype(machine)) @@ -565,10 +566,12 @@ build_path = /obj/machinery/computer/cargo/express /obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user) + . = ..() if(!(obj_flags & EMAGGED)) contraband = TRUE obj_flags |= EMAGGED to_chat(user, "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") + return TRUE /obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user) if (!(obj_flags & EMAGGED)) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index dcd0cda233..6bf6e7d312 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -472,7 +472,7 @@ build_path = /obj/machinery/holopad secure = FALSE else - build_path = /obj/machinery/holopad //secure + build_path = /obj/machinery/holopad/secure //secure secure = TRUE to_chat(user, "You [secure? "en" : "dis"]able the security on the [src]") . = ..() @@ -609,6 +609,7 @@ /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", /obj/machinery/vending/games = "\improper Good Clean Fun", /obj/machinery/vending/kink = "KinkMate", + /obj/machinery/vending/barkbox = "Bark Box", /obj/machinery/vending/autodrobe = "AutoDrobe", /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", /obj/machinery/vending/wardrobe/det_wardrobe = "DetDrobe", diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 25a5bcc800..90912f7409 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -721,24 +721,24 @@ /obj/item/disk/medical/defib_heal name = "Defibrillator Healing Disk" - desc = "An upgrade which increases the healing power of the defibrillator" + desc = "An upgrade which increases the healing power of the defibrillator." icon_state = "heal_disk" custom_materials = list(/datum/material/iron=16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000) /obj/item/disk/medical/defib_shock name = "Defibrillator Anti-Shock Disk" - desc = "A safety upgrade that guarantees only the patient will get shocked" + desc = "A safety upgrade that guarantees only the patient will get shocked." icon_state = "zap_disk" custom_materials = list(/datum/material/iron=16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000) /obj/item/disk/medical/defib_decay name = "Defibrillator Body-Decay Extender Disk" - desc = "An upgrade allowing the defibrillator to work on more decayed bodies" + desc = "An upgrade allowing the defibrillator to work on bodies that have decayed further." icon_state = "body_disk" custom_materials = list(/datum/material/iron=16000, /datum/material/glass = 18000, /datum/material/gold = 16000, /datum/material/silver = 6000, /datum/material/titanium = 2000) /obj/item/disk/medical/defib_speed name = "Defibrillator Fast Charge Disk" - desc = "An upgrade to the defibrillator capacitors, which let it charge faster" + desc = "An upgrade to the defibrillator capacitors, which lets it charge faster." icon_state = "fast_disk" custom_materials = list(/datum/material/iron=16000, /datum/material/glass = 8000, /datum/material/gold = 26000, /datum/material/silver = 26000) diff --git a/code/game/objects/items/fluff.dm b/code/game/objects/items/fluff.dm new file mode 100644 index 0000000000..7105e57c30 --- /dev/null +++ b/code/game/objects/items/fluff.dm @@ -0,0 +1,160 @@ +/* Balls, Bones, and Bountiful Fun +// +// Includes:- +// 1) Fluff Content, lines 12 - 131 +// +// 1) Tennis balls, lines 39 - 99 +// 2) Chew bones, lines 101 - 138 +// 3) Frisbee, lines 140 - 166 +*/ + +/obj/item/toy/fluff + name = "Fluff Item" + desc = "You shouldn't be seeing this." + icon = 'icons/obj/barkbox_fluff.dmi' + icon_state = "poly_tennis" + item_state = "poly_tennis" + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + mob_overlay_icon = 'icons/mob/mouthfluff.dmi' + slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_NECK | ITEM_SLOT_EARS + var/poly_states = 0 + var/poly_colors = list() + +/obj/item/toy/fluff/alt_pre_attack(atom/A, mob/living/user, params) //checks if it can do right click memes + altafterattack(A, user, TRUE, params) + return TRUE + +/obj/item/toy/fluff/altafterattack(atom/target, mob/living/carbon/user, proximity_flag, click_parameters) //does right click memes + if(istype(user)) + user.visible_message("[user] waggles [src] at [target].", "You waggle [src] at [target].") + return TRUE + +/obj/item/toy/fluff/ComponentInitialize() + . = ..() + if(!poly_states) + return + AddElement(/datum/element/polychromic, poly_colors, poly_states, _flags = POLYCHROMIC_ACTION) + +/obj/item/toy/fluff/tennis_poly + name = "polychromic tennis ball" + desc = "A polychromic tennis ball. There's a half torn tag read: WARNIN-, surely it means nothing. Right?" + throw_range = 14 + w_class = WEIGHT_CLASS_SMALL + poly_states = 2 + poly_colors = list("#CCFF00", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/red + poly_colors = list("#FF4C00", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/yellow + poly_colors = list("#FFCC00", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/green + poly_colors = list("#99FF00", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/cyan + poly_colors = list("#00FFB2", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/blue + poly_colors = list("#007FFF", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/purple + poly_colors = list("#CC00FF", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/tri + name = "tricolor-polychromic tennis ball" + desc = "A tricolor-polychromic tennis ball. Triple the shocking!" + icon_state = "tripoly_tennis" + item_state = "tripoly_tennis" + poly_states = 3 + poly_colors = list("#FFFFFF", "#FFFFFF", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/tri/squeak + name = "tricolor-polychromic tennis sphere" + desc = "A tricolor-polychromic tennis ball. This one seems to emit a squeak when squeezed." + actions_types = list(/datum/action/item_action/squeeze) + +/obj/item/toy/fluff/tennis_poly/tri/squeak/izzy //izzyinbox's donator item + name = "Katlin's Ball" + desc = "A tennis ball that's seen a good bit of love, being covered in a few black and white hairs and slobber." + poly_colors = list("#8FED56", "#51cfde", "#FFFFFF") + +/obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow + name = "pseudo-euclidean interdimensional tennis sphere" + desc = "A tennis ball from another plane of existance. Really groovy." + icon_state = "tennis_rainbow" + item_state = "tennis_rainbow" + poly_states = 0 + actions_types = list(/datum/action/item_action/squeeze) + +/obj/item/toy/fluff/tennis_poly/tri/squeak/Initialize() + . = ..() + AddComponent(/datum/component/squeak) + +/obj/item/toy/fluff/bone_poly + name = "polychromic bone" + desc = "A polychromic chew bone. Nothing like a good bone to chew on." + icon_state = "poly_bone" + item_state = "poly_bone" + throw_range = 7 + w_class = WEIGHT_CLASS_SMALL + poly_states = 1 + poly_colors = list("#FFFFFF") + +/obj/item/toy/fluff/bone_poly/red + poly_colors = list("#FF4C00") + +/obj/item/toy/fluff/bone_poly/yellow + poly_colors = list("#FFCC00") + +/obj/item/toy/fluff/bone_poly/green + poly_colors = list("#99FF00") + +/obj/item/toy/fluff/bone_poly/cyan + poly_colors = list("#00FFB2") + +/obj/item/toy/fluff/bone_poly/blue + poly_colors = list("#007FFF") + +/obj/item/toy/fluff/bone_poly/purple + poly_colors = list("#CC00FF") + +/obj/item/toy/fluff/bone_poly/squeak + name = "polychromic bone" + desc = "A polychromic chew bone. Makes a small squeak when squeezed." + +/obj/item/toy/fluff/bone_poly/squeak/Initialize() + . = ..() + AddComponent(/datum/component/squeak) + +/datum/action/item_action/squeeze + name = "Squeak!" + +/obj/item/toy/fluff/frisbee_poly + name = "polychromic frisbee" + desc = "A polychromic frisbee. Warning: May induce shock." + icon_state = "poly_frisbee" + item_state = "poly_frisbee" + throw_range = 14 + w_class = WEIGHT_CLASS_NORMAL + poly_states = 2 + poly_colors = list("#CCFF00", "#FFFFFF") + +/obj/item/toy/fluff/frisbee_poly/red + poly_colors = list("#FF4C00", "#FFFFFF") + +/obj/item/toy/fluff/frisbee_poly/yellow + poly_colors = list("#FFCC00", "#FFFFFF") + +/obj/item/toy/fluff/frisbee_poly/green + poly_colors = list("#99FF00", "#FFFFFF") + +/obj/item/toy/fluff/frisbee_poly/cyan + poly_colors = list("#00FFB2", "#FFFFFF") + +/obj/item/toy/fluff/frisbee_poly/blue + poly_colors = list("#007FFF", "#FFFFFF") + +/obj/item/toy/fluff/frisbee_poly/purple + poly_colors = list("#CC00FF", "#FFFFFF") diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index f0d66d9097..aad923346b 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -332,6 +332,7 @@ to_chat(occupant, "You pop out of the [src], slightly dazed!") occupant.Stun(5 SECONDS) + /obj/item/pet_carrier/bluespace/return_air() if(!occupant_gas_supply) occupant_gas_supply = new @@ -353,4 +354,14 @@ if(..()) name = "[initial(name)] ([target])" +/obj/item/pet_carrier/bluespace/single_use + desc = "A jar, that seems to be bigger on the inside, somehow allowing lifeforms to fit through its narrow entrance. This one looks exceptionally fragile." + +/obj/item/pet_carrier/bluespace/single_use/remove_occupant(mob/living/occupant) + . = ..() + + if(!QDELETED(src)) + playsound(src, "shatter", 70, 1) + qdel(src) + #undef pet_carrier_full diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7b251c075b..d126e39873 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -459,8 +459,8 @@ /obj/item/stack/AltClick(mob/living/user) . = ..() - if(isturf(loc)) // to prevent people that are alt clicking a tile to see its content from getting undesidered pop ups - return + // if(isturf(loc)) // to prevent people that are alt clicking a tile to see its content from getting undesidered pop ups + // return if(is_cyborg || !user.canUseTopic(src, BE_CLOSE, TRUE, FALSE) || zero_amount()) //, !iscyborg(user) return //get amount from user diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 4080a45af0..db55b0414c 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -435,6 +435,20 @@ STR.max_items = 6 STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/nugget)) +/obj/item/storage/fancy/treat_box + name = "treat box" + desc = "A cardboard box used for holding dog treats." + icon = 'icons/obj/food/containers.dmi' + icon_state = "treatbox" + icon_type = "treat" + spawn_type = /obj/item/reagent_containers/food/snacks/dogtreat + +/obj/item/storage/fancy/treat_box/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 6 + STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/dogtreat)) + /obj/item/storage/fancy/cracker_pack name = "cracker pack" desc = "A pack of delicious crackers. Keep away from parrots!" diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 480e1966e9..2035b67b5e 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -469,7 +469,7 @@ //hijacking the minature first aids for hypospray boxes. <3 /obj/item/storage/hypospraykit name = "hypospray kit" - desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials." + desc = "It's a kit designed for containing a hypospray and specific treatment chemical-filled vials." icon_state = "firstaid-mini" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index 29961d12b4..92e0cee7e8 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -15,7 +15,7 @@ var/datum/effect_system/trail_follow/ion/ion_trail /obj/item/tank/jetpack/Initialize() - ..() + . = ..() ion_trail = new ion_trail.set_up(src) @@ -88,7 +88,7 @@ return TRUE /obj/item/tank/jetpack/suicide_act(mob/user) - if (istype(user, /mob/living/carbon/human/)) + if (ishuman(user)) var/mob/living/carbon/human/H = user H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?") H.visible_message("[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!") diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 325e49dd7a..84f2098b06 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -58,7 +58,6 @@ /obj/item/tank/internals/air name = "air tank" desc = "Mixed anyone?" - icon_state = "air" item_state = "air" force = 10 dog_fashion = /datum/dog_fashion/back diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index dcd67bf1f2..f0edf7ee1d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -80,9 +80,9 @@ SStgui.close_uis(src) . = ..() +/// @depricated DO NOT USE /obj/proc/setAnchored(anchorvalue) - SEND_SIGNAL(src, COMSIG_OBJ_SETANCHORED, anchorvalue) - anchored = anchorvalue + set_anchored(anchorvalue) /obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, messy_throw = TRUE) . = ..() diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 47584a1775..9b2f305b42 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -16,12 +16,12 @@ //Adding canvases /obj/structure/easel/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/canvas)) - var/obj/item/canvas/C = I - user.dropItemToGround(C) - painting = C - C.forceMove(get_turf(src)) - C.layer = layer+0.1 - user.visible_message("[user] puts \the [C] on \the [src].","You place \the [C] on \the [src].") + var/obj/item/canvas/canvas = I + user.dropItemToGround(canvas) + painting = canvas + canvas.forceMove(get_turf(src)) + canvas.layer = layer+0.1 + user.visible_message("[user] puts \the [canvas] on \the [src].","You place \the [canvas] on \the [src].") else return ..() @@ -40,13 +40,14 @@ desc = "Draw out your soul on this canvas!" icon = 'icons/obj/artstuff.dmi' icon_state = "11x11" + // flags_1 = UNPAINTABLE_1 resistance_flags = FLAMMABLE var/width = 11 var/height = 11 var/list/grid var/canvas_color = "#ffffff" //empty canvas color var/used = FALSE - var/painting_name //Painting name, this is set after framing. + var/painting_name = "Untitled Artwork" //Painting name, this is set after framing. var/finalized = FALSE //Blocks edits var/author_ckey var/icon_generated = FALSE @@ -132,17 +133,19 @@ /obj/item/canvas/update_overlays() . = ..() - if(!icon_generated) - if(used) - var/mutable_appearance/detail = mutable_appearance(icon,"[icon_state]wip") - detail.pixel_x = 1 - detail.pixel_y = 1 - . += detail - else + if(icon_generated) var/mutable_appearance/detail = mutable_appearance(generated_icon) detail.pixel_x = 1 detail.pixel_y = 1 . += detail + return + if(!used) + return + + var/mutable_appearance/detail = mutable_appearance(icon, "[icon_state]wip") + detail.pixel_x = 1 + detail.pixel_y = 1 + . += detail /obj/item/canvas/proc/generate_proper_overlay() if(icon_generated) @@ -167,8 +170,8 @@ if(!I) return if(istype(I, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/C = I - return C.paint_color + var/obj/item/toy/crayon/crayon = I + return crayon.paint_color else if(istype(I, /obj/item/pen)) var/obj/item/pen/P = I switch(P.colour) @@ -184,7 +187,7 @@ /obj/item/canvas/proc/try_rename(mob/user) var/new_name = stripped_input(user,"What do you want to name the painting?") - if(!painting_name && new_name && user.canUseTopic(src,BE_CLOSE)) + if(new_name != painting_name && new_name && user.canUseTopic(src,BE_CLOSE)) painting_name = new_name SStgui.update_uis(src) @@ -215,12 +218,23 @@ framed_offset_x = 5 framed_offset_y = 6 +/obj/item/canvas/twentyfour_twentyfour + name = "ai universal standard canvas" + desc = "Besides being very large, the AI can accept these as a display from their internal database after you've hung it up." + icon_state = "24x24" + width = 24 + height = 24 + pixel_x = 2 + pixel_y = 1 + framed_offset_x = 4 + framed_offset_y = 5 + /obj/item/wallframe/painting name = "painting frame" desc = "The perfect showcase for your favorite deathtrap memories." icon = 'icons/obj/decals.dmi' - custom_materials = null - flags_1 = 0 + custom_materials = list(/datum/material/wood = 2000) + flags_1 = NONE icon_state = "frame-empty" result_path = /obj/structure/sign/painting @@ -229,8 +243,13 @@ desc = "Art or \"Art\"? You decide." icon = 'icons/obj/decals.dmi' icon_state = "frame-empty" + // base_icon_state = "frame" + custom_materials = list(/datum/material/wood = 2000) buildable_sign = FALSE - var/obj/item/canvas/C + ///Canvas we're currently displaying. + var/obj/item/canvas/current_canvas + ///Description set when canvas is added. + var/desc_with_canvas var/persistence_id /obj/structure/sign/painting/Initialize(mapload, dir, building) @@ -242,64 +261,78 @@ if(building) pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30) pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0 + desc = current_canvas ? desc_with_canvas : initial(desc) /obj/structure/sign/painting/Destroy() . = ..() SSpersistence.painting_frames -= src /obj/structure/sign/painting/attackby(obj/item/I, mob/user, params) - if(!C && istype(I, /obj/item/canvas)) + if(!current_canvas && istype(I, /obj/item/canvas)) frame_canvas(user,I) - else if(C && !C.painting_name && istype(I,/obj/item/pen)) + else if(current_canvas && current_canvas.painting_name == initial(current_canvas.painting_name) && istype(I,/obj/item/pen)) try_rename(user) else return ..() /obj/structure/sign/painting/examine(mob/user) . = ..() - if(C) - C.ui_interact(user) + if(persistence_id) + . += "Any painting placed here will be archived at the end of the shift." + if(current_canvas) + current_canvas.ui_interact(user) + . += "Use wirecutters to remove the painting." /obj/structure/sign/painting/wirecutter_act(mob/living/user, obj/item/I) . = ..() - if(C) - C.forceMove(drop_location()) - C = null + if(current_canvas) + current_canvas.forceMove(drop_location()) + current_canvas = null to_chat(user, "You remove the painting from the frame.") update_icon() return TRUE /obj/structure/sign/painting/proc/frame_canvas(mob/user,obj/item/canvas/new_canvas) if(user.transferItemToLoc(new_canvas,src)) - C = new_canvas - if(!C.finalized) - C.finalize(user) - to_chat(user,"You frame [C].") + current_canvas = new_canvas + if(!current_canvas.finalized) + current_canvas.finalize(user) + to_chat(user,"You frame [current_canvas].") update_icon() /obj/structure/sign/painting/proc/try_rename(mob/user) - if(!C.painting_name) - C.try_rename(user) + if(current_canvas.painting_name == initial(current_canvas.painting_name)) + current_canvas.try_rename(user) + +// /obj/structure/sign/painting/update_name(updates) +// name = current_canvas ? "painting - [current_canvas.painting_name]" : initial(name) +// return ..() + +// /obj/structure/sign/painting/update_desc(updates) +// desc = current_canvas ? desc_with_canvas : initial(desc) +// return ..() /obj/structure/sign/painting/update_icon_state() - . = ..() - if(C && C.generated_icon) - icon_state = null - else + // icon_state = "[base_icon_state]-[current_canvas?.generated_icon ? "overlay" : "empty"]" + if(current_canvas?.generated_icon) icon_state = "frame-empty" - + else + icon_state = null // or "frame-empty" + return ..() /obj/structure/sign/painting/update_overlays() . = ..() - if(C && C.generated_icon) - var/mutable_appearance/MA = mutable_appearance(C.generated_icon) - MA.pixel_x = C.framed_offset_x - MA.pixel_y = C.framed_offset_y - . += MA - var/mutable_appearance/frame = mutable_appearance(C.icon,"[C.icon_state]frame") - frame.pixel_x = C.framed_offset_x - 1 - frame.pixel_y = C.framed_offset_y - 1 - . += frame + if(!current_canvas?.generated_icon) + return + + var/mutable_appearance/MA = mutable_appearance(current_canvas.generated_icon) + MA.pixel_x = current_canvas.framed_offset_x + MA.pixel_y = current_canvas.framed_offset_y + . += MA + var/mutable_appearance/frame = mutable_appearance(current_canvas.icon,"[current_canvas.icon_state]frame") + frame.pixel_x = current_canvas.framed_offset_x - 1 + frame.pixel_y = current_canvas.framed_offset_y - 1 + . += frame /obj/structure/sign/painting/proc/load_persistent() if(!persistence_id) @@ -310,6 +343,10 @@ var/title = chosen["title"] var/author = chosen["ckey"] var/png = "data/paintings/[persistence_id]/[chosen["md5"]].png" + if(!title) + title = "Untitled Artwork" //Should prevent NULL named art from loading as NULL, if you're still getting the admin log chances are persistence is broken + if(!title) + message_admins("Painting with NO TITLE loaded on a [persistence_id] frame in [get_area(src)]. Please delete it, it is saved in the database with no name and will create bad assets.") if(!fexists(png)) stack_trace("Persistent painting [chosen["md5"]].png was not found in [persistence_id] directory.") return @@ -328,17 +365,20 @@ new_canvas.finalized = TRUE new_canvas.painting_name = title new_canvas.author_ckey = author - C = new_canvas + new_canvas.name = "painting - [title]" + current_canvas = new_canvas update_icon() /obj/structure/sign/painting/proc/save_persistent() - if(!persistence_id || !C) + if(!persistence_id || !current_canvas) return if(sanitize_filename(persistence_id) != persistence_id) stack_trace("Invalid persistence_id - [persistence_id]") return - var/data = C.get_data_string() - var/md5 = md5(data) + if(!current_canvas.painting_name) + current_canvas.painting_name = "Untitled Artwork" + var/data = current_canvas.get_data_string() + var/md5 = md5(lowertext(data)) var/list/current = SSpersistence.paintings[persistence_id] if(!current) current = list() @@ -347,10 +387,10 @@ return var/png_directory = "data/paintings/[persistence_id]/" var/png_path = png_directory + "[md5].png" - var/result = rustg_dmi_create_png(png_path,"[C.width]","[C.height]",data) + var/result = rustg_dmi_create_png(png_path,"[current_canvas.width]","[current_canvas.height]",data) if(result) CRASH("Error saving persistent painting: [result]") - current += list(list("title" = C.painting_name , "md5" = md5, "ckey" = C.author_ckey)) + current += list(list("title" = current_canvas.painting_name , "md5" = md5, "ckey" = current_canvas.author_ckey)) SSpersistence.paintings[persistence_id] = current /obj/item/canvas/proc/fill_grid_from_icon(icon/I) @@ -361,12 +401,21 @@ //Presets for art gallery mapping, for paintings to be shared across stations /obj/structure/sign/painting/library + name = "\improper Public Painting Exhibit mounting" + desc = "For art pieces hung by the public." + desc_with_canvas = "A piece of art (or \"art\"). Anyone could've hung it." persistence_id = "library" /obj/structure/sign/painting/library_secure + name = "\improper Curated Painting Exhibit mounting" + desc = "For masterpieces hand-picked by the curator." + desc_with_canvas = "A masterpiece hand-picked by the curator, supposedly." persistence_id = "library_secure" /obj/structure/sign/painting/library_private // keep your smut away from prying eyes, or non-librarians at least + name = "\improper Private Painting Exhibit mounting" + desc = "For art pieces deemed too subversive or too illegal to be shared outside of curators." + desc_with_canvas = "A painting hung away from lesser minds." persistence_id = "library_private" /obj/structure/sign/painting/vv_get_dropdown() @@ -379,11 +428,11 @@ if(!check_rights(NONE)) return var/mob/user = usr - if(!persistence_id || !C) + if(!persistence_id || !current_canvas) to_chat(user,"This is not a persistent painting.") return - var/md5 = md5(C.get_data_string()) - var/author = C.author_ckey + var/md5 = md5(lowertext(current_canvas.get_data_string())) + var/author = current_canvas.author_ckey var/list/current = SSpersistence.paintings[persistence_id] if(current) for(var/list/entry in current) @@ -392,7 +441,8 @@ var/png = "data/paintings/[persistence_id]/[md5].png" fdel(png) for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames) - if(P.C && md5(P.C.get_data_string()) == md5) - QDEL_NULL(P.C) + if(P.current_canvas && md5(P.current_canvas.get_data_string()) == md5) + QDEL_NULL(P.current_canvas) + P.update_icon() log_admin("[key_name(user)] has deleted a persistent painting made by [author].") message_admins("[key_name_admin(user)] has deleted persistent painting made by [author].") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index be7a457c7d..c502e36ae8 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -4,6 +4,10 @@ icon = 'icons/obj/closet.dmi' icon_state = "generic" density = TRUE + max_integrity = 200 + integrity_failure = 0.25 + armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) + var/icon_door = null var/icon_door_override = FALSE //override to have open overlay use icon different to its base's var/secure = FALSE //secure locker or not, also used if overriding a non-secure locker with a secure door overlay to add fancy lights @@ -12,9 +16,6 @@ var/locked = FALSE var/large = TRUE var/wall_mounted = 0 //never solid (You can always pass over it) - max_integrity = 200 - integrity_failure = 0.25 - armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) var/breakout_time = 1200 var/message_cooldown var/can_weld_shut = TRUE @@ -40,12 +41,12 @@ var/should_populate_contents = TRUE /obj/structure/closet/Initialize(mapload) + if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents + addtimer(CALLBACK(src, .proc/take_contents), 0) . = ..() update_icon() if(should_populate_contents) PopulateContents() - if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents - addtimer(CALLBACK(src, .proc/take_contents), 0) if(secure) lockerelectronics = new(src) lockerelectronics.accesses = req_access @@ -60,10 +61,10 @@ /obj/structure/closet/update_icon() . = ..() - if(!opened) - layer = OBJ_LAYER - else - layer = BELOW_OBJ_LAYER + if(istype(src, /obj/structure/closet/supplypod)) + return + + layer = opened ? BELOW_OBJ_LAYER : OBJ_LAYER /obj/structure/closet/update_overlays() . = ..() @@ -71,61 +72,57 @@ /obj/structure/closet/proc/closet_update_overlays(list/new_overlays) . = new_overlays - if(!opened) - if(icon_door) - . += "[icon_door]_door" - else - . += "[icon_state]_door" - if(welded) - . += "welded" - if(!secure) - return - if(broken) - . += "off" - . += "sparking" - else if(locked) - . += "locked" - else - . += "unlocked" - else - if(icon_door_override) - . += "[icon_door]_open" - else - . += "[icon_state]_open" + if(opened) + . += "[icon_door_override ? icon_door : icon_state]_open" + return + + . += "[icon_door || icon_state]_door" + if(welded) + . += icon_welded + + if(!secure) + return + if(broken) + . += "off" + . += "sparking" + //Overlay is similar enough for both that we can use the same mask for both + SSvis_overlays.add_vis_overlay(src, icon, "locked", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha) + . += locked ? "locked" : "unlocked" /obj/structure/closet/examine(mob/user) . = ..() if(welded) - . += "It's welded shut." + . += "It's welded shut." if(anchored) . += "It is bolted to the ground." if(opened) . += "The parts are welded together." else if(secure && !opened) + . += "Alt-click to [locked ? "unlock" : "lock"]." else if(broken) . += "The lock is screwed in." - else if(secure) - . += "Alt-click to [locked ? "unlock" : "lock"]." - if(isliving(user)) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_SKITTISH)) - . += "Ctrl-Shift-click [src] to jump inside." + if(isobserver(user)) . += "It contains: [english_list(contents)]." investigate_log("had its contents examined by [user] as a ghost.", INVESTIGATE_GHOST) + if(HAS_TRAIT(user, TRAIT_SKITTISH)) + . += "If you bump into [p_them()] while running, you will jump inside." + /obj/structure/closet/CanPass(atom/movable/mover, turf/target) if(wall_mounted) return TRUE return !density -/obj/structure/closet/proc/can_open(mob/living/user) +/obj/structure/closet/proc/can_open(mob/living/user, force = FALSE) + if(force) + return TRUE if(welded || locked) return FALSE var/turf/T = get_turf(src) for(var/mob/living/L in T) - if(L.move_resist >= MOVE_FORCE_VERY_STRONG || (horizontal && L.mob_size > MOB_SIZE_TINY && L.density)) + if(L.anchored || L.move_resist >= MOVE_FORCE_VERY_STRONG || (horizontal && L.mob_size > MOB_SIZE_TINY && L.density)) if(user) to_chat(user, "There's something large on top of [src], preventing it from opening." ) return FALSE @@ -137,44 +134,16 @@ if(closet != src && !closet.wall_mounted) return FALSE for(var/mob/living/L in T) - if(L.move_resist >= MOVE_FORCE_VERY_STRONG || horizontal && L.mob_size > MOB_SIZE_TINY && L.density) + if(L.anchored || L.move_resist >= MOVE_FORCE_VERY_STRONG || (horizontal && L.mob_size > MOB_SIZE_TINY && L.density)) if(user) to_chat(user, "There's something too large in [src], preventing it from closing.") return FALSE return TRUE -/obj/structure/closet/proc/can_lock(mob/living/user, var/check_access = TRUE) //set check_access to FALSE if you only need to check if a locker has a functional lock rather than access - if(!secure) - return FALSE - if(broken) - to_chat(user, "[src] is broken!") - return FALSE - if(QDELETED(lockerelectronics) && !locked) //We want to be able to unlock it regardless of electronics, but only lockable with electronics - to_chat(user, "[src] is missing locker electronics!") - return FALSE - if(!check_access) - return TRUE - if(allowed(user)) - return TRUE - to_chat(user, "Access denied.") - -/obj/structure/closet/proc/togglelock(mob/living/user) - add_fingerprint(user) - if(eigen_target) - return - if(opened) - return - if(!can_lock(user)) - return - locked = !locked - user.visible_message("[user] [locked ? null : "un"]locks [src].", - "You [locked ? null : "un"]lock [src].") - update_icon() - -/obj/structure/closet/proc/dump_contents(var/override = TRUE) //Override is for not revealing the locker electronics when you open the locker, for example +/obj/structure/closet/proc/dump_contents(override = TRUE) //Override is for not revealing the locker electronics when you open the locker, for example var/atom/L = drop_location() for(var/atom/movable/AM in src) - if(AM == lockerelectronics && override) + if(AM == lockerelectronics && override) // this stops the electronics from being dumped out? huh continue AM.forceMove(L) if(throwing) // you keep some momentum when getting out of a thrown closet @@ -187,18 +156,30 @@ for(var/atom/movable/AM in L) if(AM != src && insert(AM) == -1) // limit reached break + // for(var/i in reverseRange(L.GetAllContents())) + // var/atom/movable/thing = i + // SEND_SIGNAL(thing, COMSIG_TRY_STORAGE_HIDE_ALL) -/obj/structure/closet/proc/open(mob/living/user) - if(opened || !can_open(user)) +/obj/structure/closet/proc/open(mob/living/user, force = FALSE) + if(!can_open(user, force)) return - playsound(loc, open_sound, 15, 1, -3) + if(opened) + return + welded = FALSE + locked = FALSE // if you manage to open it, then its not welded/locked, hello?! + playsound(loc, open_sound, 15, TRUE, -3) opened = TRUE if(!dense_when_open) density = FALSE climb_time *= 0.5 //it's faster to climb onto an open thing dump_contents() update_icon() - return 1 + after_open(user, force) + return TRUE + +///Proc to override for effects after opening a door +/obj/structure/closet/proc/after_open(mob/living/user, force = FALSE) + return /obj/structure/closet/proc/insert(atom/movable/AM) if(contents.len >= storage_capacity) @@ -208,19 +189,19 @@ do_teleport(AM, get_turf(eigen_target), 0) if(eigen_target.opened == FALSE) eigen_target.bust_open() - else - AM.forceMove(src) + return TRUE + + AM.forceMove(src) return TRUE else return FALSE - /obj/structure/closet/proc/insertion_allowed(atom/movable/AM) if(ismob(AM)) if(!isliving(AM)) //let's not put ghosts or camera mobs inside closets... return FALSE var/mob/living/L = AM - if(L.move_resist >= MOVE_FORCE_VERY_STRONG || L.buckled || L.incorporeal_move || L.has_buckled_mobs()) + if(L.anchored || L.move_resist >= MOVE_FORCE_VERY_STRONG || L.buckled || L.incorporeal_move || L.has_buckled_mobs()) return FALSE if(L.mob_size > MOB_SIZE_TINY) // Tiny mobs are treated as items. if(horizontal && L.density) @@ -236,13 +217,13 @@ else if(istype(AM, /obj/structure/closet)) return FALSE - else if(istype(AM, /obj/effect)) + else if(iseffect(AM)) // todo: move to atom/movable return FALSE else if(isobj(AM)) if((!allow_dense && AM.density) || AM.anchored || AM.has_buckled_mobs()) return FALSE - if(isitem(AM) && !HAS_TRAIT(AM, TRAIT_NODROP)) + else if(isitem(AM) && !HAS_TRAIT(AM, TRAIT_NODROP)) return TRUE else if(!allow_objects && !istype(AM, /obj/effect/dummy/chameleon)) return FALSE @@ -255,25 +236,356 @@ if(!opened || !can_close(user)) return FALSE take_contents() - playsound(loc, close_sound, 15, 1, -3) - climb_time = initial(climb_time) + playsound(loc, close_sound, 15, TRUE, -3) opened = FALSE density = TRUE update_icon() + after_close(user) return TRUE +///Proc to override for effects after closing a door +/obj/structure/closet/proc/after_close(mob/living/user) + return + + /obj/structure/closet/proc/toggle(mob/living/user) if(opened) return close(user) else return open(user) + +/obj/structure/closet/deconstruct(disassembled = TRUE) + if(ispath(material_drop) && material_drop_amount && !(flags_1 & NODECONSTRUCT_1)) + new material_drop(loc, material_drop_amount) + qdel(src) + +/obj/structure/closet/obj_break(damage_flag) + if(!broken && !(flags_1 & NODECONSTRUCT_1)) + bust_open() + +/obj/structure/closet/attackby(obj/item/W, mob/user, params) + if(user in src) + return + if(src.tool_interact(W,user)) + return 1 // No afterattack + else + return ..() + +/obj/structure/closet/proc/tool_interact(obj/item/W, mob/living/user)//returns TRUE if attackBy call shouldn't be continued (because tool was used/closet was of wrong type), FALSE if otherwise + . = TRUE + if(opened) + if(istype(W, /obj/item/weldingtool)) + if(W.tool_behaviour == TOOL_WELDER) + // eigen check + if(eigen_teleport) + to_chat(user, "The unstable nature of \the [src] makes it impossible to deconstruct!") + return + + if(!W.tool_start_check(user, amount=0)) + return + + to_chat(user, "You begin cutting \the [src] apart...") + if(W.use_tool(src, user, 40, volume=50)) + if(!opened) + return + user.visible_message("[user] slices apart \the [src].", + "You cut \the [src] apart with \the [W].", + "You hear welding.") + deconstruct(TRUE) + return + else // for example cardboard box is cut with wirecutters + user.visible_message("[user] cut apart \the [src].", \ + "You cut \the [src] apart with \the [W].") + deconstruct(TRUE) + return + if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too + return + else if(W.tool_behaviour == TOOL_WELDER && can_weld_shut) + // eigen check + if(eigen_teleport) + to_chat(user, "The unstable nature of \the [src] makes it impossible to deconstruct!") + return + if(!W.tool_start_check(user, amount=0)) + return + + to_chat(user, "You begin [welded ? "unwelding":"welding"] \the [src]...") + if(W.use_tool(src, user, 40, volume=50)) + if(opened) + return + welded = !welded + after_weld(welded) + user.visible_message("[user] [welded ? "welds shut" : "unwelded"] \the [src].", + "You [welded ? "weld" : "unwelded"] \the [src] with \the [W].", + "You hear welding.") + log_game("[key_name(user)] [welded ? "welded":"unwelded"] closet [src] with [W] at [AREACOORD(src)]") + update_icon() + else if(W.tool_behaviour == TOOL_WRENCH && anchorable) + if(isinspace() && !anchored) + return + set_anchored(!anchored) + W.play_tool_sound(src, 75) + user.visible_message("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ + "You [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ + "You hear a ratchet.") + else if(user.a_intent != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) + var/item_is_id = W.GetID() + if(!item_is_id) + return FALSE + if(item_is_id || !toggle(user)) + togglelock(user) + // cit addons + else if(istype(W, /obj/item/electronics/airlock)) + handle_lock_addition(user, W) + else if(W.tool_behaviour == TOOL_SCREWDRIVER) + handle_lock_removal(user, W) + + else + return FALSE + +/obj/structure/closet/proc/after_weld(weld_state) + return + +/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) + if(!istype(O) || O.anchored || istype(O, /obj/screen)) + return + if(!istype(user) || user.incapacitated() || user.lying) + return + if(!Adjacent(user) || !user.Adjacent(O)) + return + if(user == O) //try to climb onto it + return ..() + if(!opened) + return + if(!isturf(O.loc)) + return + + var/actuallyismob = 0 + if(isliving(O)) + actuallyismob = 1 + else if(!isitem(O)) + return + var/turf/T = get_turf(src) + var/list/targets = list(O, src) + add_fingerprint(user) + user.visible_message("[user] [actuallyismob ? "tries to ":""]stuff [O] into [src].", \ + "You [actuallyismob ? "try to ":""]stuff [O] into [src].", \ + "You hear clanging.") + if(actuallyismob) + if(do_after_mob(user, targets, 40)) + user.visible_message("[user] stuffs [O] into [src].", \ + "You stuff [O] into [src].", \ + "You hear a loud metal bang.") + var/mob/living/L = O + if(!issilicon(L)) + L.DefaultCombatKnockdown(40) + if(istype(src, /obj/structure/closet/supplypod/extractionpod)) + O.forceMove(src) + else + O.forceMove(T) + close() + else + O.forceMove(T) + return 1 + +/obj/structure/closet/relaymove(mob/living/user, direction) + if(user.stat || !isturf(loc)) + return + if(locked) + if(message_cooldown <= world.time) + message_cooldown = world.time + 50 + to_chat(user, "[src]'s door won't budge!") + return + container_resist(user) + +/obj/structure/closet/on_attack_hand(mob/user) + if(user.lying && get_dist(src, user) > 0) + return + + if(!toggle(user)) + togglelock(user) + + +/obj/structure/closet/attack_paw(mob/user) + return attack_hand(user) + +/obj/structure/closet/attack_robot(mob/user) + if(user.Adjacent(src)) + return attack_hand(user) + +// tk grab then use on self +/obj/structure/closet/attack_self_tk(mob/user) + return attack_hand(user) + +/obj/structure/closet/verb/verb_toggleopen() + set src in view(1) + set category = "Object" + set name = "Toggle Open" + + if(!usr.canUseTopic(src, BE_CLOSE) || !isturf(loc)) + return + + if(iscarbon(usr) || issilicon(usr) || isdrone(usr)) + return toggle(usr) + else + to_chat(usr, "This mob type can't use this verb.") + +// Objects that try to exit a locker by stepping were doing so successfully, +// and due to an oversight in turf/Enter() were going through walls. That +// should be independently resolved, but this is also an interesting twist. +/obj/structure/closet/Exit(atom/movable/AM) + open() + if(AM.loc == src) + return FALSE + return TRUE + +/obj/structure/closet/container_resist(mob/living/user) + if(opened) + return + if(ismovable(loc)) + // user.changeNext_move(CLICK_CD_BREAKOUT) + // user.last_special = world.time + CLICK_CD_BREAKOUT + var/atom/movable/AM = loc + AM.relay_container_resist(user, src) + return + if(!welded && !locked) + open() + return + + //okay, so the closet is either welded or locked... resist!!! + // user.changeNext_move(CLICK_CD_BREAKOUT) + // user.last_special = world.time + CLICK_CD_BREAKOUT + user.visible_message("[src] begins to shake violently!", \ + "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ + "You hear banging from [src].") + if(do_after(user,(breakout_time), target = src, required_mobility_flags = MOBILITY_RESIST)) + if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) ) + return + //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting + user.visible_message("[user] successfully broke out of [src]!", + "You successfully break out of [src]!") + bust_open() + else + if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. + to_chat(user, "You fail to break out of [src]!") + /obj/structure/closet/proc/bust_open() welded = FALSE //applies to all lockers locked = FALSE //applies to critter crates and secure lockers only broken = TRUE //applies to secure lockers only open() +/obj/structure/closet/AltClick(mob/user) + ..() + if(!user.canUseTopic(src, BE_CLOSE) || !isturf(loc)) + return + if(opened || !secure) + return + else + togglelock(user) + +/obj/structure/closet/proc/togglelock(mob/living/user, silent) + if(secure && !broken) + if(allowed(user)) + if(iscarbon(user)) + add_fingerprint(user) + locked = !locked + user.visible_message("[user] [locked ? null : "un"]locks [src].", + "You [locked ? null : "un"]lock [src].") + update_icon() + else if(!silent) + to_chat(user, "Access Denied.") + else if(secure && broken) + to_chat(user, "\The [src] is broken!") + +/obj/structure/closet/CtrlShiftClick(mob/living/user) + if(!HAS_TRAIT(user, TRAIT_SKITTISH)) + return ..() + if(!user.canUseTopic(src) || !isturf(user.loc) || !user.Adjacent(src) || !user.CanReach(src)) + return + dive_into(user) + +/obj/structure/closet/emag_act(mob/user) + . = ..() + if(!secure || broken) + return + if(user) + user.visible_message("Sparks fly from [src]!", + "You scramble [src]'s lock, breaking it open!", + "You hear a faint electrical spark.") + playsound(src, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + broken = TRUE + locked = FALSE + if(!QDELETED(lockerelectronics)) + QDEL_NULL(lockerelectronics) + update_icon() + +/obj/structure/closet/get_remote_view_fullscreens(mob/user) + if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) + user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) + +/obj/structure/closet/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + if (!(. & EMP_PROTECT_CONTENTS)) + for(var/obj/O in src) + O.emp_act(severity) + if(secure && !broken && !(. & EMP_PROTECT_SELF)) + if(prob(50 / severity)) + locked = !locked + update_icon() + if(prob(20 / severity) && !opened) + if(!locked) + open() + else + req_access = list() + req_access += pick(get_all_accesses()) + if(!QDELETED(lockerelectronics)) + lockerelectronics.accesses = req_access + +/obj/structure/closet/contents_explosion(severity, target) + for(var/atom/A in contents) + A.ex_act(severity, target) + CHECK_TICK + +/obj/structure/closet/singularity_act() + dump_contents() + ..() + +/obj/structure/closet/AllowDrop() + return TRUE + + +/obj/structure/closet/return_temperature() + return + +/obj/structure/closet/proc/dive_into(mob/living/user) + var/turf/T1 = get_turf(user) + var/turf/T2 = get_turf(src) + if(!opened) + if(locked) + togglelock(user, TRUE) + if(!open(user)) + to_chat(user, "It won't budge!") + return + step_towards(user, T2) + T1 = get_turf(user) + if(T1 == T2) + user.set_resting(TRUE, TRUE) + if(!close(user)) + to_chat(user, "You can't get [src] to close!") + user.set_resting(FALSE, TRUE) + return + user.set_resting(FALSE, TRUE) + togglelock(user) + T1.visible_message("[user] dives into [src]!") + +/obj/structure/closet/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool) + return (user in src) + +/// cit specific /// + /obj/structure/closet/proc/handle_lock_addition(mob/user, obj/item/electronics/airlock/E) add_fingerprint(user) if(lock_in_use) @@ -336,294 +648,17 @@ update_icon() return TRUE - -/obj/structure/closet/deconstruct(disassembled = TRUE) - if(ispath(material_drop) && material_drop_amount && !(flags_1 & NODECONSTRUCT_1)) - new material_drop(loc, material_drop_amount) - qdel(src) - -/obj/structure/closet/obj_break(damage_flag) - if(!broken && !(flags_1 & NODECONSTRUCT_1)) - bust_open() - -/obj/structure/closet/attackby(obj/item/W, mob/user, params) - if(user in src) - return - if(src.tool_interact(W,user)) - return 1 // No afterattack - else - return ..() - -/obj/structure/closet/proc/tool_interact(obj/item/W, mob/user)//returns TRUE if attackBy call shouldnt be continued (because tool was used/closet was of wrong type), FALSE if otherwise - . = TRUE - if(opened) - if(istype(W, cutting_tool)) - var/welder = FALSE - if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - to_chat(user, "You begin [welder ? "slicing" : "deconstructing"] \the [src] apart...") - welder = TRUE - if(W.use_tool(src, user, 40, volume=50)) - if(eigen_teleport) - to_chat(user, "The unstable nature of \the [src] makes it impossible to [welder ? "slice" : "deconstruct"]!") - return - if(!opened) - return - user.visible_message("[user] [welder ? "slice" : "deconstruct"]s apart \the [src].", - "You [welder ? "slice" : "deconstruct"] \the [src] apart with \the [W].", - "You hear [welder ? "welding" : "rustling of screws and metal"].") - deconstruct(TRUE) - return - if(user.a_intent != INTENT_HARM && user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too - return TRUE - else if(istype(W, /obj/item/electronics/airlock)) - handle_lock_addition(user, W) - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - handle_lock_removal(user, W) - else if(W.tool_behaviour == TOOL_WELDER && can_weld_shut) - if(!W.tool_start_check(user, amount=0)) - return - - to_chat(user, "You begin [welded ? "unwelding":"welding"] \the [src]...") - if(W.use_tool(src, user, 40, volume=50)) - if(eigen_teleport) - to_chat(user, "The unstable nature of \the [src] makes it impossible to weld!") - return - if(opened) - return - welded = !welded - after_weld(welded) - user.visible_message("[user] [welded ? "welds shut" : "unwelds"] \the [src].", - "You [welded ? "weld" : "unwelded"] \the [src] with \the [W].", - "You hear welding.") - update_icon() - else if(W.tool_behaviour == TOOL_WRENCH && anchorable) - if(isinspace() && !anchored) - return - setAnchored(!anchored) - W.play_tool_sound(src, 75) - user.visible_message("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ - "You [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ - "You hear a ratchet.") - else if(user.a_intent != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) - if(W.GetID() || !toggle(user)) - togglelock(user) - else +/obj/structure/closet/proc/can_lock(mob/living/user, var/check_access = TRUE) //set check_access to FALSE if you only need to check if a locker has a functional lock rather than access + if(!secure) return FALSE - -/obj/structure/closet/proc/after_weld(weld_state) - return - -/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) - if(!istype(O) || O.anchored || istype(O, /obj/screen)) - return - if(!istype(user) || user.incapacitated() || user.lying) - return - if(!Adjacent(user) || !user.Adjacent(O)) - return - if(user == O) //try to climb onto it - return ..() - if(!opened) - return - if(!isturf(O.loc)) - return - - var/actuallyismob = 0 - if(isliving(O)) - actuallyismob = 1 - else if(!isitem(O)) - return - var/turf/T = get_turf(src) - var/list/targets = list(O, src) - add_fingerprint(user) - user.visible_message("[user] [actuallyismob ? "tries to ":""]stuff [O] into [src].", \ - "You [actuallyismob ? "try to ":""]stuff [O] into [src].", \ - "You hear clanging.") - if(actuallyismob) - if(do_after_mob(user, targets, 40)) - user.visible_message("[user] stuffs [O] into [src].", \ - "You stuff [O] into [src].", \ - "You hear a loud metal bang.") - var/mob/living/L = O - if(!issilicon(L)) - L.DefaultCombatKnockdown(40) - if(istype(src, /obj/structure/closet/supplypod/extractionpod)) - O.forceMove(src) - else - O.forceMove(T) - close() - else - O.forceMove(T) - return 1 - -/obj/structure/closet/relaymove(mob/user) - if(user.stat || !isturf(loc) || !isliving(user)) - return - if(locked || welded) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - container_resist(user) - -/obj/structure/closet/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(user.lying && get_dist(src, user) > 0) - return - - if(!toggle(user)) - togglelock(user) - -/obj/structure/closet/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/closet/attack_robot(mob/user) - if(user.Adjacent(src)) - return attack_hand(user) - -// tk grab then use on self -/obj/structure/closet/attack_self_tk(mob/user) - return attack_hand(user) - -/obj/structure/closet/verb/verb_toggleopen() - set src in oview(1) - set category = "Object" - set name = "Toggle Open" - - var/mob/living/L = usr - if(!istype(L) || !CHECK_MOBILITY(L, MOBILITY_USE)) + if(broken) + to_chat(user, "[src] is broken!") return FALSE - - if(iscarbon(usr) || issilicon(usr) || isdrone(usr)) - return attack_hand(usr) - else - to_chat(usr, "This mob type can't use this verb.") - -// Objects that try to exit a locker by stepping were doing so successfully, -// and due to an oversight in turf/Enter() were going through walls. That -// should be independently resolved, but this is also an interesting twist. -/obj/structure/closet/Exit(atom/movable/AM) - open() - if(AM.loc == src) - return 0 - return 1 - -/obj/structure/closet/container_resist(mob/living/user) - if(opened) - return - if(ismovable(loc)) - var/atom/movable/AM = loc - AM.relay_container_resist(user, src) - return - if(!welded && !locked) - open() - return - - //okay, so the closet is either welded or locked... resist!!! - user.visible_message("[src] begins to shake violently!", \ - "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "You hear banging from [src].") - if(do_after(user,(breakout_time), target = src, required_mobility_flags = MOBILITY_RESIST)) - if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) ) - return - //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting - user.visible_message("[user] successfully broke out of [src]!", - "You successfully break out of [src]!") - bust_open() - else - if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. - to_chat(user, "You fail to break out of [src]!") - -/obj/structure/closet/AltClick(mob/user) - . = ..() - if(!user.canUseTopic(src, be_close=TRUE) || !isturf(loc)) - to_chat(user, "You can't do that right now!") + if(QDELETED(lockerelectronics) && !locked) //We want to be able to unlock it regardless of electronics, but only lockable with electronics + to_chat(user, "[src] is missing locker electronics!") + return FALSE + if(!check_access) return TRUE - togglelock(user) - return TRUE - -/obj/structure/closet/CtrlShiftClick(mob/living/user) - if(!HAS_TRAIT(user, TRAIT_SKITTISH)) - return ..() - if(!user.canUseTopic(src) || !isturf(user.loc) || !user.Adjacent(src) || !user.CanReach(src)) - return - dive_into(user) - -/obj/structure/closet/emag_act(mob/user) - . = ..() - if(!secure || broken) - return - user.visible_message("Sparks fly from [src]!", - "You scramble [src]'s lock, breaking it open!", - "You hear a faint electrical spark.") - playsound(src, "sparks", 50, 1) - broken = TRUE - locked = FALSE - if(!QDELETED(lockerelectronics)) - QDEL_NULL(lockerelectronics) - update_icon() - -/obj/structure/closet/get_remote_view_fullscreens(mob/user) - if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) - -/obj/structure/closet/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if (!(. & EMP_PROTECT_CONTENTS)) - for(var/obj/O in src) - O.emp_act(severity) - if(!secure || broken) - return ..() - if(prob(severity/2)) - locked = !locked - update_icon() - if(prob(severity/5) && !opened) - if(!locked) - open() - else - req_access = list() - req_access += pick(get_all_accesses()) - if(!QDELETED(lockerelectronics)) - lockerelectronics.accesses = req_access - -/obj/structure/closet/contents_explosion(severity, target) - for(var/atom/A in contents) - A.ex_act(severity, target) - CHECK_TICK - -/obj/structure/closet/singularity_act() - dump_contents() - ..() - -/obj/structure/closet/AllowDrop() - return TRUE - - -/obj/structure/closet/return_temperature() - return - -/obj/structure/closet/proc/dive_into(mob/living/user) - var/turf/T1 = get_turf(user) - var/turf/T2 = get_turf(src) - if(!opened) - if(locked) - togglelock(user, TRUE) - if(!open(user)) - to_chat(user, "It won't budge!") - return - step_towards(user, T2) - T1 = get_turf(user) - if(T1 == T2) - user.set_resting(TRUE, TRUE) - if(!close(user)) - to_chat(user, "You can't get [src] to close!") - user.set_resting(FALSE, TRUE) - return - user.set_resting(FALSE, TRUE) - togglelock(user) - T1.visible_message("[user] dives into [src]!") - -/obj/structure/closet/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool) - return ..() && opened + if(allowed(user)) + return TRUE + to_chat(user, "Access denied.") diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index ee202f9504..030f7f4edf 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -17,10 +17,13 @@ material_drop_amount = 5 var/obj/item/paper/fluff/jobs/cargo/manifest/manifest -/obj/structure/closet/crate/New() - ..() +/obj/structure/closet/crate/Initialize() + . = ..() if(icon_state == "[initial(icon_state)]open") opened = TRUE + // AddElement(/datum/element/climbable, climb_time = crate_climb_time * 0.5, climb_stun = 0) + // else + // AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) update_icon() /obj/structure/closet/crate/CanPass(atom/movable/mover, turf/target) @@ -46,21 +49,16 @@ if(manifest) tear_manifest(user) -/obj/structure/closet/crate/tool_interact(obj/item/W, mob/user) - if(W.tool_behaviour == TOOL_WIRECUTTER && manifest) - tear_manifest(user) - return TRUE - return ..() - -/obj/structure/closet/crate/open(mob/living/user) +/obj/structure/closet/crate/open(mob/living/user, force = FALSE) . = ..() if(. && manifest) to_chat(user, "The manifest is torn off [src].") - playsound(src, 'sound/items/poster_ripped.ogg', 75, 1) + playsound(src, 'sound/items/poster_ripped.ogg', 75, TRUE) manifest.forceMove(get_turf(src)) manifest = null update_icon() +// cit specific /obj/structure/closet/crate/handle_lock_addition() return @@ -69,7 +67,7 @@ /obj/structure/closet/crate/proc/tear_manifest(mob/user) to_chat(user, "You tear the manifest off of [src].") - playsound(src, 'sound/items/poster_ripped.ogg', 75, 1) + playsound(src, 'sound/items/poster_ripped.ogg', 75, TRUE) manifest.forceMove(loc) if(ishuman(user)) diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 2c923c1905..eb652c5180 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -80,16 +80,25 @@ name = "private crate" desc = "A crate cover designed to only open for who purchased its contents." icon_state = "privatecrate" + ///Account of the person buying the crate if private purchasing. var/datum/bank_account/buyer_account + ///Department of the person buying the crate if buying via the NIRN app. + var/datum/bank_account/department/department_account + ///Is the secure crate opened or closed? var/privacy_lock = TRUE + ///Is the crate being bought by a person, or a budget card? + var/department_purchase = FALSE /obj/structure/closet/crate/secure/owned/examine(mob/user) . = ..() - to_chat(user, "It's locked with a privacy lock, and can only be unlocked by the buyer's ID.") + . += "It's locked with a privacy lock, and can only be unlocked by the buyer's ID." /obj/structure/closet/crate/secure/owned/Initialize(mapload, datum/bank_account/_buyer_account) . = ..() buyer_account = _buyer_account + if(istype(buyer_account, /datum/bank_account/department)) + department_purchase = TRUE + department_account = buyer_account /obj/structure/closet/crate/secure/owned/togglelock(mob/living/user, silent) if(privacy_lock) @@ -97,7 +106,7 @@ var/obj/item/card/id/id_card = user.get_idcard(TRUE) if(id_card) if(id_card.registered_account) - if(id_card.registered_account == buyer_account) + if(id_card.registered_account == buyer_account || (department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id))) if(iscarbon(user)) add_fingerprint(user) locked = !locked diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index fadf33cb85..b8d14a6555 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -676,7 +676,6 @@ ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn, TRAIT_EXEMPT_HEALTH_EVENTS, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn, TRAIT_NO_MIDROUND_ANTAG, GHOSTROLE_TRAIT) //The mob can't be made into a random antag, they are still eligible for ghost roles popups. - ADD_TRAIT(new_spawn, TRAIT_PACIFISM, GHOSTROLE_TRAIT) to_chat(new_spawn,"Ghosting is free!") var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) D.Grant(new_spawn) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 9c0b19cd83..843e5c6db2 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -125,6 +125,8 @@ /datum/antagonist/changeling/proc/remove_changeling_powers() if(ishuman(owner.current) || ismonkey(owner.current)) reset_properties() + QDEL_NULL(cellular_emporium) + QDEL_NULL(emporium_action) for(var/obj/effect/proc_holder/changeling/p in purchasedpowers) if(p.always_keep) continue @@ -139,6 +141,7 @@ /datum/antagonist/changeling/proc/reset_powers() if(purchasedpowers) remove_changeling_powers() + create_actions() //Repurchase free powers. for(var/path in all_powers) var/obj/effect/proc_holder/changeling/S = new path() @@ -225,7 +228,8 @@ /datum/antagonist/changeling/proc/regenerate() var/mob/living/carbon/the_ling = owner.current if(istype(the_ling)) - emporium_action.Grant(the_ling) + if(emporium_action) + emporium_action.Grant(the_ling) if(the_ling.stat == DEAD) chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5)) geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1) diff --git a/code/modules/antagonists/changeling/powers/revive.dm b/code/modules/antagonists/changeling/powers/revive.dm index f193fb6736..3b78960ff1 100644 --- a/code/modules/antagonists/changeling/powers/revive.dm +++ b/code/modules/antagonists/changeling/powers/revive.dm @@ -11,6 +11,14 @@ //Revive from revival stasis /obj/effect/proc_holder/changeling/revive/sting_action(mob/living/carbon/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(!changeling) + return + if(changeling.hostile_absorbed) + to_chat(user, "We cannot muster up the strength to revive ourselves!") + changeling.purchasedpowers -= src + src.action.Remove(user) + return user.cure_fakedeath("changeling") user.revive(full_heal = 1) var/list/missing = user.get_missing_limbs() @@ -27,7 +35,6 @@ user.regenerate_limbs(0, list(BODY_ZONE_HEAD)) user.regenerate_organs() to_chat(user, "We have revived ourselves.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.purchasedpowers -= src src.action.Remove(user) return TRUE diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index b868fb54c0..34370faa0a 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -144,7 +144,7 @@ to_chat(L, "\"You belong to me now.\"") if(!GLOB.application_scripture_unlocked) GLOB.application_scripture_unlocked = TRUE - hierophant_message("With the conversion of a new servant the Ark's power grows. Application scriptures are now available.") + hierophant_message("With the conversion of a new servant the Hierophant Network's power grows. Application scriptures are now available.") if(add_servant_of_ratvar(L)) L.log_message("conversion was done with a [sigil_name]", LOG_ATTACK, color="BE8700") if(iscarbon(L)) diff --git a/code/modules/antagonists/clockcult/clock_helpers/clock_rites.dm b/code/modules/antagonists/clockcult/clock_helpers/clock_rites.dm index 58ee73ef5b..2b2720dea3 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/clock_rites.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/clock_rites.dm @@ -196,4 +196,68 @@ CL.visible_message("[CL] materialises out of thin air!") new /obj/effect/temp_visual/ratvar/sigil/transmission(T,2) +//summons a soul vessel, which is the clockwork cult version of a soul shard. It acts like a posibrain and, as long as the target has a brain, a soul shard. +/datum/clockwork_rite/soul_vessel + name = "Rite of the Vessel" //The name of the rite + desc = "This rite is used to summon a soul vessel, a special posibrain that makes whoever has their brain put into it loyal to the Justiciar.,\ + When put into a cyborg shell, the created cyborg will automatically be a servant of Ratvar." + required_ingredients = list(/obj/item/stack/cable_coil, /obj/item/stock_parts/cell/, /obj/item/organ/cyberimp) + power_cost = 2500 //These things are pretty strong, I won't lie + requires_full_power = TRUE + cast_time = 50 + limit = INFINITE + rite_cast_sound = 'sound/magic/summon_guns.ogg' + +/datum/clockwork_rite/soul_vessel/cast(var/mob/living/invoker, var/turf/T, var/mob/living/carbon/human/target) + . = ..() + if(!.) + return FALSE + var/obj/item/mmi/posibrain/soul_vessel/SV = new /obj/item/mmi/posibrain/soul_vessel(T) + SV.visible_message("[SV] materalizes out of thin air!") + new /obj/effect/temp_visual/ratvar/sigil/transmission(T,2) + + +/datum/clockwork_rite/cyborg_transform + name = "Rite of the Divine Form" + desc = "This rite is used to ascend into a cyborg, gaining unique scripture and a loadout that depends on which module is chosen. Consult the wiki for details on each cyborg module's loadout. Mutually exclusive to Enhanced Form." + required_ingredients = list(/obj/item/mmi/posibrain, /obj/item/stack/cable_coil, /obj/item/stock_parts/cell/super, /obj/item/bodypart/l_arm/robot, /obj/item/bodypart/r_arm/robot, /obj/item/bodypart/chest/robot, /obj/item/bodypart/head/robot, /obj/item/bodypart/r_leg/robot, /obj/item/bodypart/l_leg/robot) + power_cost = 20000 + requires_human = TRUE + requires_full_power = FALSE + cast_time = 100 + limit = INFINITE + rite_cast_sound = 'sound/magic/disable_tech.ogg' + +/datum/clockwork_rite/cyborg_transform/cast(var/mob/living/invoker, var/turf/T, var/mob/living/carbon/human/target) + . = ..() + if(!.) + return FALSE + if(isclockworkgolem(target)) + return FALSE + target.visible_message("The robotic parts magnetize to [target], the new frame's eyes glowing in a brilliant yellow!") + var/mob/living/silicon/robot/R = target.Robotize() + R.cell = new /obj/item/stock_parts/cell/super(R)//takes one to use the rite to begin with + new /obj/effect/temp_visual/ratvar/sigil/transmission(T,2) + +/datum/clockwork_rite/golem_transform + name = "Rite of the Enhanced Form" + desc = "This rite is used to shed one's flesh to become a clockwork automaton, becoming immune to many environmental hazards as well as being more resilient to incoming damage. Mutually exclusive to Divine Form." + required_ingredients = list(/obj/item/mmi/posibrain, /obj/item/stock_parts/cell/super, /obj/item/bodypart/l_arm/robot, /obj/item/bodypart/r_arm/robot, /obj/item/bodypart/chest/robot, /obj/item/bodypart/head/robot, /obj/item/bodypart/r_leg/robot, /obj/item/bodypart/l_leg/robot) + power_cost = 20000 + requires_human = TRUE + requires_full_power = FALSE + cast_time = 100 + limit = INFINITE + rite_cast_sound = 'sound/magic/disable_tech.ogg' + + +/datum/clockwork_rite/golem_transform/cast(var/mob/living/invoker, var/turf/T, var/mob/living/carbon/human/target) + . = ..() + if(!.) + return FALSE + target.visible_message("The robotic parts magnetize to [target], the humanoid shape's eye glowing with an inner flame!") + to_chat(target, "The rite's power warps your body into a clockwork form! You are now immune to many hazards, and your body is more robust against damage!") + target.set_species(/datum/species/golem/clockwork/no_scrap) + new /obj/effect/temp_visual/ratvar/sigil/transmission(T,2) + #undef INFINITE diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm index b0259c460e..99d1142990 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm @@ -350,3 +350,22 @@ // Winter coat /obj/item/clothing/suit/hooded/wintercoat/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) //four sheets of metal return list("operation_time" = 30, "new_obj_type" = /obj/item/clothing/suit/hooded/wintercoat/ratvar, "power_cost" = POWER_METAL * 4, "spawn_dir" = SOUTH) + +//tools +/obj/item/crowbar/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) //1 metal rod each + return list("operation_time" = 2, "new_obj_type" = /obj/item/crowbar/brass, "power_cost" = POWER_ROD * 1, "spawn_dir" = SOUTH) + +/obj/item/screwdriver/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) + return list("operation_time" = 2, "new_obj_type" = /obj/item/screwdriver/brass, "power_cost" = POWER_ROD * 1, "spawn_dir" = SOUTH) + +/obj/item/weldingtool/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) + return list("operation_time" = 2, "new_obj_type" = /obj/item/weldingtool/experimental/brass, "power_cost" = POWER_ROD * 1, "spawn_dir" = SOUTH) + +/obj/item/wirecutters/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) + return list("operation_time" = 2, "new_obj_type" = /obj/item/wirecutters/brass, "power_cost" = POWER_ROD * 1, "spawn_dir" = SOUTH) + +/obj/item/wrench/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) + return list("operation_time" = 2, "new_obj_type" = /obj/item/wrench/brass, "power_cost" = POWER_ROD * 1, "spawn_dir" = SOUTH) + +/obj/item/multitool/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) + return list("operation_time" = 2, "new_obj_type" = /obj/item/multitool/advanced/brass, "power_cost" = POWER_ROD * 1, "spawn_dir" = SOUTH) diff --git a/code/modules/antagonists/clockcult/clock_items/clock_augments.dm b/code/modules/antagonists/clockcult/clock_items/clock_augments.dm index 2131aa7160..ff19e8891b 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_augments.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_augments.dm @@ -5,7 +5,7 @@ name = "clock-themed arm-mounted implant" var/clockwork_desc = "According to Ratvar, this really shouldn't exist. Tell Him about this immediately." syndicate_implant = TRUE - icon_state = "clock_arm_implant" + icon_state = "toolkit_implant" /obj/item/organ/cyberimp/arm/clockwork/ui_action_click() if(is_servant_of_ratvar(owner) || (obj_flags & EMAGGED)) //If you somehow manage to steal a clockie's implant AND have an emag AND manage to get it implanted for yourself, good on ya! diff --git a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm index dfda2bf152..d9938316b6 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm @@ -251,7 +251,9 @@ var/mob/camera/eminence/E = owner E.eminence_help() + /* + //Returns to the Ark - Commented out and replaced with obelisk_jump /datum/action/innate/eminence/ark_jump name = "Return to Ark" @@ -265,7 +267,7 @@ owner.playsound_local(owner, 'sound/magic/magic_missile.ogg', 50, TRUE) flash_color(owner, flash_color = "#AF0AAF", flash_time = 25) else - to_chat(owner, "There is no Ark!") + to_chat(owner, "There is no Ark!") */ //Warps to a chosen Obelisk diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm new file mode 100644 index 0000000000..5060f516c7 --- /dev/null +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm @@ -0,0 +1,432 @@ +//Clockwork guardian: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture. +/mob/living/simple_animal/hostile/clockwork/guardian + name = "clockwork guardian" + desc = "A slow, armored clockwork machine, blazing with magenta flames. It's armed with a gladius and shield, and stands ready by its master." + icon_state = "clockwork_guardian" + health = 300 + maxHealth = 300 + speed = 1 + obj_damage = 40 + melee_damage_lower = 20//ranged attacks are the way to go for fighting these + melee_damage_upper = 20 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + attack_sound = 'sound/weapons/bladeslice.ogg' + weather_immunities = list("lava") + movement_type = FLYING + AIStatus = AI_OFF //this has to be manually set so that the guardian doesn't start bashing the host, how annoying -_- + loot = list(/obj/structure/destructible/clockwork/taunting_trail) + var/true_name = "Meme Master 69" //Required to call forth the guardian + var/global/list/possible_true_names = list("Servant", "Warden", "Serf", "Page", "Usher", "Knave", "Vassal", "Escort") + var/mob/living/host //The mob that the guardian is living inside of + var/recovering = FALSE //If the guardian is recovering from recalling + var/blockchance = 17 //chance to block attacks entirely + var/counterchance = 30 //chance to counterattack after blocking + var/static/list/damage_heal_order = list(OXY, BURN, BRUTE, TOX) //we heal our host's damage in this order + light_color = "#AF0AAF" + light_range = 2 + light_power = 1.1 + playstyle_string = "You are a clockwork guardian, a living extension of Sevtug's will. As a guardian, you are somewhat slow, but may block attacks, \ + and have a chance to also counter blocked melee attacks for extra damage, in addition to being immune to extreme temperatures and pressures. \ + Your primary goal is to serve the creature that you are now a part of, as well as The Clockwork Justiciar, Ratvar. You can use The Hierophant Network to communicate silently with your master and their allies, \ + but can only exit if your master calls your true name or if they are exceptionally damaged. \ + \n\n\ + Stay near your host to protect and heal them; being too far from your host will rapidly cause you massive damage. Recall to your host if you are too weak and believe you cannot continue \ + fighting safely. As a final note, you should probably avoid harming any fellow servants of Ratvar." + +/mob/living/simple_animal/hostile/clockwork/guardian/Initialize() + . = ..() + true_name = pick(possible_true_names) + +/mob/living/simple_animal/hostile/clockwork/guardian/BiologicalLife(seconds, times_fired) + ..() + if(is_in_host()) + if(!is_servant_of_ratvar(host)) + emerge_from_host(FALSE, TRUE) + unbind_from_host() + return + if(!GLOB.ratvar_awakens && host.stat == DEAD) + death() + return + if(GLOB.ratvar_awakens) + adjustHealth(-50) + else + adjustHealth(-10) + if(!recovering) + heal_host() //also heal our host if inside of them and we aren't recovering + else if(health == maxHealth) + to_chat(src, "Your strength has returned. You can once again come forward!") + to_chat(host, "Your guardian is now strong enough to come forward again!") + recovering = FALSE + else + if(GLOB.ratvar_awakens) //If Ratvar is alive, guardians don't need a host and are downright impossible to kill + adjustHealth(-5) + heal_host() + else if(host) + if(!is_servant_of_ratvar(host)) + unbind_from_host() + return + if(host.stat == DEAD) + adjustHealth(50) + to_chat(src, "Your host is dead!") + return + if(z && host.z && z == host.z) + switch(get_dist(get_turf(src), get_turf(host))) + if(2) + adjustHealth(-1) + if(3) + //EQUILIBRIUM + if(4) + adjustHealth(1) + if(5) + adjustHealth(3) + if(6) + adjustHealth(6) + if(7) + adjustHealth(9) + if(8 to INFINITY) + adjustHealth(15) + to_chat(src, "You're too far from your host and rapidly taking damage!") + else //right next to or on top of host + adjustHealth(-2) + heal_host() //gradually heal host if nearby and host is very weak + else //well then, you're not even in the same zlevel + adjustHealth(15) + to_chat(src, "You're too far from your host and rapidly taking damage!") + +/mob/living/simple_animal/hostile/clockwork/guardian/death(gibbed) + emerge_from_host(FALSE, TRUE) + unbind_from_host() + visible_message("[src]'s equipment fades into a purple mist as the flames within sputter and dissipate.", \ + "Your equipment fades away. You feel a moment of confusion before your fragile form is annihilated.") + . = ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/Stat() + ..() + if(statpanel("Status")) + stat(null, "Current True Name: [true_name]") + stat(null, "Host: [host ? host : "NONE"]") + if(host) + var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) + if(iscarbon(host)) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) + stat(null, "Host Health: [resulthealth]%") + if(GLOB.ratvar_awakens) + stat(null, "You are [recovering ? "un" : ""]able to deploy!") + else + if(resulthealth > GUARDIAN_EMERGE_THRESHOLD) + stat(null, "You are [recovering ? "unable to deploy" : "able to deploy on hearing your True Name"]!") + else + stat(null, "You are [recovering ? "unable to deploy" : "able to deploy to protect your host"]!") + stat(null, "You do [melee_damage_upper] damage on melee attacks.") + +/mob/living/simple_animal/hostile/clockwork/guardian/Process_Spacemove(movement_dir = 0) + return 1 + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/bind_to_host(mob/living/new_host) + if(!new_host) + return FALSE + host = new_host + var/datum/action/innate/summon_guardian/SG = new() + SG.linked_guardian = src + SG.Grant(host) + var/datum/action/innate/linked_minds/LM = new() + LM.linked_guardian = src + LM.Grant(host) + return TRUE + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/unbind_from_host() + if(host) + for(var/datum/action/innate/summon_guardian/SG in host.actions) + qdel(SG) + for(var/datum/action/innate/linked_minds/LM in host.actions) + qdel(LM) + host = null + return TRUE + return FALSE + +//DAMAGE and FATIGUE +/mob/living/simple_animal/hostile/clockwork/guardian/proc/heal_host() + if(!host) + return + var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) + if(iscarbon(host)) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) + if(GLOB.ratvar_awakens || resulthealth <= GUARDIAN_EMERGE_THRESHOLD) + new /obj/effect/temp_visual/heal(host.loc, "#AF0AAF") + host.heal_ordered_damage(4, damage_heal_order) + +/mob/living/simple_animal/hostile/clockwork/guardian/adjustHealth(amount, updating_health = TRUE, forced = FALSE) + if(amount > 0) + for(var/mob/living/L in view(2, src)) + if(L.is_holding_item_of_type(/obj/item/nullrod)) + to_chat(src, "The presence of a brandished holy artifact weakens your armor!") + amount *= 4 //if a wielded null rod is nearby, it takes four times the health damage + break + . = ..() + if(src && updating_health) + update_health_hud() + update_stats() + +/mob/living/simple_animal/hostile/clockwork/guardian/update_health_hud() + if(hud_used && hud_used.healths) + if(istype(hud_used, /datum/hud)) + var/datum/hud/marauder/G = hud_used + var/resulthealth + if(host) + if(iscarbon(host)) + resulthealth = "[round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100)]%" + else + resulthealth = "[round((host.health / host.maxHealth) * 100, 0.5)]%" + else + resulthealth = "NONE" + G.hosthealth.maptext = "
HOST
[resulthealth]
" + hud_used.healths.maptext = "
[round((health / maxHealth) * 100, 0.5)]%" + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/update_stats() + if(GLOB.ratvar_awakens) + speed = 0 + melee_damage_lower = 20 + melee_damage_upper = 20 + attack_verb_continuous = "devastates" + else + var/healthpercent = (health/maxHealth) * 100 + switch(healthpercent) + if(100 to 70) //Bonuses to speed and damage at high health + speed = 0 + melee_damage_lower = 16 + melee_damage_upper = 16 + attack_verb_continuous = "viciously slashes" + if(70 to 40) + speed = initial(speed) + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + attack_verb_continuous = initial(attack_verb_continuous) + if(40 to 30) //Damage decrease, but not speed + speed = initial(speed) + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "lightly slashes" + if(30 to 20) //Speed decrease + speed = 2 + melee_damage_lower = 8 + melee_damage_upper = 8 + attack_verb_continuous = "lightly slashes" + if(20 to 10) //Massive speed decrease and weak melee attacks + speed = 3 + melee_damage_lower = 6 + melee_damage_upper = 6 + attack_verb_continuous = "weakly slashes" + if(10 to 0) //We are super weak and going to die + speed = 4 + melee_damage_lower = 4 + melee_damage_upper = 4 + attack_verb_continuous = "taps" + +//ATTACKING, BLOCKING, and COUNTERING + +/mob/living/simple_animal/hostile/clockwork/guardian/AttackingTarget() + if(is_in_host()) + return FALSE + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/bullet_act(obj/item/projectile/Proj) + if(blockOrCounter(null, Proj)) + return + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/hitby(atom/movable/AM, skipcatch, hitpush, blocked, atom/movable/AM, datum/thrownthing/throwingdatum) + if(blockOrCounter(null, AM)) + return + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/attack_animal(mob/living/simple_animal/M) + if(istype(M, /mob/living/simple_animal/hostile/clockwork/guardian) || !blockOrCounter(M, M)) //we don't want infinite blockcounter loops if fighting another guardian + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/attack_paw(mob/living/carbon/monkey/M) + if(!blockOrCounter(M, M)) + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/attack_alien(mob/living/carbon/alien/humanoid/M) + if(!blockOrCounter(M, M)) + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/attack_slime(mob/living/simple_animal/slime/M) + if(!blockOrCounter(M, M)) + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/attack_hand(mob/living/carbon/human/M) + if(!blockOrCounter(M, M)) + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/nullrod) || !blockOrCounter(user, I)) + return ..() + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/blockOrCounter(mob/target, atom/textobject) + if(GLOB.ratvar_awakens) //if ratvar has woken, we block nearly everything at a very high chance + blockchance = 90 + counterchance = 90 + if(prob(blockchance)) + . = TRUE + if(target) + target.do_attack_animation(src) + target.DelayNextAction(CLICK_CD_MELEE) + blockchance = initial(blockchance) + playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 30, 1, 0, 1) //clang + visible_message("[src] blocks [target && isitem(textobject) ? "[target]'s [textobject.name]":"\the [textobject]"]!", \ + "You block [target && isitem(textobject) ? "[target]'s [textobject.name]":"\the [textobject]"]!") + if(target && Adjacent(target)) + if(prob(counterchance)) + counterchance = initial(counterchance) + var/previousattack_verb_continuous = attack_verb_continuous + attack_verb_continuous = "counters" + UnarmedAttack(target) + attack_verb_continuous = previousattack_verb_continuous + else + counterchance = min(counterchance + initial(counterchance), 100) + else + blockchance = min(blockchance + initial(blockchance), 100) + if(GLOB.ratvar_awakens) + blockchance = 90 + counterchance = 90 + +//COMMUNICATION and EMERGENCE +/* +/mob/living/simple_animal/hostile/clockwork/guardian/handle_inherent_channels(message, message_mode) + if(host && (is_in_host() || message_mode == MODE_BINARY)) + guardian_comms(message) + return TRUE + return ..() +*/ +/mob/living/simple_animal/hostile/clockwork/guardian/proc/guardian_comms(message) + var/name_part = "[src] ([true_name])" + message = "\"[message]\"" //Processed output + to_chat(src, "[name_part]: [message]") + to_chat(host, "[name_part]: [message]") + for(var/M in GLOB.mob_list) + if(isobserver(M)) + var/link = FOLLOW_LINK(M, src) + to_chat(M, "[link] [name_part] (to [findtextEx(host.name, host.real_name) ? "[host.name]" : "[host.real_name] (as [host.name])"]): [message] ") + return TRUE + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/return_to_host() + if(is_in_host()) + return FALSE + if(!host) + to_chat(src, "You don't have a host!") + return FALSE + var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) + if(iscarbon(host)) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) + host.visible_message("[host]'s skin flashes magenta!", "You feel [true_name]'s consciousness settle in your mind.") + visible_message("[src] suddenly disappears!", "You return to [host].") + forceMove(host) + if(resulthealth > GUARDIAN_EMERGE_THRESHOLD && health != maxHealth) + recovering = TRUE + to_chat(src, "You have weakened and will need to recover before manifesting again!") + to_chat(host, "[true_name] has weakened and will need to recover before manifesting again!") + return TRUE + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/try_emerge() + if(!host) + to_chat(src, "You don't have a host!") + return FALSE + if(!GLOB.ratvar_awakens) + var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) + if(iscarbon(host)) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) + if(host.stat != DEAD && resulthealth > GUARDIAN_EMERGE_THRESHOLD) //if above 20 health, fails + to_chat(src, "Your host must be at [GUARDIAN_EMERGE_THRESHOLD]% or less health to emerge like this!") + return FALSE + return emerge_from_host(FALSE) + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/emerge_from_host(hostchosen, force) //Notice that this is a proc rather than a verb - guardians can NOT exit at will, but they CAN return + if(!is_in_host()) + return FALSE + if(!force && recovering) + if(hostchosen) + to_chat(host, "[true_name] is too weak to come forth!") + else + to_chat(host, "[true_name] tries to emerge to protect you, but it's too weak!") + to_chat(src, "You try to come forth, but you're too weak!") + return FALSE + if(!force) + if(hostchosen) //guardian approved + to_chat(host, "Your words echo with power as [true_name] emerges from your body!") + else + to_chat(host, "[true_name] emerges from your body to protect you!") + forceMove(host.loc) + visible_message("[host]'s skin glows red as [name] emerges from their body!", "You exit the safety of [host]'s body!") + return TRUE + +/mob/living/simple_animal/hostile/clockwork/guardian/get_alt_name() + return " ([text2ratvar(true_name)])" + +/mob/living/simple_animal/hostile/clockwork/guardian/proc/is_in_host() //Checks if the guardian is inside of their host + return host && loc == host + +//HOST ACTIONS + +//Summon guardian action: Calls forth or recalls your guardian +/datum/action/innate/summon_guardian + name = "Force Guardian to Emerge/Recall" + desc = "Allows you to force your clockwork guardian to emerge or recall as required." + button_icon_state = "clockwork_marauder" + background_icon_state = "bg_clock" + check_flags = AB_CHECK_CONSCIOUS + buttontooltipstyle = "clockcult" + var/mob/living/simple_animal/hostile/clockwork/guardian/linked_guardian + var/list/defend_phrases = list("Defend me", "Come forth", "Assist me", "Protect me", "Give aid", "Help me") + var/list/return_phrases = list("Return", "Return to me", "Your job is done", "You have served", "Come back", "Retreat") + +/datum/action/innate/summon_guardian/IsAvailable() + if(!linked_guardian) + return FALSE + if(isliving(owner)) + var/mob/living/L = owner + if(!L.can_speak_vocal() || L.stat) + return FALSE + return ..() + +/datum/action/innate/summon_guardian/Activate() + if(linked_guardian.is_in_host()) + clockwork_say(owner, text2ratvar("[pick(defend_phrases)], [linked_guardian.true_name]!")) + linked_guardian.emerge_from_host(TRUE) + else + clockwork_say(owner, text2ratvar("[pick(return_phrases)], [linked_guardian.true_name]!")) + linked_guardian.return_to_host() + return TRUE + +//Linked Minds action: talks to your guardian +/datum/action/innate/linked_minds + name = "Linked Minds" + desc = "Allows you to silently communicate with your guardian." + button_icon_state = "linked_minds" + background_icon_state = "bg_clock" + check_flags = AB_CHECK_CONSCIOUS + buttontooltipstyle = "clockcult" + var/mob/living/simple_animal/hostile/clockwork/guardian/linked_guardian + +/datum/action/innate/linked_minds/IsAvailable() + if(!linked_guardian) + return FALSE + return ..() + +/datum/action/innate/linked_minds/Activate() + var/message = stripped_input(owner, "Enter a message to tell your guardian.", "Telepathy") + if(!owner || !message) + return FALSE + if(!linked_guardian) + to_chat(owner, "Your guardian seems to have been destroyed!") + return FALSE + var/name_part = "Servant [findtextEx(owner.name, owner.real_name) ? "[owner.name]" : "[owner.real_name] (as [owner.name])"]" + message = "\"[message]\"" //Processed output + to_chat(owner, "[name_part]: [message]") + to_chat(linked_guardian, "[name_part]: [message]") + for(var/M in GLOB.mob_list) + if(isobserver(M)) + var/link = FOLLOW_LINK(M, src) + to_chat(M, "[link] [name_part] (to [linked_guardian] ([linked_guardian.true_name])): [message]") + return TRUE diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm index 76c9db7231..d58608652c 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm @@ -123,437 +123,3 @@ #undef MARAUDER_SLOWDOWN_PERCENTAGE #undef MARAUDER_SHIELD_REGEN_TIME - -//Clockwork guardian: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture. -/mob/living/simple_animal/hostile/clockwork/marauder/guardian - name = "clockwork guardian" - desc = "A stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield and stands ready by its master." - icon_state = "clockwork_marauder" - health = 300 - maxHealth = 300 - speed = 1 - obj_damage = 40 - melee_damage_lower = 12 - melee_damage_upper = 12 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' - weather_immunities = list("lava") - movement_type = FLYING - AIStatus = AI_OFF //this has to be manually set so that the guardian doesn't start bashing the host, how annoying -_- - loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor) - max_shield_health = 0 - shield_health = 0 - var/true_name = "Meme Master 69" //Required to call forth the guardian - var/global/list/possible_true_names = list("Servant", "Warden", "Serf", "Page", "Usher", "Knave", "Vassal", "Escort") - var/mob/living/host //The mob that the guardian is living inside of - var/recovering = FALSE //If the guardian is recovering from recalling - var/blockchance = 17 //chance to block attacks entirely - var/counterchance = 30 //chance to counterattack after blocking - var/static/list/damage_heal_order = list(OXY, BURN, BRUTE, TOX) //we heal our host's damage in this order - light_range = 2 - light_power = 1.1 - playstyle_string = "You are a clockwork guardian, a living extension of Sevtug's will. As a guardian, you are somewhat slow, but may block attacks, \ - and have a chance to also counter blocked melee attacks for extra damage, in addition to being immune to extreme temperatures and pressures. \ - Your primary goal is to serve the creature that you are now a part of, as well as The Clockwork Justiciar, Ratvar. You can use The Hierophant Network to communicate silently with your master and their allies, \ - but can only exit if your master calls your true name or if they are exceptionally damaged. \ - \n\n\ - Stay near your host to protect and heal them; being too far from your host will rapidly cause you massive damage. Recall to your host if you are too weak and believe you cannot continue \ - fighting safely. As a final note, you should probably avoid harming any fellow servants of Ratvar." - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/Initialize() - . = ..() - true_name = pick(possible_true_names) - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/BiologicalLife(seconds, times_fired) - ..() - if(is_in_host()) - if(!is_servant_of_ratvar(host)) - emerge_from_host(FALSE, TRUE) - unbind_from_host() - return - if(!GLOB.ratvar_awakens && host.stat == DEAD) - death() - return - if(GLOB.ratvar_awakens) - adjustHealth(-50) - else - adjustHealth(-10) - if(!recovering) - heal_host() //also heal our host if inside of them and we aren't recovering - else if(health == maxHealth) - to_chat(src, "Your strength has returned. You can once again come forward!") - to_chat(host, "Your guardian is now strong enough to come forward again!") - recovering = FALSE - else - if(GLOB.ratvar_awakens) //If Ratvar is alive, guardians don't need a host and are downright impossible to kill - adjustHealth(-5) - heal_host() - else if(host) - if(!is_servant_of_ratvar(host)) - unbind_from_host() - return - if(host.stat == DEAD) - adjustHealth(50) - to_chat(src, "Your host is dead!") - return - if(z && host.z && z == host.z) - switch(get_dist(get_turf(src), get_turf(host))) - if(2) - adjustHealth(-1) - if(3) - //EQUILIBRIUM - if(4) - adjustHealth(1) - if(5) - adjustHealth(3) - if(6) - adjustHealth(6) - if(7) - adjustHealth(9) - if(8 to INFINITY) - adjustHealth(15) - to_chat(src, "You're too far from your host and rapidly taking damage!") - else //right next to or on top of host - adjustHealth(-2) - heal_host() //gradually heal host if nearby and host is very weak - else //well then, you're not even in the same zlevel - adjustHealth(15) - to_chat(src, "You're too far from your host and rapidly taking damage!") - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/death(gibbed) - emerge_from_host(FALSE, TRUE) - unbind_from_host() - visible_message("[src]'s equipment clatters lifelessly to the ground as the red flames within dissipate.", \ - "Your equipment falls away. You feel a moment of confusion before your fragile form is annihilated.") - . = ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/Stat() - ..() - if(statpanel("Status")) - stat(null, "Current True Name: [true_name]") - stat(null, "Host: [host ? host : "NONE"]") - if(host) - var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) - if(iscarbon(host)) - resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) - stat(null, "Host Health: [resulthealth]%") - if(GLOB.ratvar_awakens) - stat(null, "You are [recovering ? "un" : ""]able to deploy!") - else - if(resulthealth > GUARDIAN_EMERGE_THRESHOLD) - stat(null, "You are [recovering ? "unable to deploy" : "able to deploy on hearing your True Name"]!") - else - stat(null, "You are [recovering ? "unable to deploy" : "able to deploy to protect your host"]!") - stat(null, "You do [melee_damage_upper] damage on melee attacks.") - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/Process_Spacemove(movement_dir = 0) - return 1 - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/bind_to_host(mob/living/new_host) - if(!new_host) - return FALSE - host = new_host - var/datum/action/innate/summon_guardian/SG = new() - SG.linked_guardian = src - SG.Grant(host) - var/datum/action/innate/linked_minds/LM = new() - LM.linked_guardian = src - LM.Grant(host) - return TRUE - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/unbind_from_host() - if(host) - for(var/datum/action/innate/summon_guardian/SG in host.actions) - qdel(SG) - for(var/datum/action/innate/linked_minds/LM in host.actions) - qdel(LM) - host = null - return TRUE - return FALSE - -//DAMAGE and FATIGUE -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/heal_host() - if(!host) - return - var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) - if(iscarbon(host)) - resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) - if(GLOB.ratvar_awakens || resulthealth <= GUARDIAN_EMERGE_THRESHOLD) - new /obj/effect/temp_visual/heal(host.loc, "#AF0AAF") - host.heal_ordered_damage(4, damage_heal_order) - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(amount > 0) - for(var/mob/living/L in view(2, src)) - if(L.is_holding_item_of_type(/obj/item/nullrod)) - to_chat(src, "The presence of a brandished holy artifact weakens your armor!") - amount *= 4 //if a wielded null rod is nearby, it takes four times the health damage - break - . = ..() - if(src && updating_health) - update_health_hud() - update_stats() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/update_health_hud() - if(hud_used && hud_used.healths) - if(istype(hud_used, /datum/hud/marauder)) - var/datum/hud/marauder/G = hud_used - var/resulthealth - if(host) - if(iscarbon(host)) - resulthealth = "[round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100)]%" - else - resulthealth = "[round((host.health / host.maxHealth) * 100, 0.5)]%" - else - resulthealth = "NONE" - G.hosthealth.maptext = "
HOST
[resulthealth]
" - hud_used.healths.maptext = "
[round((health / maxHealth) * 100, 0.5)]%" - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/update_stats() - if(GLOB.ratvar_awakens) - speed = 0 - melee_damage_lower = 20 - melee_damage_upper = 20 - attack_verb_continuous = "devastates" - else - var/healthpercent = (health/maxHealth) * 100 - switch(healthpercent) - if(100 to 70) //Bonuses to speed and damage at high health - speed = 0 - melee_damage_lower = 16 - melee_damage_upper = 16 - attack_verb_continuous = "viciously slashes" - if(70 to 40) - speed = initial(speed) - melee_damage_lower = initial(melee_damage_lower) - melee_damage_upper = initial(melee_damage_upper) - attack_verb_continuous = initial(attack_verb_continuous) - if(40 to 30) //Damage decrease, but not speed - speed = initial(speed) - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "lightly slashes" - if(30 to 20) //Speed decrease - speed = 2 - melee_damage_lower = 8 - melee_damage_upper = 8 - attack_verb_continuous = "lightly slashes" - if(20 to 10) //Massive speed decrease and weak melee attacks - speed = 3 - melee_damage_lower = 6 - melee_damage_upper = 6 - attack_verb_continuous = "weakly slashes" - if(10 to 0) //We are super weak and going to die - speed = 4 - melee_damage_lower = 4 - melee_damage_upper = 4 - attack_verb_continuous = "taps" - -//ATTACKING, BLOCKING, and COUNTERING - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/AttackingTarget() - if(is_in_host()) - return FALSE - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/bullet_act(obj/item/projectile/Proj) - if(blockOrCounter(null, Proj)) - return - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/hitby(atom/movable/AM, skipcatch, hitpush, blocked, atom/movable/AM, datum/thrownthing/throwingdatum) - if(blockOrCounter(null, AM)) - return - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/hostile/clockwork/marauder/guardian) || !blockOrCounter(M, M)) //we don't want infinite blockcounter loops if fighting another guardian - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/attack_paw(mob/living/carbon/monkey/M) - if(!blockOrCounter(M, M)) - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/attack_alien(mob/living/carbon/alien/humanoid/M) - if(!blockOrCounter(M, M)) - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/attack_slime(mob/living/simple_animal/slime/M) - if(!blockOrCounter(M, M)) - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/attack_hand(mob/living/carbon/human/M) - if(!blockOrCounter(M, M)) - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/nullrod) || !blockOrCounter(user, I)) - return ..() - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/blockOrCounter(mob/target, atom/textobject) - if(GLOB.ratvar_awakens) //if ratvar has woken, we block nearly everything at a very high chance - blockchance = 90 - counterchance = 90 - if(prob(blockchance)) - . = TRUE - if(target) - target.do_attack_animation(src) - target.DelayNextAction(CLICK_CD_MELEE) - blockchance = initial(blockchance) - playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 30, 1, 0, 1) //clang - visible_message("[src] blocks [target && isitem(textobject) ? "[target]'s [textobject.name]":"\the [textobject]"]!", \ - "You block [target && isitem(textobject) ? "[target]'s [textobject.name]":"\the [textobject]"]!") - if(target && Adjacent(target)) - if(prob(counterchance)) - counterchance = initial(counterchance) - var/previousattack_verb_continuous = attack_verb_continuous - attack_verb_continuous = "counters" - UnarmedAttack(target) - attack_verb_continuous = previousattack_verb_continuous - else - counterchance = min(counterchance + initial(counterchance), 100) - else - blockchance = min(blockchance + initial(blockchance), 100) - if(GLOB.ratvar_awakens) - blockchance = 90 - counterchance = 90 - -//COMMUNICATION and EMERGENCE -/* -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/handle_inherent_channels(message, message_mode) - if(host && (is_in_host() || message_mode == MODE_BINARY)) - guardian_comms(message) - return TRUE - return ..() -*/ -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/guardian_comms(message) - var/name_part = "[src] ([true_name])" - message = "\"[message]\"" //Processed output - to_chat(src, "[name_part]: [message]") - to_chat(host, "[name_part]: [message]") - for(var/M in GLOB.mob_list) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [name_part] (to [findtextEx(host.name, host.real_name) ? "[host.name]" : "[host.real_name] (as [host.name])"]): [message] ") - return TRUE - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/return_to_host() - if(is_in_host()) - return FALSE - if(!host) - to_chat(src, "You don't have a host!") - return FALSE - var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) - if(iscarbon(host)) - resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) - host.visible_message("[host]'s skin flashes crimson!", "You feel [true_name]'s consciousness settle in your mind.") - visible_message("[src] suddenly disappears!", "You return to [host].") - forceMove(host) - if(resulthealth > GUARDIAN_EMERGE_THRESHOLD && health != maxHealth) - recovering = TRUE - to_chat(src, "You have weakened and will need to recover before manifesting again!") - to_chat(host, "[true_name] has weakened and will need to recover before manifesting again!") - return TRUE - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/try_emerge() - if(!host) - to_chat(src, "You don't have a host!") - return FALSE - if(!GLOB.ratvar_awakens) - var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) - if(iscarbon(host)) - resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) - if(host.stat != DEAD && resulthealth > GUARDIAN_EMERGE_THRESHOLD) //if above 20 health, fails - to_chat(src, "Your host must be at [GUARDIAN_EMERGE_THRESHOLD]% or less health to emerge like this!") - return FALSE - return emerge_from_host(FALSE) - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/emerge_from_host(hostchosen, force) //Notice that this is a proc rather than a verb - guardians can NOT exit at will, but they CAN return - if(!is_in_host()) - return FALSE - if(!force && recovering) - if(hostchosen) - to_chat(host, "[true_name] is too weak to come forth!") - else - to_chat(host, "[true_name] tries to emerge to protect you, but it's too weak!") - to_chat(src, "You try to come forth, but you're too weak!") - return FALSE - if(!force) - if(hostchosen) //guardian approved - to_chat(host, "Your words echo with power as [true_name] emerges from your body!") - else - to_chat(host, "[true_name] emerges from your body to protect you!") - forceMove(host.loc) - visible_message("[host]'s skin glows red as [name] emerges from their body!", "You exit the safety of [host]'s body!") - return TRUE - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/get_alt_name() - return " ([text2ratvar(true_name)])" - -/mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/is_in_host() //Checks if the guardian is inside of their host - return host && loc == host - -//HOST ACTIONS - -//Summon guardian action: Calls forth or recalls your guardian -/datum/action/innate/summon_guardian - name = "Force Guardian to Emerge/Recall" - desc = "Allows you to force your clockwork guardian to emerge or recall as required." - button_icon_state = "clockwork_marauder" - background_icon_state = "bg_clock" - check_flags = AB_CHECK_CONSCIOUS - buttontooltipstyle = "clockcult" - var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/linked_guardian - var/list/defend_phrases = list("Defend me", "Come forth", "Assist me", "Protect me", "Give aid", "Help me") - var/list/return_phrases = list("Return", "Return to me", "Your job is done", "You have served", "Come back", "Retreat") - -/datum/action/innate/summon_guardian/IsAvailable() - if(!linked_guardian) - return FALSE - if(isliving(owner)) - var/mob/living/L = owner - if(!L.can_speak_vocal() || L.stat) - return FALSE - return ..() - -/datum/action/innate/summon_guardian/Activate() - if(linked_guardian.is_in_host()) - clockwork_say(owner, text2ratvar("[pick(defend_phrases)], [linked_guardian.true_name]!")) - linked_guardian.emerge_from_host(TRUE) - else - clockwork_say(owner, text2ratvar("[pick(return_phrases)], [linked_guardian.true_name]!")) - linked_guardian.return_to_host() - return TRUE - -//Linked Minds action: talks to your guardian -/datum/action/innate/linked_minds - name = "Linked Minds" - desc = "Allows you to silently communicate with your guardian." - button_icon_state = "linked_minds" - background_icon_state = "bg_clock" - check_flags = AB_CHECK_CONSCIOUS - buttontooltipstyle = "clockcult" - var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/linked_guardian - -/datum/action/innate/linked_minds/IsAvailable() - if(!linked_guardian) - return FALSE - return ..() - -/datum/action/innate/linked_minds/Activate() - var/message = stripped_input(owner, "Enter a message to tell your guardian.", "Telepathy") - if(!owner || !message) - return FALSE - if(!linked_guardian) - to_chat(owner, "Your guardian seems to have been destroyed!") - return FALSE - var/name_part = "Servant [findtextEx(owner.name, owner.real_name) ? "[owner.name]" : "[owner.real_name] (as [owner.name])"]" - message = "\"[message]\"" //Processed output - to_chat(owner, "[name_part]: [message]") - to_chat(linked_guardian, "[name_part]: [message]") - for(var/M in GLOB.mob_list) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [name_part] (to [linked_guardian] ([linked_guardian.true_name])): [message]") - return TRUE diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm index aa0f7f03fa..6922c7cd81 100644 --- a/code/modules/antagonists/clockcult/clock_scripture.dm +++ b/code/modules/antagonists/clockcult/clock_scripture.dm @@ -5,7 +5,7 @@ Pieces of scripture require certain follower counts, contruction value, and acti Drivers: Unlocked by default Scripts: 35k power or one convert Applications: 50k or three converts -Judgement 5 converts +Judgement 80k power or nine converts */ /datum/clockwork_scripture diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm index 77dc174238..85450dc152 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm @@ -18,7 +18,7 @@ tier = SCRIPTURE_APPLICATION one_per_tile = TRUE primary_component = HIEROPHANT_ANSIBLE - sort_priority = 1 + sort_priority = 2 important = TRUE quickbind = TRUE quickbind_desc = "Creates a Sigil of Transmission, which can drain and will store power for clockwork structures." @@ -72,7 +72,7 @@ tier = SCRIPTURE_APPLICATION one_per_tile = TRUE primary_component = HIEROPHANT_ANSIBLE - sort_priority = 2 + sort_priority = 5 quickbind = TRUE quickbind_desc = "Creates a Mania Motor, which causes minor damage and negative mental effects in non-Servants." requires_full_power = TRUE @@ -101,7 +101,7 @@ //Memory Allocation: Finds a willing ghost and makes them into a clockwork guardian for the invoker. /datum/clockwork_scripture/memory_allocation - descname = "Personal Guardian, A Peice Of Your Mind." + descname = "Personal Guardian housed in the brain." name = "Memory Allocation" desc = "Allocates part of your consciousness to a Clockwork Guardian, a variant of Marauder that lives within you, able to be \ called forth by Speaking its True Name or if you become exceptionally low on health.
\ @@ -109,13 +109,13 @@ invocations = list("Fright's will...", "...call forth...") channel_time = 100 power_cost = 8000 - usage_tip = "guardians are useful as personal bodyguards and frontline warriors." + usage_tip = "Guardians are useful as personal bodyguards and frontline warriors." tier = SCRIPTURE_APPLICATION primary_component = GEIS_CAPACITOR - sort_priority = 5 + sort_priority = 6 /datum/clockwork_scripture/memory_allocation/check_special_requirements() - for(var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/M in GLOB.all_clockwork_mobs) + for(var/mob/living/simple_animal/hostile/clockwork/guardian/M in GLOB.all_clockwork_mobs) if(M.host == invoker) to_chat(invoker, "You can only house one guardian at a time!") return FALSE @@ -151,7 +151,7 @@ return FALSE clockwork_say(invoker, text2ratvar("...sword and shield!")) var/mob/dead/observer/theghost = pick(marauder_candidates) - var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/M = new(invoker) + var/mob/living/simple_animal/hostile/clockwork/guardian/M = new(invoker) M.key = theghost.key M.bind_to_host(invoker) invoker.visible_message("The tendril retracts from [invoker]'s head, sealing the entry wound as it does so!", \ @@ -171,7 +171,7 @@ tier = SCRIPTURE_APPLICATION one_per_tile = TRUE primary_component = BELLIGERENT_EYE - sort_priority = 6 + sort_priority = 7 quickbind = TRUE quickbind_desc = "Creates a clockwork marauder, used for frontline combat." object_path = /obj/item/clockwork/construct_chassis/clockwork_marauder @@ -223,7 +223,7 @@ object_path = /obj/mecha/combat/neovgre tier = SCRIPTURE_APPLICATION primary_component = BELLIGERENT_EYE - sort_priority = 7 + sort_priority = 8 creator_message = "Neovgre, the Anima Bulwark towers over you... your enemies reckoning has come." /datum/clockwork_scripture/create_object/summon_arbiter/check_special_requirements() diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_judgement.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_judgement.dm index 5075840e76..ea10725489 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_judgement.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_judgement.dm @@ -20,7 +20,7 @@ usage_tip = "The gateway is completely vulnerable to attack during its five-minute duration. It will periodically give indication of its general position to everyone on the station \ as well as being loud enough to be heard throughout the entire sector. Defend it with your life!" tier = SCRIPTURE_APPLICATION - sort_priority = 8 + sort_priority = 1 requires_full_power = TRUE /datum/clockwork_scripture/create_object/ark_of_the_clockwork_justiciar/check_special_requirements() diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index 3b507fb57c..a481415cf5 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -81,7 +81,7 @@ priority_announce("Massive [Gibberish("bluespace", 100)] anomaly detected on all frequencies. All crew are directed to \ @!$, [text2ratvar("PURGE ALL UNTRUTHS")] <&. the anomalies and destroy their source to prevent further damage to corporate property. This is \ not a drill.", "Central Command Higher Dimensional Affairs", 'sound/magic/clockwork/ark_activation_sequence.ogg') - set_security_level("delta") + set_security_level("Delta") for(var/V in SSticker.mode.servants_of_ratvar) var/datum/mind/M = V if(!M || !M.current) diff --git a/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm index 28901ea0b2..24ad1af88a 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -29,8 +29,9 @@ sound_to_playing_players('sound/effects/ratvar_reveal.ogg') var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert") notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [get_area_name(src)] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay) - INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 10, null, FALSE, 0) SSpersistence.station_was_destroyed = TRUE + INVOKE_ASYNC(src, .proc/purge_the_heresy) + /obj/structure/destructible/clockwork/massive/ratvar/Destroy() GLOB.ratvar_awakens-- @@ -151,3 +152,34 @@ sound_to_playing_players('sound/machines/clockcult/ratvar_scream.ogg', 80) narsie.clashing = FALSE qdel(src) + + +/obj/structure/destructible/clockwork/massive/ratvar/proc/purge_the_heresy() + sleep(50) + priority_announce("Massive energy surge detected. Closest matching threat: Incoming supernova. All crew are advised to evacuate NAN lightyears away from blast zone","Central Command Higher Dimensional Affairs", 'sound/misc/airraid.ogg') + sleep(300) + priority_announce("Gravitational anomalies detected on the station. [Gibberish("There is no additional dat", 100)]-BZZZZZT.","Central Command Higher Dimensional Affairs", 'sound/magic/clockwork/ratvar_announce1.ogg') + sleep(80) + sound_to_playing_players('sound/magic/clockwork/ratvar_announce2.ogg', 70) + send_to_playing_players("\"COME, ALL THOSE FAITHFUL! WITNESS THE RAYS OF JUSTICE CAST UPON THE HERETICS!\"") + sleep(50) + SSshuttle.registerHostileEnvironment(src) + SSshuttle.lockdown = TRUE + sleep(250) + if(QDELETED(src)) + priority_announce("Energy signal no longer detected.","Central Command Higher Dimensional Affairs") + return + sound_to_playing_players('sound/magic/clockwork/ark_activation_sequence.ogg', 80) //if this isn't lessened in volume it peaks for some reason + addtimer(CALLBACK(GLOBAL_PROC, /proc/clockcult_ending_helper), 300) + +/proc/clockcult_ending_helper() + for(var/mob/M in GLOB.mob_list) + if(M.client) + SEND_SOUND(M, sound('sound/magic/clockwork/ratvar_attack.ogg')) + SEND_SOUND(M, sound('sound/magic/clockwork/ratvarfire.ogg')) + if(!is_servant_of_ratvar(M) && isliving(M)) + var/mob/living/L = M + L.fire_stacks = INFINITY + L.IgniteMob() + sleep(50) + SSticker.force_ending = 1 diff --git a/code/modules/antagonists/clockcult/clock_structures/reflector.dm b/code/modules/antagonists/clockcult/clock_structures/reflector.dm index c91e9dd918..e734429524 100644 --- a/code/modules/antagonists/clockcult/clock_structures/reflector.dm +++ b/code/modules/antagonists/clockcult/clock_structures/reflector.dm @@ -1,7 +1,7 @@ /obj/structure/destructible/clockwork/reflector name = "reflector" - desc = "A large lantern-shaped machine made of thin brass. It looks fragile." - clockwork_desc = "A lantern-shaped generator that produces power when near starlight." + desc = "A large mirror-like structure made of thin brass on one side. It looks fragile." + clockwork_desc = "A large mirror-like structure made of thin brass on one side. It can redirect laser fire on one side" icon_state = "reflector" unanchored_icon = "reflector_unwrenched" max_integrity = 40 diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index b935258c27..efea8ed771 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -5,7 +5,7 @@ antagpanel_category = "Clockcult" job_rank = ROLE_SERVANT_OF_RATVAR antag_moodlet = /datum/mood_event/cult - skill_modifiers = list(/datum/skill_modifier/job/level/wiring) + skill_modifiers = list(/datum/skill_modifier/job/level/wiring, /datum/skill_modifier/job/level/dwarfy/blacksmithing) var/datum/action/innate/hierophant/hierophant_network = new threat = 3 var/datum/team/clockcult/clock_team diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 77893225fa..bbdf41ff48 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -83,7 +83,7 @@ if(choice == "Yes" && IsAvailable()) var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) if(!C.cult_team) - to_chat(owner, "Do you not alreaady lead yourself?") + to_chat(owner, "Do you not already lead yourself?") return pollCultists(owner,C.cult_team) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm index 1e43754477..fc0a5cdc6a 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm @@ -25,9 +25,9 @@ to_chat(owner, "You are the Heretic!
\ The old ones gave you these tasks to fulfill:") owner.announce_objectives() - to_chat(owner, "The book whispers, the forbidden knowledge walks once again!
\ - Your book allows you to research abilities, but be careful, you cannot undo what has been done.
\ - You gain charges by either collecting influences or sacrificing people tracked by the living heart
\ + to_chat(owner, "The book whispers softly, its forbidden knowledge walks this plane once again!
\ + Your book allows you to research abilities. Read it very carefully, for you cannot undo what has been done!
\ + You gain charges by either collecting influences or sacrificing people tracked by the living heart.
\ You can find a basic guide at : https://tgstation13.org/wiki/Heresy_101
") /datum/antagonist/heretic/on_gain() @@ -39,7 +39,6 @@ gain_knowledge(/datum/eldritch_knowledge/spell/basic) gain_knowledge(/datum/eldritch_knowledge/living_heart) gain_knowledge(/datum/eldritch_knowledge/codex_cicatrix) - gain_knowledge(/datum/eldritch_knowledge/eldritch_blade) current.log_message("has been converted to the cult of the forgotten ones!", LOG_ATTACK, color="#960000") GLOB.reality_smash_track.AddMind(owner) START_PROCESSING(SSprocessing,src) @@ -59,6 +58,8 @@ GLOB.reality_smash_track.RemoveMind(owner) STOP_PROCESSING(SSprocessing,src) + on_death() + return ..() @@ -90,15 +91,25 @@ /datum/antagonist/heretic/process() + if(owner.current.stat == DEAD) + return + for(var/X in researched_knowledge) var/datum/eldritch_knowledge/EK = researched_knowledge[X] EK.on_life(owner.current) +///What happens to the heretic once he dies, used to remove any custom perks +/datum/antagonist/heretic/proc/on_death() + + for(var/X in researched_knowledge) + var/datum/eldritch_knowledge/EK = researched_knowledge[X] + EK.on_death(owner.current) + /datum/antagonist/heretic/proc/forge_primary_objectives() var/list/assasination = list() var/list/protection = list() for(var/i in 1 to 2) - var/pck = pick("assasinate","protect") + var/pck = pick("assasinate") switch(pck) if("assasinate") var/datum/objective/assassinate/once/A = new @@ -107,13 +118,6 @@ A.find_target(owners,protection) assasination += A.target objectives += A - if("protect") - var/datum/objective/protect/P = new - P.owner = owner - var/list/owners = P.get_owners() - P.find_target(owners,assasination) - protection += P.target - objectives += P var/datum/objective/sacrifice_ecult/SE = new SE.owner = owner @@ -126,7 +130,7 @@ if(mob_override) current = mob_override add_antag_hud(antag_hud_type, antag_hud_name, current) - handle_clown_mutation(current, mob_override ? null : "Knowledge described in the book allowed you to overcome your clownish nature, allowing you to use complex items effectively.") + handle_clown_mutation(current, mob_override ? null : "Ancient knowledge described in the book allows you to overcome your clownish nature, allowing you to use complex items effectively.") current.faction |= "heretics" /datum/antagonist/heretic/remove_innate_effects(mob/living/mob_override) @@ -161,7 +165,7 @@ cultiewin = FALSE count++ if(ascended) - parts += "HERETIC HAS ASCENDED!" + parts += "THE HERETIC ASCENDED!" else if(cultiewin) parts += "The heretic was successful!" diff --git a/code/modules/antagonists/eldritch_cult/eldritch_book.dm b/code/modules/antagonists/eldritch_cult/eldritch_book.dm index 33485927ca..265f4db095 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_book.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_book.dm @@ -1,6 +1,6 @@ /obj/item/forbidden_book name = "Codex Cicatrix" - desc = "Book describing the secrets of the veil." + desc = "This book describes the secrets of the veil between worlds." icon = 'icons/obj/eldritch.dmi' icon_state = "codex" item_state = "codex" @@ -74,8 +74,8 @@ last_user = user ui = SStgui.try_update_ui(user, src, ui) if(!ui) - icon_state = "book_open" - flick("book_opening", src) + icon_state = "codex_open" + flick("codex_opening", src) ui = new(user, src, "ForbiddenLore", name) ui.open() @@ -133,13 +133,13 @@ if(initial(EK.name) != ekname) continue if(cultie.gain_knowledge(EK)) - charge -= text2num(params["cost"]) + charge -= initial(EK.cost) return TRUE update_icon() // Not applicable to all objects. /obj/item/forbidden_book/ui_close(mob/user) - flick("book_closing",src) + flick("codex_closing",src) icon_state = initial(icon_state) return ..() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm index ad39e549eb..a390c04a1c 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm @@ -1,6 +1,6 @@ /obj/effect/eldritch name = "Generic rune" - desc = "Weird combination of shapes and symbols etched into the floor itself. The indentation is filled with thick black tar-like fluid." + desc = "A flowing circle of shapes and runes is etched into the floor, filled with a thick black tar-like fluid." anchored = TRUE icon_state = "" resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -14,7 +14,7 @@ I.override = TRUE add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "heretic_rune", I) -/obj/effect/eldritch/attack_hand(mob/living/user) +/obj/effect/eldritch/attack_hand(mob/living/user, list/modifiers) . = ..() if(.) return @@ -81,7 +81,7 @@ continue flick("[icon_state]_active",src) - playsound(user, 'sound/magic/castsummon.ogg', 75, TRUE) + playsound(user, 'sound/magic/castsummon.ogg', 75, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_exponent = 10) //we are doing this since some on_finished_recipe subtract the atoms from selected_atoms making them invisible permanently. var/list/atoms_to_disappear = selected_atoms.Copy() for(var/to_disappear in atoms_to_disappear) @@ -90,31 +90,31 @@ atom_to_disappear.invisibility = INVISIBILITY_ABSTRACT if(current_eldritch_knowledge.on_finished_recipe(user,selected_atoms,loc)) current_eldritch_knowledge.cleanup_atoms(selected_atoms) - is_in_use = FALSE for(var/to_appear in atoms_to_disappear) var/atom/atom_to_appear = to_appear //we need to reappear the item just in case the ritual didnt consume everything... or something. atom_to_appear.invisibility = initial(atom_to_appear.invisibility) + is_in_use = FALSE return is_in_use = FALSE - to_chat(user,"Your ritual failed! You used either wrong components or are missing something important!") + to_chat(user,"Your ritual failed! You either used the wrong components or are missing something important!") /obj/effect/eldritch/big - name = "transmutation circle" + name = "transmutation rune" icon = 'icons/effects/96x96.dmi' icon_state = "eldritch_rune1" pixel_x = -32 //So the big ol' 96x96 sprite shows up right pixel_y = -32 /** - * #Reality smash tracker - * - * Stupid fucking list holder, DONT create new ones, it will break the game, this is automnatically created whenever eldritch cultists are created. - * - * Tracks relevant data, generates relevant data, useful tool - */ + * #Reality smash tracker + * + * Stupid fucking list holder, DONT create new ones, it will break the game, this is automnatically created whenever eldritch cultists are created. + * + * Tracks relevant data, generates relevant data, useful tool + */ /datum/reality_smash_tracker ///list of tracked reality smashes var/list/smashes = list() @@ -127,12 +127,11 @@ QDEL_LIST(smashes) targets.Cut() return ..() - /** - * Automatically fixes the target and smash network - * - * Fixes any bugs that are caused by late Generate() or exchanging clients - */ + * Automatically fixes the target and smash network + * + * Fixes any bugs that are caused by late Generate() or exchanging clients + */ /datum/reality_smash_tracker/proc/ReworkNetwork() listclearnulls(smashes) for(var/mind in targets) @@ -144,52 +143,51 @@ reality_smash.AddMind(mind) /** - * Generates a set amount of reality smashes based on the N value - * - * Automatically creates more reality smashes - */ -/datum/reality_smash_tracker/proc/_Generate() + * Generates a set amount of reality smashes based on the N value + * + * Automatically creates more reality smashes + */ +/datum/reality_smash_tracker/proc/Generate(mob/caller) + if(istype(caller)) + targets += caller var/targ_len = length(targets) var/smash_len = length(smashes) - var/number = targ_len * 6 - smash_len + var/number = max(targ_len * (6-(targ_len-1)) - smash_len,1) for(var/i in 0 to number) - var/turf/chosen_location = get_safe_random_station_turf() + //we also dont want them close to each other, at least 1 tile of seperation var/obj/effect/reality_smash/what_if_i_have_one = locate() in range(1, chosen_location) var/obj/effect/broken_illusion/what_if_i_had_one_but_got_used = locate() in range(1, chosen_location) if(what_if_i_have_one || what_if_i_had_one_but_got_used) //we dont want to spawn continue - var/obj/effect/reality_smash/RS = new/obj/effect/reality_smash(chosen_location) - smashes += RS + new /obj/effect/reality_smash(chosen_location) ReworkNetwork() - /** - * Adds a mind to the list of people that can see the reality smashes - * - * Use this whenever you want to add someone to the list - */ -/datum/reality_smash_tracker/proc/AddMind(var/datum/mind/M) - RegisterSignal(M.current,COMSIG_MOB_CLIENT_LOGIN,.proc/ReworkNetwork) - targets |= M - _Generate() - for(var/X in smashes) - var/obj/effect/reality_smash/reality_smash = X - reality_smash.AddMind(M) + * Adds a mind to the list of people that can see the reality smashes + * + * Use this whenever you want to add someone to the list + */ +/datum/reality_smash_tracker/proc/AddMind(datum/mind/e_cultists) + RegisterSignal(e_cultists.current,COMSIG_MOB_CLIENT_LOGIN,.proc/ReworkNetwork) + targets |= e_cultists + Generate() + for(var/obj/effect/reality_smash/reality_smash in smashes) + reality_smash.AddMind(e_cultists) /** - * Removes a mind from the list of people that can see the reality smashes - * - * Use this whenever you want to remove someone from the list - */ -/datum/reality_smash_tracker/proc/RemoveMind(var/datum/mind/M) - UnregisterSignal(M.current,COMSIG_MOB_CLIENT_LOGIN) - targets -= M - for(var/obj/effect/reality_smash/RS in smashes) - RS.RemoveMind(M) + * Removes a mind from the list of people that can see the reality smashes + * + * Use this whenever you want to remove someone from the list + */ +/datum/reality_smash_tracker/proc/RemoveMind(datum/mind/e_cultists) + UnregisterSignal(e_cultists.current,COMSIG_MOB_CLIENT_LOGIN) + targets -= e_cultists + for(var/obj/effect/reality_smash/reality_smash in smashes) + reality_smash.RemoveMind(e_cultists) /obj/effect/broken_illusion name = "pierced reality" @@ -198,66 +196,67 @@ anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF alpha = 0 - invisibility = INVISIBILITY_OBSERVER /obj/effect/broken_illusion/Initialize() . = ..() - addtimer(CALLBACK(src, .proc/show_presence), 15 SECONDS) - var/image/I = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src) + addtimer(CALLBACK(src,.proc/show_presence),15 SECONDS) + + var/image/I = image('icons/effects/eldritch.dmi',src,null,OBJ_LAYER) I.override = TRUE add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "pierced_reality", I) +///Makes this obj appear out of nothing /obj/effect/broken_illusion/proc/show_presence() - invisibility = 0 - animate(src, alpha = 255, time = 15 SECONDS) + animate(src,alpha = 255,time = 15 SECONDS) -/obj/effect/broken_illusion/attack_hand(mob/living/user) +/obj/effect/broken_illusion/attack_hand(mob/living/user, list/modifiers) if(!ishuman(user)) return ..() var/mob/living/carbon/human/human_user = user if(IS_HERETIC(human_user)) - to_chat(human_user,"You know better than to tempt forces out of your control.") + to_chat(human_user,"You know better than to tempt forces out of your control!") else var/obj/item/bodypart/arm = human_user.get_active_hand() if(prob(25)) - to_chat(human_user,"An otherwordly presence tears your arm apart into atoms as you try to touch the hole in the very fabric of reality!") + to_chat(human_user,"An otherwordly presence tears and atomizes your arm as you try to touch the hole in the very fabric of reality!") arm.dismember() qdel(arm) else - to_chat(human_user,"You pull your hand away from the hole as eldritch energy flails out, trying to latch onto existence itself!") + to_chat(human_user,"You pull your hand away from the hole as the eldritch energy flails trying to latch onto existance itself!") + /obj/effect/broken_illusion/attack_tk(mob/user) if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user if(IS_HERETIC(human_user)) - to_chat(human_user,"You know better than to tempt forces out of your control.") + to_chat(human_user,"You know better than to tempt forces out of your control!") + return + //a very elaborate way to suicide + to_chat(human_user,"Eldritch energy lashes out, piercing your fragile mind, tearing it to pieces!") + human_user.ghostize() + var/obj/item/bodypart/head/head = locate() in human_user.bodyparts + if(head) + head.dismember() + qdel(head) else - //a very elaborate way to suicide - to_chat(human_user,"Eldritch energy lashes out, piercing your fragile mind, tearing it to pieces!") - human_user.ghostize() - var/obj/item/bodypart/head/head = locate() in human_user.bodyparts - if(head) - head.dismember() - qdel(head) - else - human_user.gib() + human_user.gib() + + var/datum/effect_system/reagents_explosion/explosion = new() + explosion.set_up(1, get_turf(human_user), TRUE, 0) + explosion.start() - var/datum/effect_system/reagents_explosion/explosion = new() - explosion.set_up(1, get_turf(human_user), 1, 0) - explosion.start() /obj/effect/broken_illusion/examine(mob/user) . = ..() if(!IS_HERETIC(user) && ishuman(user)) var/mob/living/carbon/human/human_user = user - to_chat(human_user,"Your brain hurts when you look at this!") - human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,20,190) + to_chat(human_user,"Your mind burns as you stare at the tear!") + human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,10,190) SEND_SIGNAL(human_user, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) - log_game("[key_name(user)] stared at a pierced reality at [AREACOORD(user)]") /obj/effect/reality_smash - name = "/improper reality smash" + name = "reality smash" icon = 'icons/effects/eldritch.dmi' anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -271,44 +270,41 @@ /obj/effect/reality_smash/Initialize() . = ..() + GLOB.reality_smash_track.smashes += src img = image(icon, src, image_state, OBJ_LAYER) generate_name() /obj/effect/reality_smash/Destroy() + GLOB.reality_smash_track.smashes -= src on_destroy() return ..() -///Custom effect that happens on destruction /obj/effect/reality_smash/proc/on_destroy() - for(var/cm in minds) - var/datum/mind/cultie = cm - if(cultie.current?.client) - cultie.current.client.images -= img + for(var/e_cultists in minds) + var/datum/mind/e_cultie = e_cultists + if(e_cultie.current?.client) + e_cultie.current.client.images -= img //clear the list - minds -= cultie - GLOB.reality_smash_track.smashes -= src + minds -= e_cultie img = null - new /obj/effect/broken_illusion(drop_location()) + var/obj/effect/broken_illusion/illusion = new /obj/effect/broken_illusion(drop_location()) + illusion.name = pick("Researched","Siphoned","Analyzed","Emptied","Drained") + " " + name ///Makes the mind able to see this effect -/obj/effect/reality_smash/proc/AddMind(var/datum/mind/cultie) - minds |= cultie - if(cultie.current.client) - cultie.current.client.images |= img - - +/obj/effect/reality_smash/proc/AddMind(datum/mind/e_cultie) + minds |= e_cultie + if(e_cultie.current.client) + e_cultie.current.client.images |= img ///Makes the mind not able to see this effect -/obj/effect/reality_smash/proc/RemoveMind(var/datum/mind/cultie) - minds -= cultie - if(cultie.current.client) - cultie.current.client.images -= img - - +/obj/effect/reality_smash/proc/RemoveMind(datum/mind/e_cultie) + minds -= e_cultie + if(e_cultie.current.client) + e_cultie.current.client.images -= img ///Generates random name /obj/effect/reality_smash/proc/generate_name() var/static/list/prefix = list("Omniscient","Thundering","Enlightening","Intrusive","Rejectful","Atomized","Subtle","Rising","Lowering","Fleeting","Towering","Blissful","Arrogant","Threatening","Peaceful","Aggressive") var/static/list/postfix = list("Flaw","Presence","Crack","Heat","Cold","Memory","Reminder","Breeze","Grasp","Sight","Whisper","Flow","Touch","Veil","Thought","Imperfection","Blemish","Blush") - name = pick(prefix) + " " + pick(postfix) + name = "\improper" + pick(prefix) + " " + pick(postfix) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index ea6d1d50e2..1aa97f1321 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -1,6 +1,6 @@ /obj/item/living_heart name = "living heart" - desc = "Link to the worlds beyond." + desc = "A link to the worlds beyond." icon = 'icons/obj/eldritch.dmi' icon_state = "living_heart" w_class = WEIGHT_CLASS_SMALL @@ -35,7 +35,7 @@ if(0 to 15) to_chat(user,"[target.real_name] is near you. They are to the [dir2text(dir)] of you!") if(16 to 31) - to_chat(user,"[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!") + to_chat(user,"[target.real_name] is somewhere in your vicinity. They are to the [dir2text(dir)] of you!") if(32 to 127) to_chat(user,"[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!") else @@ -46,12 +46,11 @@ /datum/action/innate/heretic_shatter name = "Shattering Offer" - desc = "By breaking your blade, you will be granted salvation from a dire situation. (Teleports you to a random safe turf on your current z level, but destroys your blade.)" + desc = "After a brief delay, you will be granted salvation from a dire situation at the cost of your blade. (Teleports you to a random safe turf on your current z level after a windup, but destroys your blade.)" background_icon_state = "bg_ecult" button_icon_state = "shatter" icon_icon = 'icons/mob/actions/actions_ecult.dmi' - check_flags = NONE // required_mobility_flags handles this - required_mobility_flags = MOBILITY_HOLD|MOBILITY_MOVE|MOBILITY_USE + check_flags = MOBILITY_HOLD|MOBILITY_MOVE|MOBILITY_USE var/mob/living/carbon/human/holder var/obj/item/melee/sickly_blade/sword @@ -63,19 +62,19 @@ /datum/action/innate/heretic_shatter/IsAvailable() if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder)) - return ..() + return TRUE else return FALSE /datum/action/innate/heretic_shatter/Activate() - . = ..() - var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE) - do_teleport(holder,safe_turf,forceMove = TRUE) - to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...") - qdel(sword) + if(do_after(holder,10, target = holder)) + var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE) + do_teleport(holder,safe_turf,forceMove = TRUE) + to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...") + qdel(sword) /obj/item/melee/sickly_blade - name = "eldritch blade" + name = "sickly blade" desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..." icon = 'icons/obj/eldritch.dmi' icon_state = "eldritch_blade" @@ -97,12 +96,17 @@ . = ..() linked_action = new(src) -/obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user) - if(!(IS_HERETIC(user) || !IS_HERETIC_MONSTER(user))) - to_chat(user,"You feel a pulse of some alien intellect lash out at your mind!") - var/mob/living/carbon/human/human_user = user - human_user.AdjustParalyzed(5 SECONDS) - return FALSE +/obj/item/melee/sickly_blade/attack(mob/living/target, mob/living/user) + if(!(IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) + to_chat(user,"You feel a pulse of alien intellect lash out at your mind!") + user.DefaultCombatKnockdown(100) + user.dropItemToGround(src, TRUE) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + else + user.adjustBruteLoss(rand(force/2,force)) + return return ..() /obj/item/melee/sickly_blade/pickup(mob/user) @@ -116,20 +120,22 @@ /obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() var/datum/antagonist/heretic/cultie = user.mind.has_antag_datum(/datum/antagonist/heretic) - if(!cultie || !proximity_flag) + if(!cultie) return var/list/knowledge = cultie.get_all_knowledge() for(var/X in knowledge) var/datum/eldritch_knowledge/eldritch_knowledge_datum = knowledge[X] - eldritch_knowledge_datum.on_eldritch_blade(target,user,proximity_flag,click_parameters) + if(proximity_flag) + eldritch_knowledge_datum.on_eldritch_blade(target,user,proximity_flag,click_parameters) + else + eldritch_knowledge_datum.on_ranged_attack_eldritch_blade(target,user,click_parameters) /obj/item/melee/sickly_blade/rust name = "rusted blade" - desc = "This crescent blade is decrepit, wasting to dust. Yet still it bites, catching flesh with jagged, rotten teeth." + desc = "This crescent blade is decrepit, wasting to rust. Yet still it bites, ripping flesh and bone with jagged, rotten teeth." icon_state = "rust_blade" item_state = "rust_blade" embedding = list("pain_mult" = 4, "embed_chance" = 75, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) - throwforce = 17 /obj/item/melee/sickly_blade/ash name = "ashen blade" @@ -140,15 +146,22 @@ /obj/item/melee/sickly_blade/flesh name = "flesh blade" - desc = "A crescent blade born from a fleshwarped creature. Keenly aware, it seeks to spread to others the excruciations it has endured from dead origins." + desc = "A crescent blade born from a fleshwarped creature. Keenly aware, it seeks to spread to others the suffering it has endured from its dreadful origins." icon_state = "flesh_blade" item_state = "flesh_blade" wound_bonus = 10 bare_wound_bonus = 20 +/obj/item/melee/sickly_blade/void + name = "void blade" + desc = "Devoid of any substance, this blade reflects nothingness. It is a real depiction of purity, and chaos that ensues after its implementation." + icon_state = "void_blade" + item_state = "void_blade" + throwforce = 25 + /obj/item/clothing/neck/eldritch_amulet name = "warm eldritch medallion" - desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulse of a thousand others." + desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others." icon = 'icons/obj/eldritch.dmi' icon_state = "eye_medalion" w_class = WEIGHT_CLASS_SMALL @@ -186,7 +199,7 @@ item_state = "eldritch_armor" flags_inv = HIDESHOES|HIDEJUMPSUIT body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS - allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book) + allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart) hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/eldritch // slightly better than normal cult robes armor = list("melee" = 50, "bullet" = 50, "laser" = 50,"energy" = 50, "bomb" = 35, "bio" = 20, "rad" = 0, "fire" = 20, "acid" = 20) @@ -194,7 +207,242 @@ /obj/item/reagent_containers/glass/beaker/eldritch name = "flask of eldritch essence" - desc = "Toxic to the close minded. Healing to those with knowledge of the beyond." + desc = "Toxic to the closed minded, yet refreshing to those with knowledge of the beyond." icon = 'icons/obj/eldritch.dmi' icon_state = "eldrich_flask" list_reagents = list(/datum/reagent/eldritch = 50) + +/obj/item/clothing/head/hooded/cult_hoodie/void + name = "void hood" + icon_state = "void_cloak" + flags_inv = NONE + flags_cover = NONE + desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you lose comprehension of what you are seeing." + item_flags = EXAMINE_SKIP + armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +/obj/item/clothing/suit/hooded/cultrobes/void + name = "void cloak" + desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you loose comprehension of what you are seeing." + icon_state = "void_cloak" + item_state = "void_cloak" + allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart) + hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/void + flags_inv = NONE + // slightly worse than normal cult robes + armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + pocket_storage_component_path = /datum/component/storage/concrete/pockets/void_cloak + +/obj/item/clothing/suit/hooded/cultrobes/void/ToggleHood() + if(!iscarbon(loc)) + return + var/mob/living/carbon/carbon_user = loc + if(IS_HERETIC(carbon_user) || IS_HERETIC_MONSTER(carbon_user)) + . = ..() + //We need to account for the hood shenanigans, and that way we can make sure items always fit, even if one of the slots is used by the fucking hood. + if(suittoggled) + to_chat(carbon_user,"The light shifts around you making the cloak invisible!") + else + to_chat(carbon_user,"The kaleidoscope of colours collapses around you, as the cloak shifts to visibility!") + item_flags = suittoggled ? EXAMINE_SKIP : ~EXAMINE_SKIP + else + to_chat(carbon_user,"You can't force the hood onto your head!") + +/obj/item/clothing/mask/void_mask + name = "abyssal mask" + desc = "Mask created from the suffering of existance, you can look down it's eyes, and notice something gazing back at you." + icon_state = "mad_mask" + item_state = "mad_mask" + w_class = WEIGHT_CLASS_SMALL + flags_cover = MASKCOVERSEYES + resistance_flags = FLAMMABLE + flags_inv = HIDEFACE|HIDEFACIALHAIR + ///Who is wearing this + var/mob/living/carbon/human/local_user + +/obj/item/clothing/mask/void_mask/equipped(mob/user, slot) + . = ..() + if(ishuman(user) && user.mind && slot == SLOT_WEAR_MASK) + local_user = user + START_PROCESSING(SSobj, src) + + if(IS_HERETIC(user) || IS_HERETIC_MONSTER(user)) + return + ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + +/obj/item/clothing/mask/void_mask/dropped(mob/M) + local_user = null + STOP_PROCESSING(SSobj, src) + REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + return ..() + +/obj/item/clothing/mask/void_mask/process(delta_time) + if(!local_user) + return PROCESS_KILL + + if((IS_HERETIC(local_user) || IS_HERETIC_MONSTER(local_user)) && HAS_TRAIT(src,TRAIT_NODROP)) + REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) + + for(var/mob/living/carbon/human/human_in_range in spiral_range(9,local_user)) + if(IS_HERETIC(human_in_range) || IS_HERETIC_MONSTER(human_in_range)) + continue + + SEND_SIGNAL(human_in_range,COMSIG_VOID_MASK_ACT,rand(-2,-20)*delta_time) + + if(DT_PROB(60,delta_time)) + human_in_range.hallucination += 5 + + if(DT_PROB(40,delta_time)) + human_in_range.Jitter(5) + + if(DT_PROB(30,delta_time)) + human_in_range.emote(pick("giggle","laugh")) + human_in_range.adjustStaminaLoss(6) + + if(DT_PROB(25,delta_time)) + human_in_range.Dizzy(5) + +/obj/item/melee/rune_knife + name = "\improper Carving Knife" + desc = "Cold steel, pure, perfect, this knife can carve the floor in many ways, but only few can evoke the dangers that lurk beneath reality." + icon = 'icons/obj/eldritch.dmi' + icon_state = "rune_carver" + flags_1 = CONDUCT_1 + sharpness = SHARP_EDGED + w_class = WEIGHT_CLASS_SMALL + wound_bonus = 20 + force = 10 + throwforce = 20 + embedding = list(embed_chance=75, jostle_chance=2, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=5, rip_time=15) + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "lacerated", "ripped", "diced", "rended") + ///turfs that you cannot draw carvings on + var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava)) + ///A check to see if you are in process of drawing a rune + var/drawing = FALSE + ///A list of current runes + var/list/current_runes = list() + ///Max amount of runes + var/max_rune_amt = 3 + ///Linked action + var/datum/action/innate/rune_shatter/linked_action + +/obj/item/melee/rune_knife/examine(mob/user) + . = ..() + . += "This item can carve 'Alert carving' - nearly invisible rune that when stepped on gives you a prompt about where someone stood on it and who it was, doesn't get destroyed by being stepped on." + . += "This item can carve 'Grasping carving' - when stepped on it causes heavy damage to the legs and stuns for 5 seconds." + . += "This item can carve 'Mad carving' - when stepped on it causes dizzyness, jiterryness, temporary blindness, confusion , stuttering and slurring." + +/obj/item/melee/rune_knife/Initialize() + . = ..() + linked_action = new(src) + +/obj/item/melee/rune_knife/pickup(mob/user) + . = ..() + linked_action.Grant(user, src) + +/obj/item/melee/rune_knife/dropped(mob/user, silent) + . = ..() + linked_action.Remove(user, src) + +/obj/item/melee/rune_knife/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!is_type_in_typecache(target,blacklisted_turfs) && !drawing && proximity_flag) + carve_rune(target,user,proximity_flag,click_parameters) + +///Action of carving runes, gives you the ability to click on floor and choose a rune of your need. +/obj/item/melee/rune_knife/proc/carve_rune(atom/target, mob/user, proximity_flag, click_parameters) + var/obj/structure/trap/eldritch/elder = locate() in range(1,target) + if(elder) + to_chat(user,"You can't draw runes that close to each other!") + return + + for(var/X in current_runes) + var/obj/structure/trap/eldritch/eldritch = X + if(QDELETED(eldritch) || !eldritch) + current_runes -= eldritch + + if(current_runes.len >= max_rune_amt) + to_chat(user,"The blade cannot support more runes!") + return + + var/list/pick_list = list() + for(var/E in subtypesof(/obj/structure/trap/eldritch)) + var/obj/structure/trap/eldritch/eldritch = E + pick_list[initial(eldritch.name)] = eldritch + + drawing = TRUE + + var/type = pick_list[input(user,"Choose the rune","Rune") as null|anything in pick_list ] + if(!type) + drawing = FALSE + return + + + to_chat(user,"You start drawing the rune...") + if(!do_after(user,5 SECONDS,target = target)) + drawing = FALSE + return + + drawing = FALSE + var/obj/structure/trap/eldritch/eldritch = new type(target) + eldritch.set_owner(user) + current_runes += eldritch + +/datum/action/innate/rune_shatter + name = "Rune Break" + desc = "Destroys all runes that were drawn by this blade." + background_icon_state = "bg_ecult" + button_icon_state = "rune_break" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + check_flags = AB_CHECK_CONSCIOUS + ///Reference to the rune knife it is inside of + var/obj/item/melee/rune_knife/sword + +/datum/action/innate/rune_shatter/Grant(mob/user, obj/object) + sword = object + return ..() + +/datum/action/innate/rune_shatter/Activate() + for(var/X in sword.current_runes) + var/obj/structure/trap/eldritch/eldritch = X + if(!QDELETED(eldritch) && eldritch) + qdel(eldritch) + +/obj/item/eldritch_potion + name = "Brew of Day and Night" + desc = "You should never see this" + icon = 'icons/obj/eldritch.dmi' + ///Typepath to the status effect this is supposed to hold + var/status_effect + +/obj/item/eldritch_potion/attack_self(mob/user) + . = ..() + to_chat(user,"You drink the potion and with the viscous liquid, the glass dematerializes.") + effect(user) + qdel(src) + +///The effect of the potion if it has any special one, in general try not to override this and utilize the status_effect var to make custom effects. +/obj/item/eldritch_potion/proc/effect(mob/user) + if(!iscarbon(user)) + return + var/mob/living/carbon/carbie = user + carbie.apply_status_effect(status_effect) + +/obj/item/eldritch_potion/crucible_soul + name = "Brew of Crucible Soul" + desc = "Allows you to phase through walls for 15 seconds, after the time runs out, you get teleported to your original location." + icon_state = "crucible_soul" + status_effect = /datum/status_effect/crucible_soul + +/obj/item/eldritch_potion/duskndawn + name = "Brew of Dusk and Dawn" + desc = "Allows you to see clearly through walls and objects for 60 seconds." + icon_state = "clarity" + status_effect = /datum/status_effect/duskndawn + +/obj/item/eldritch_potion/wounded + name = "Brew of Wounded Soldier" + desc = "For the next 60 seconds each wound will heal you, minor wounds heal 1 of it's damage type per second, moderate heal 3 and critical heal 6. You also become immune to damage slowdon." + icon_state = "marshal" + status_effect = /datum/status_effect/marshal diff --git a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm index 481ac08ea5..d2132be4bc 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm @@ -65,6 +65,14 @@ /datum/eldritch_knowledge/proc/recipe_snowflake_check(list/atoms,loc) return TRUE +/** + * A proc that handles the code when the mob dies + * + * This proc is primarily used to end any soundloops when the heretic dies + */ +/datum/eldritch_knowledge/proc/on_death(mob/user) + return + /** * What happens once the recipe is succesfully finished * @@ -100,7 +108,6 @@ /datum/eldritch_knowledge/proc/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) return FALSE - /** * Sickly blade act * @@ -109,6 +116,14 @@ /datum/eldritch_knowledge/proc/on_eldritch_blade(target,user,proximity_flag,click_parameters) return +/** + * Sickly blade distant act + * + * Same as [/datum/eldritch_knowledge/proc/on_eldritch_blade] but works on targets that are not in proximity to you. + */ +/datum/eldritch_knowledge/proc/on_ranged_attack_eldritch_blade(atom/target,mob/user,click_parameters) + return + ////////////// ///Subtypes/// ////////////// @@ -150,7 +165,7 @@ compiled_list[human_to_check.real_name] = human_to_check if(compiled_list.len == 0) - to_chat(user, "The items don't posses required fingerprints.") + to_chat(user, "These items don't possess the required fingerprints or DNA.") return FALSE var/chosen_mob = input("Select the person you wish to curse","Your target") as null|anything in sortList(compiled_list, /proc/cmp_mob_realname_dsc) @@ -222,9 +237,9 @@ /datum/eldritch_knowledge/spell/basic name = "Break of Dawn" - desc = "Starts your journey in the mansus. Allows you to select a target using a living heart on a transmutation rune." - gain_text = "Gates of Mansus open up to your mind." - next_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/spell/silence) + desc = "Starts your journey in the Mansus. Allows you to select a target using a living heart on a transmutation rune." + gain_text = "Another day at a meaningless job. You feel a shimmer around you, as a realization of something strange in your backpack unfolds. You look at it, unknowingly opening a new chapter in your life." + next_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/base_void) cost = 0 spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/mansus_grasp required_atoms = list(/obj/item/living_heart) @@ -279,7 +294,7 @@ var/datum/mind/targeted = A.find_target(blacklist = target_blacklist)//easy way, i dont feel like copy pasting that entire block of code if(!targeted) break - targets[targeted.current.real_name] = targeted.current + targets["[targeted.current.real_name] the [targeted.assigned_role]"] = targeted.current LH.target = targets[input(user,"Choose your next target","Target") in targets] if(!LH.target && targets.len) @@ -301,7 +316,6 @@ var/datum/antagonist/heretic/EC = carbon_user.mind.has_antag_datum(/datum/antagonist/heretic) LH.sac_targetter = EC EC.sac_targetted.Add(LH.target.real_name) - else to_chat(user,"target could not be found for living heart.") @@ -311,30 +325,22 @@ /datum/eldritch_knowledge/living_heart name = "Living Heart" desc = "Allows you to create additional living hearts, using a heart, a pool of blood and a poppy. Living hearts when used on a transmutation rune will grant you a person to hunt and sacrifice on the rune. Every sacrifice gives you an additional charge in the book." - gain_text = "Disconnected, yet it still beats." + gain_text = "The Gates of Mansus open up to your mind." cost = 0 required_atoms = list(/obj/item/organ/heart,/obj/effect/decal/cleanable/blood,/obj/item/reagent_containers/food/snacks/grown/poppy) + next_knowledge = list(/datum/eldritch_knowledge/spell/silence) result_atoms = list(/obj/item/living_heart) route = "Start" /datum/eldritch_knowledge/codex_cicatrix name = "Codex Cicatrix" desc = "Allows you to create a spare Codex Cicatrix if you have lost one, using a bible, human skin, a pen and a pair of eyes." - gain_text = "Their hands are at your throat, yet you see them not." + gain_text = "Their hand is at your throat, yet you see Them not." cost = 0 required_atoms = list(/obj/item/organ/eyes,/obj/item/stack/sheet/animalhide/human,/obj/item/storage/book/bible,/obj/item/pen) result_atoms = list(/obj/item/forbidden_book) route = "Start" -/datum/eldritch_knowledge/eldritch_blade - name = "Eldritch Blade" - desc = "Allows you to create a sickly, eldritch blade by transmuting a glass shard and a metal rod atop a transmutation rune." - gain_text = "The first step starts with sacrifice." - cost = 0 - required_atoms = list(/obj/item/shard,/obj/item/stack/rods) - result_atoms = list(/obj/item/melee/sickly_blade) - route = "Start" - /datum/eldritch_knowledge/spell/silence name = "Silence" desc = "Allows you to use the power of the Mansus to force an individual's tongue to be held down for up to twenty seconds. They'll notice quickly, however." diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index bb95a8bdf3..4aeb2e1b73 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -1,6 +1,6 @@ /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash name = "Ashen Passage" - desc = "Low range spell allowing you to pass through a few walls." + desc = "A short range spell allowing you to pass unimpeded through a few walls." school = "transmutation" invocation = "DULK'ES PRE'ZIMAS" invocation_type = "whisper" @@ -31,7 +31,7 @@ /obj/effect/proc_holder/spell/targeted/touch/mansus_grasp name = "Mansus Grasp" - desc = "Touch spell that allows you to channel the power of the Old Gods through you." + desc = "A touch spell that lets you channel the power of the Old Gods through your grip." hand_path = /obj/item/melee/touch_attack/mansus_fist school = "evocation" charge_max = 100 @@ -42,7 +42,7 @@ /obj/item/melee/touch_attack/mansus_fist name = "Mansus Grasp" - desc = "A sinister looking aura that distorts the flow of reality around it. Causes knockdown, major stamina damage aswell as some Brute. It gains additional beneficial effects with certain knowledges you can research." + desc = "A sinister looking aura that distorts the flow of reality around it. Causes knockdown and major stamina damage in addition to some brute. It gains additional beneficial effects as you expand your knowledge of the Mansus." icon = 'icons/obj/eldritch.dmi' icon_state = "mansus_grasp" item_state = "mansus" @@ -50,13 +50,13 @@ /obj/item/melee/touch_attack/mansus_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(!proximity_flag || target == user) + if(!proximity_flag | target == user) return playsound(user, 'sound/items/welder.ogg', 75, TRUE) if(ishuman(target)) var/mob/living/carbon/human/tar = target if(tar.anti_magic_check()) - tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + tar.visible_message("The spell bounces off of [target]!","The spell bounces off of you!") return ..() var/datum/mind/M = user.mind var/datum/antagonist/heretic/cultie = M.has_antag_datum(/datum/antagonist/heretic) @@ -79,7 +79,7 @@ /obj/effect/proc_holder/spell/aoe_turf/rust_conversion name = "Aggressive Spread" - desc = "Spreads rust onto nearby turfs." + desc = "Spreads rust onto nearby surfaces." school = "transmutation" charge_max = 300 //twice as long as mansus grasp clothes_req = FALSE @@ -101,7 +101,7 @@ /obj/effect/proc_holder/spell/aoe_turf/rust_conversion/small name = "Rust Conversion" - desc = "Spreads rust onto nearby turfs." + desc = "Spreads rust onto nearby surfaces." range = 2 /obj/effect/proc_holder/spell/pointed/blood_siphon @@ -162,7 +162,7 @@ /obj/effect/proc_holder/spell/aimed/rust_wave name = "Patron's Reach" - desc = "Channels energy into your gauntlet - firing it results in a wave of rust being created in it's wake." + desc = "Channels energy into your gauntlet- unleashing it creates a wave of rust in its wake." projectile_type = /obj/item/projectile/magic/spell/rust_wave charge_max = 350 clothes_req = FALSE @@ -213,7 +213,7 @@ /obj/effect/proc_holder/spell/pointed/cleave name = "Cleave" - desc = "Causes severe bleeding on a target and people around them" + desc = "Causes severe bleeding on a target and several targets around them." school = "transmutation" charge_max = 350 clothes_req = FALSE @@ -250,7 +250,8 @@ var/obj/item/bodypart/bodypart = pick(target.bodyparts) var/datum/wound/slash/critical/crit_wound = new crit_wound.apply_wound(bodypart) - target.adjustFireLoss(20) + crit_wound.apply_wound(bodypart) + target.adjustBruteLoss(20) new /obj/effect/temp_visual/cleave(target.drop_location()) /obj/effect/proc_holder/spell/pointed/cleave/can_target(atom/target, mob/user, silent) @@ -292,7 +293,7 @@ if(ishuman(target)) var/mob/living/carbon/human/tar = target if(tar.anti_magic_check()) - tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + tar.visible_message("The spell bounces off of [target]!","The spell bounces off of you!") return ..() if(iscarbon(target)) @@ -331,7 +332,7 @@ if(ishuman(target)) var/mob/living/carbon/human/tar = target if(tar.anti_magic_check()) - tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + tar.visible_message("The spell bounces off of [target]!","The spell bounces off of you!") return ..() if(iscarbon(target)) @@ -343,7 +344,7 @@ /obj/effect/proc_holder/spell/pointed/nightwatchers_rite name = "Nightwatcher's Rite" - desc = "Powerful spell that releases 5 streams of fire away from you." + desc = "A powerful spell that releases 5 streams of fire away from you." school = "transmutation" invocation = "IGNIS'INTI" invocation_type = "whisper" @@ -390,13 +391,13 @@ for(var/mob/living/L in T.contents) if(L.anti_magic_check()) - L.visible_message("Spell bounces off of [L]!","The spell bounces off of you!") + L.visible_message("The spell bounces off of [L]!","The spell bounces off of you!") continue if(L in hit_list || L == source) continue hit_list += L L.adjustFireLoss(15) - to_chat(L, "You're hit by a blast of fire!") + to_chat(L, "You're hit by [source]'s eldritch flames!") new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) @@ -433,7 +434,7 @@ /obj/effect/proc_holder/spell/aoe_turf/fire_cascade name = "Fire Cascade" - desc = "creates hot turfs around you." + desc = "Heats the air around you." school = "transmutation" charge_max = 300 //twice as long as mansus grasp clothes_req = FALSE @@ -470,7 +471,7 @@ /obj/effect/proc_holder/spell/targeted/fire_sworn name = "Oath of Fire" - desc = "For a minute you will passively create a ring of fire around you." + desc = "For a minute, you will passively create a ring of fire around you." invocation = "IGNIS'AISTRA'LISTRE" invocation_type = "whisper" clothes_req = FALSE @@ -509,7 +510,7 @@ /obj/effect/proc_holder/spell/targeted/worm_contract name = "Force Contract" - desc = "Forces all the worm parts to collapse onto a single turf" + desc = "Forces your body to contract onto a single tile." invocation_type = "none" clothes_req = FALSE action_background_icon_state = "bg_ecult" @@ -539,7 +540,7 @@ /obj/effect/proc_holder/spell/targeted/fiery_rebirth name = "Nightwatcher's Rebirth" - desc = "Drains nearby alive people that are engulfed in flames. It heals 10 of each damage type per person. If a person is in critical condition it finishes them off." + desc = "Drains nearby alive people that are engulfed in flames. It heals 10 of each damage type per person. If a target is in critical condition it drains the last of their vitality, killing them." invocation = "PETHRO'MINO'IGNI" invocation_type = "whisper" clothes_req = FALSE @@ -571,7 +572,7 @@ /obj/effect/proc_holder/spell/pointed/manse_link name = "Mansus Link" - desc = "Piercing through reality, connecting minds. This spell allows you to add people to a mansus net, allowing them to communicate with eachother" + desc = "Piercing through reality, connecting minds. This spell allows you to add people to a Mansus Net, allowing them to communicate with each other from afar." school = "transmutation" charge_max = 300 clothes_req = FALSE @@ -605,7 +606,7 @@ /datum/action/innate/mansus_speech name = "Mansus Link" - desc = "Send a psychic message to everyone connected to your mansus link." + desc = "Send a psychic message to everyone connected to your Mansus Net." button_icon_state = "link_speech" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_ecult" @@ -747,3 +748,219 @@ return 3 else return 2 + +/obj/effect/proc_holder/spell/targeted/shed_human_form + name = "Shed form" + desc = "Shed your fragile form, become one with the arms, become one with the emperor." + invocation_type = "shout" + invocation = "REALITY UNCOIL!" + clothes_req = FALSE + action_background_icon_state = "bg_ecult" + range = -1 + include_user = TRUE + charge_max = 100 + action_icon = 'icons/mob/actions/actions_ecult.dmi' + action_icon_state = "worm_ascend" + var/segment_length = 10 + +/obj/effect/proc_holder/spell/targeted/shed_human_form/cast(list/targets, mob/user) + . = ..() + var/mob/living/target = user + var/mob/living/mob_inside = locate() in target.contents - target + + if(!mob_inside) + var/mob/living/simple_animal/hostile/eldritch/armsy/prime/outside = new(user.loc,TRUE,segment_length) + target.mind.transfer_to(outside, TRUE) + target.forceMove(outside) + target.apply_status_effect(STATUS_EFFECT_STASIS,STASIS_ASCENSION_EFFECT) + for(var/mob/living/carbon/human/humie in view(9,outside)-target) + if(IS_HERETIC(humie) || IS_HERETIC_MONSTER(humie)) + continue + SEND_SIGNAL(humie, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) + ///They see the very reality uncoil before their eyes. + if(prob(25)) + var/trauma = pick(subtypesof(BRAIN_TRAUMA_MILD) + subtypesof(BRAIN_TRAUMA_SEVERE)) + humie.gain_trauma(new trauma(), TRAUMA_RESILIENCE_LOBOTOMY) + return + + if(iscarbon(mob_inside)) + var/mob/living/simple_animal/hostile/eldritch/armsy/prime/armsy = target + if(mob_inside.remove_status_effect(STATUS_EFFECT_STASIS,STASIS_ASCENSION_EFFECT)) + mob_inside.forceMove(armsy.loc) + armsy.mind.transfer_to(mob_inside, TRUE) + segment_length = armsy.get_length() + qdel(armsy) + return + +/obj/effect/proc_holder/spell/pointed/void_blink + name = "Void Phase" + desc = "Let's you blink to your pointed destination, causes 3x3 aoe damage bubble around your pointed destination and your current location. It has a minimum range of 3 tiles and a maximum range of 9 tiles." + invocation_type = "whisper" + invocation = "PAS'VEIK" + clothes_req = FALSE + range = 9 + action_background_icon_state = "bg_ecult" + charge_max = 300 + action_icon = 'icons/mob/actions/actions_ecult.dmi' + action_icon_state = "voidblink" + selection_type = "range" + +/obj/effect/proc_holder/spell/pointed/void_blink/can_target(atom/target, mob/user, silent) + . = ..() + if(get_dist(get_turf(user),get_turf(target)) < 3 ) + return FALSE + +/obj/effect/proc_holder/spell/pointed/void_blink/cast(list/targets, mob/user) + . = ..() + var/target = targets[1] + var/turf/targeted_turf = get_turf(target) + + playsound(user,'sound/magic/voidblink.ogg',100) + playsound(targeted_turf,'sound/magic/voidblink.ogg',100) + + new /obj/effect/temp_visual/voidin(user.drop_location()) + new /obj/effect/temp_visual/voidout(targeted_turf) + + for(var/mob/living/living_mob in range(1,user)-user) + if(IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob)) + continue + living_mob.adjustBruteLoss(40) + + for(var/mob/living/living_mob in range(1,targeted_turf)-user) + if(IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob)) + continue + living_mob.adjustBruteLoss(40) + + do_teleport(user,targeted_turf,0,TRUE,no_effects = TRUE,channel=TELEPORT_CHANNEL_MAGIC) + +/obj/effect/temp_visual/voidin + icon = 'icons/effects/96x96.dmi' + icon_state = "void_blink_in" + alpha = 150 + duration = 6 + pixel_x = -32 + pixel_y = -32 + +/obj/effect/temp_visual/voidout + icon = 'icons/effects/96x96.dmi' + icon_state = "void_blink_out" + alpha = 150 + duration = 6 + pixel_x = -32 + pixel_y = -32 + +/obj/effect/proc_holder/spell/targeted/void_pull + name = "Void Pull" + desc = "Call the void, this pulls all nearby people closer to you, damages people already around you. If they are 4 tiles or closer they are also knocked down and a micro-stun is applied." + invocation_type = "whisper" + invocation = "VISA'GALIS TRAUK'IMAS" + clothes_req = FALSE + action_background_icon_state = "bg_ecult" + range = -1 + include_user = TRUE + charge_max = 400 + action_icon = 'icons/mob/actions/actions_ecult.dmi' + action_icon_state = "voidpull" + +/obj/effect/proc_holder/spell/targeted/void_pull/cast(list/targets, mob/user) + . = ..() + for(var/mob/living/living_mob in range(1,user)-user) + if(IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob)) + continue + living_mob.adjustBruteLoss(30) + + playsound(user,'sound/magic/voidpull.ogg',75) + new /obj/effect/temp_visual/voidin(user.drop_location()) + for(var/mob/living/livies in view(7,user)-user) + + if(get_dist(user,livies) < 4) + livies.AdjustKnockdown(3 SECONDS) + livies.AdjustParalyzed(0.5 SECONDS) + + for(var/i in 1 to 3) + livies.forceMove(get_step_towards(livies,user)) + + +/obj/effect/proc_holder/spell/pointed/boogie_woogie + name = "Void's Applause" + desc = "Swap positions with someone at the clap of your hands." + school = "transmutation" + charge_max = 100 + clothes_req = FALSE + invocation = "BOOGIE WOOGIE" + invocation_type = "none" + range = 10 + message = "The world around you suddenly shifts!" + action_icon = 'icons/mob/actions/actions_ecult.dmi' + action_icon_state = "mansus_link" + action_background_icon_state = "bg_ecult" + +/obj/effect/proc_holder/spell/pointed/boogie_woogie/cast(list/targets, mob/user) + . = ..() + var/target = targets[1] + user.emote("clap1") + playsound(user, 'sound/magic/voidblink.ogg', 75, TRUE) + var/turf/targeted_turf = get_turf(target) + var/turf/user_turf = get_turf(user) + + new /obj/effect/temp_visual/voidswap(user.drop_location()) + new /obj/effect/temp_visual/voidswap(targeted_turf) + + if(isliving(target) || iscontainer(target)) + do_teleport(user,targeted_turf,0,TRUE,no_effects = TRUE,channel=TELEPORT_CHANNEL_MAGIC) + do_teleport(target,user_turf,0,TRUE,no_effects = TRUE,channel=TELEPORT_CHANNEL_MAGIC) + + +/obj/effect/proc_holder/spell/pointed/boogie_woogie/can_target(atom/target, mob/user, silent) + . = ..() + if(!.) + return FALSE + if(!isliving(target) && !iscontainer(target)) + if(!silent) + to_chat(user, "You are unable to swap with the [target]!") + return FALSE + return TRUE + +/obj/effect/proc_holder/spell/aoe_turf/repulse/eldritch //placeholder spell + name = "Void's Push" + desc = "With the snap of your fingers, send your enemies away." + charge_max = 400 + clothes_req = FALSE + invocation = "ISN'YKTI" + invocation_type = "shout" + range = 3 + selection_type = "view" + sound = 'sound/magic/voidblink.ogg' + action_background_icon_state = "bg_ecult" + sparkle_path = /obj/effect/temp_visual/voidpush + +/obj/effect/proc_holder/spell/aoe_turf/repulse/eldritch/cast(list/targets,mob/user = usr) + user.emote("snap") + ..(targets, user, 60) + +/obj/effect/proc_holder/spell/aoe_turf/domain_expansion + name = "Infinite Void" + desc = "Create a domain that will slow down and mark all opponents with a void mark." + charge_max = 1200 + clothes_req = FALSE + invocation = "RYO'IKI TEN'KAI" + invocation_type = "none" + range = 0 + action_icon_state = "time" + action_background_icon_state = "bg_ecult" + var/timestop_range = 7 + var/timestop_duration = 200 + var/static/mutable_appearance/halo + var/sound/Snd // shamelessly ripped from lightning. + +/obj/effect/proc_holder/spell/aoe_turf/domain_expansion/cast(list/targets, mob/user = usr) + Snd = new/sound('sound/magic/clockwork/ratvar_attack.ogg',channel = 7) + halo = halo || mutable_appearance('icons/effects/effects.dmi', "at_shield2", EFFECTS_LAYER) + user.add_overlay(halo) + playsound(get_turf(user), Snd, 50, 0) + if(do_mob(user,user,50,1)) + user.cut_overlay(halo) + user.emote("clap1") + user.say("DOM'ENO ISPLETIMAS") + playsound(user, 'sound/magic/domain.ogg', 125, TRUE) + new /obj/effect/domain_expansion(get_turf(user), timestop_range, timestop_duration, list(user)) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm index 529128fc0a..224e964406 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm @@ -7,6 +7,7 @@ job_rank = ROLE_HERETIC antag_hud_type = ANTAG_HUD_HERETIC antag_hud_name = "heretic_beast" + show_in_antagpanel = FALSE var/datum/antagonist/master /datum/antagonist/heretic_monster/admin_add(datum/mind/new_owner,mob/admin) @@ -29,6 +30,7 @@ var/datum/objective/master_obj = new master_obj.owner = src master_obj.explanation_text = "Assist your master in any way you can!" + master_obj.completed = TRUE objectives += master_obj owner.announce_objectives() to_chat(owner, "Your master is [master.owner.current.real_name]") diff --git a/code/modules/antagonists/eldritch_cult/eldritch_structures.dm b/code/modules/antagonists/eldritch_cult/eldritch_structures.dm new file mode 100644 index 0000000000..01fd945cba --- /dev/null +++ b/code/modules/antagonists/eldritch_cult/eldritch_structures.dm @@ -0,0 +1,178 @@ +/obj/structure/eldritch_crucible + name = "Mawed Crucible" + desc = "Immortalized cast iron, the steel-like teeth holding it in place, it's vile extract has the power of rebirthing things, remaking them from the very beginning." + icon = 'icons/obj/eldritch.dmi' + icon_state = "crucible" + anchored = FALSE + density = TRUE + ///How much mass this currently holds + var/current_mass = 5 + ///Maximum amount of mass + var/max_mass = 5 + ///Check to see if it is currently being used. + var/in_use = FALSE + +/obj/structure/eldritch_crucible/examine(mob/user) + . = ..() + if(!IS_HERETIC(user) && !IS_HERETIC_MONSTER(user)) + return + if(current_mass < max_mass) + . += "The Crucible requires [max_mass - current_mass] more organs or bodyparts!" + else + . += "The Crucible is ready to be used!" + + . += "You can anchor and reanchor it using Codex Cicatrix!" + . += "It is currently [anchored == FALSE ? "unanchored" : "anchored"]" + . += "This structure can brew 'Brew of Crucible soul' - when used it gives you the ability to phase through matter for 15 seconds, after the time elapses it teleports you back to your original location" + . += "This structure can brew 'Brew of Dusk and Dawn' - when used it gives you xray for 1 minute" + . += "This structure can brew 'Brew of Wounded Soldier' - when used it makes you immune to damage slowdown, additionally you start healing for every wound you have, quickly outpacing the damage caused by them." + +/obj/structure/eldritch_crucible/attacked_by(obj/item/I, mob/living/user) + if(istype(I,/obj/item/nullrod)) + qdel(src) + return + + if(!IS_HERETIC(user) && !IS_HERETIC_MONSTER(user)) + if(iscarbon(user)) + devour(user) + return + + if(istype(I,/obj/item/forbidden_book)) + playsound(src, 'sound/misc/desceration-02.ogg', 75, TRUE) + anchored = !anchored + to_chat(user,"You [anchored == FALSE ? "unanchor" : "anchor"] the crucible") + return + + if(istype(I,/obj/item/bodypart) || istype(I,/obj/item/organ)) + //Both organs and bodyparts hold information if they are organic or robotic in the exact same way. + var/obj/item/bodypart/forced = I + if(forced.status != BODYPART_ORGANIC) + return + + if(current_mass >= max_mass) + to_chat(user," Crucible is already full!") + return + playsound(src, 'sound/items/eatfood.ogg', 100, TRUE) + to_chat(user,"Crucible devours [I.name] and fills itself with a little bit of liquid!") + current_mass++ + qdel(I) + update_icon_state() + return + + return ..() + +/obj/structure/eldritch_crucible/attack_hand(mob/user) + if(!IS_HERETIC(user) && !IS_HERETIC_MONSTER(user)) + if(iscarbon(user)) + devour(user) + return + + if(in_use) + to_chat(user,"Crucible is already in use!") + return + + if(current_mass < max_mass) + to_chat(user,"Crucible isn't full! Bring it more organs or bodyparts!") + return + + in_use = TRUE + var/list/lst = list() + for(var/X in subtypesof(/obj/item/eldritch_potion)) + var/obj/item/eldritch_potion/potion = X + lst[initial(potion.name)] = potion + var/type = lst[input(user,"Choose your brew","Brew") in lst] + playsound(src, 'sound/misc/desceration-02.ogg', 75, TRUE) + new type(drop_location()) + current_mass = 0 + in_use = FALSE + update_icon_state() + +///Proc that eats the active limb of the victim +/obj/structure/eldritch_crucible/proc/devour(mob/living/carbon/user) + if(HAS_TRAIT(user,TRAIT_NODISMEMBER)) + return + playsound(src, 'sound/items/eatfood.ogg', 100, TRUE) + to_chat(user,"Crucible grabs your arm and devours it whole!") + var/obj/item/bodypart/arm = user.get_active_hand() + arm.dismember() + qdel(arm) + current_mass += current_mass < max_mass ? 1 : 0 + update_icon_state() + +/obj/structure/eldritch_crucible/update_icon_state() + . = ..() + if(current_mass == max_mass) + icon_state = "crucible" + else + icon_state = "crucible_empty" + +/obj/structure/trap/eldritch + name = "elder carving" + desc = "Collection of unknown symbols, they remind you of days long gone..." + icon = 'icons/obj/eldritch.dmi' + charges = 1 + ///Owner of the trap + var/mob/owner + +/obj/structure/trap/eldritch/Crossed(atom/movable/AM) + if(!isliving(AM)) + return ..() + var/mob/living/living_mob = AM + if((owner && living_mob == owner) || IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob)) + return + return ..() + +/obj/structure/trap/eldritch/attacked_by(obj/item/I, mob/living/user) + . = ..() + if(istype(I,/obj/item/melee/rune_knife) || istype(I,/obj/item/nullrod)) + qdel(src) + +///Proc that sets the owner +/obj/structure/trap/eldritch/proc/set_owner(mob/_owner) + owner = _owner + +/obj/structure/trap/eldritch/alert + name = "alert carving" + icon_state = "alert_rune" + alpha = 10 + +/obj/structure/trap/eldritch/alert/trap_effect(mob/living/L) + if(owner) + to_chat(owner,"[L.real_name] has stepped foot on the alert rune in [get_area(src)]!") + return ..() + +//this trap can only get destroyed by rune carving knife or nullrod +/obj/structure/trap/eldritch/alert/flare() + return + +/obj/structure/trap/eldritch/tentacle + name = "grasping carving" + icon_state = "tentacle_rune" + +/obj/structure/trap/eldritch/tentacle/trap_effect(mob/living/L) + if(!iscarbon(L)) + return + var/mob/living/carbon/carbon_victim = L + carbon_victim.DefaultCombatKnockdown(50) + carbon_victim.drop_all_held_items() + carbon_victim.apply_damage(20,BRUTE,BODY_ZONE_R_LEG) + carbon_victim.apply_damage(20,BRUTE,BODY_ZONE_L_LEG) + playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE) + return ..() + +/obj/structure/trap/eldritch/mad + name = "mad carving" + icon_state = "madness_rune" + +/obj/structure/trap/eldritch/mad/trap_effect(mob/living/L) + if(!iscarbon(L)) + return + var/mob/living/carbon/carbon_victim = L + carbon_victim.adjustStaminaLoss(60) + carbon_victim.silent += 10 + carbon_victim.confused += 5 + carbon_victim.Jitter(10) + carbon_victim.Dizzy(20) + carbon_victim.blind_eyes(2) + SEND_SIGNAL(carbon_victim, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) + return ..() diff --git a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm index 48b2a6b225..0256382723 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm @@ -1,18 +1,18 @@ /datum/eldritch_knowledge/base_ash name = "Nightwatcher's Secret" - desc = "Inducts you into the Path of Ash. Allows you to transmute a match with an eldritch blade into an ashen blade." - gain_text = "The City guard knows their watch. If you ask them at night they may tell you about the ashy lantern." - banned_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/final/flesh_final) + desc = "Inducts you into the Path of Ash. Allows you to transmute a match with a spear into an ashen blade." + gain_text = "The City Guard know their watch. If you ask them at night, they may tell you about the ashy lantern." + banned_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/final/flesh_final,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void) next_knowledge = list(/datum/eldritch_knowledge/ashen_grasp) - required_atoms = list(/obj/item/melee/sickly_blade,/obj/item/match) + required_atoms = list(/obj/item/spear,/obj/item/match) result_atoms = list(/obj/item/melee/sickly_blade/ash) - cost = 1 + cost = 0 route = PATH_ASH /datum/eldritch_knowledge/spell/ashen_shift name = "Ashen Shift" - gain_text = "Ash is all the same, how can one man master it all?" - desc = "A short range jaunt that will enable you to escape from danger." + gain_text = "The Nightwatcher was the first of them, his treason started it all." + desc = "A short range jaunt that can help you escape from bad situations." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash next_knowledge = list(/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/essence,/datum/eldritch_knowledge/ashen_eyes) @@ -20,7 +20,7 @@ /datum/eldritch_knowledge/ashen_grasp name = "Grasp of Ash" - gain_text = "Gates have opened, minds have flooded, yet I remain." + gain_text = "He knew how to walk between the planes." desc = "Empowers your mansus grasp to knock enemies down and throw them away." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/spell/ashen_shift) @@ -32,7 +32,7 @@ return var/mob/living/carbon/C = target - var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh) + var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh) || C.has_status_effect(/datum/status_effect/eldritch/void) if(E) . = TRUE E.on_effect() @@ -49,7 +49,7 @@ /datum/eldritch_knowledge/ashen_eyes name = "Ashen Eyes" - gain_text = "Piercing eyes may guide me through the mundane." + gain_text = "Piercing eyes, guide me through the mundane." desc = "Allows you to craft thermal vision amulet by transmutating eyes with a glass shard." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/spell/ashen_shift,/datum/eldritch_knowledge/flesh_ghoul) @@ -58,11 +58,11 @@ /datum/eldritch_knowledge/ash_mark name = "Mark of Ash" - gain_text = "Spread the famine." - desc = "Your sickly blade now applies ash mark on hit. Use your mansus grasp to proc the mark. Mark of Ash causes stamina damage, and fire loss, and spreads to a nearby carbon. Damage decreases with how many times the mark has spread." + gain_text = "The Nightwatcher was a very particular man, always watching in the dead of night. But in spite of his duty, he regularly tranced through the manse with his blazing lantern held high." + desc = "Your Mansus Grasp now applies the Mark of Ash on hit. Attack the afflicted with your Sickly Blade to detonate the mark. Upon detonation, the Mark of Ash causes stamina damage and burn damage, and spreads to an additional nearby opponent. The damage decreases with each spread." cost = 2 - next_knowledge = list(/datum/eldritch_knowledge/curse/blindness) - banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark) + next_knowledge = list(/datum/eldritch_knowledge/mad_mask) + banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/void_mark) route = PATH_ASH /datum/eldritch_knowledge/ash_mark/on_eldritch_blade(target,user,proximity_flag,click_parameters) @@ -71,28 +71,20 @@ var/mob/living/living_target = target living_target.apply_status_effect(/datum/status_effect/eldritch/ash,5) -/datum/eldritch_knowledge/curse/blindness - name = "Curse of Blindness" - gain_text = "The blind man walks through the world, unnoticed by the masses." - desc = "Curse someone with 2 minutes of complete blindness by sacrificing a pair of eyes, a screwdriver and a pool of blood, with an object that the victim has touched with their bare hands." +/datum/eldritch_knowledge/mad_mask + name = "Mask of Madness" + gain_text = "He walks the world, unnoticed by the masses." + desc = "Allows you to transmute any mask, with a candle and a pair of eyes, to create a mask of madness, It causes passive stamina damage to everyone around the wearer and hallucinations, can be forced on a non believer to make him unable to take it off..." cost = 1 - required_atoms = list(/obj/item/organ/eyes,/obj/item/screwdriver,/obj/effect/decal/cleanable/blood) + result_atoms = list(/obj/item/clothing/mask/void_mask) + required_atoms = list(/obj/item/organ/eyes,/obj/item/clothing/mask,/obj/item/candle) next_knowledge = list(/datum/eldritch_knowledge/curse/corrosion,/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/curse/paralysis) - timer = 2 MINUTES route = PATH_ASH -/datum/eldritch_knowledge/curse/blindness/curse(mob/living/chosen_mob) - . = ..() - chosen_mob.become_blind(MAGIC_TRAIT) - -/datum/eldritch_knowledge/curse/blindness/uncurse(mob/living/chosen_mob) - . = ..() - chosen_mob.cure_blind(MAGIC_TRAIT) - /datum/eldritch_knowledge/spell/flame_birth name = "Fiery Rebirth" - gain_text = "Nightwatcher was a man of principles, and yet he arose from the chaos he vowed to protect from." - desc = "Drains nearby alive people that are engulfed in flames. It heals 10 of each damage type per person. If a person is in critical condition it finishes them off." + gain_text = "The Nightwatcher was a man of principles, and yet his power arose from the chaos he vowed to combat." + desc = "Drains nearby alive people that are engulfed in flames. It heals 10 of each damage type per person. If a target is in critical condition it drains the last of their vitality, killing them." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/targeted/fiery_rebirth next_knowledge = list(/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/flame_immunity) @@ -122,12 +114,12 @@ route = PATH_ASH /datum/eldritch_knowledge/ash_blade_upgrade - name = "Blazing Steel" - gain_text = "May the sun burn the heretics." - desc = "Your blade of choice will now add firestacks." + name = "Fiery Blade" + gain_text = "Blade in hand, he swung and swung as the ash fell from the skies. His city, his people... all burnt to cinders, and yet life still remained in his charred body." + desc = "Your blade of choice will now light your enemies ablaze." cost = 2 next_knowledge = list(/datum/eldritch_knowledge/spell/flame_birth) - banned_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade) + banned_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/void_blade_upgrade) route = PATH_ASH /datum/eldritch_knowledge/ash_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters) @@ -140,10 +132,10 @@ /datum/eldritch_knowledge/curse/corrosion name = "Curse of Corrosion" gain_text = "Cursed land, cursed man, cursed mind." - desc = "Curse someone for 2 minutes of vomiting and major organ damage. Using a wirecutter, a spill of blood, a heart, left arm and a right arm, and an item that the victim touched with their bare hands." + desc = "Curse someone for 2 minutes of vomiting and major organ damage. Using a wirecutter, a pool of blood, a heart, left arm and a right arm, and an item that the victim touched with their bare hands." cost = 1 required_atoms = list(/obj/item/wirecutters,/obj/effect/decal/cleanable/blood,/obj/item/organ/heart,/obj/item/bodypart/l_arm,/obj/item/bodypart/r_arm) - next_knowledge = list(/datum/eldritch_knowledge/curse/blindness,/datum/eldritch_knowledge/spell/area_conversion) + next_knowledge = list(/datum/eldritch_knowledge/mad_mask,/datum/eldritch_knowledge/spell/area_conversion) timer = 2 MINUTES /datum/eldritch_knowledge/curse/corrosion/curse(mob/living/chosen_mob) @@ -157,10 +149,10 @@ /datum/eldritch_knowledge/curse/paralysis name = "Curse of Paralysis" gain_text = "Corrupt their flesh, make them bleed." - desc = "Curse someone for 5 minutes of inability to walk. Using a knife, pool of blood, left leg, right leg, a hatchet and an item that the victim touched with their bare hands. " + desc = "Curse someone for 5 minutes of inability to walk. Sacrifice a knife, a pool of blood, a pair of legs, a hatchet and an item that the victim touched with their bare hands. " cost = 1 required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/blood,/obj/item/bodypart/l_leg,/obj/item/bodypart/r_leg,/obj/item/hatchet) - next_knowledge = list(/datum/eldritch_knowledge/curse/blindness,/datum/eldritch_knowledge/summon/raw_prophet) + next_knowledge = list(/datum/eldritch_knowledge/mad_mask,/datum/eldritch_knowledge/summon/raw_prophet) timer = 5 MINUTES /datum/eldritch_knowledge/curse/paralysis/curse(mob/living/chosen_mob) @@ -177,7 +169,7 @@ /datum/eldritch_knowledge/spell/cleave name = "Blood Cleave" - gain_text = "At first I was unfamiliar with these instruments of war, but the priest told me how to use them." + gain_text = "At first I didn't understand these instruments of war, but the priest told me to use them regardless. Soon, he said, I would know them well." desc = "Grants a spell that will inflict wounds and bleeding upon the target, as well as in a short radius around them." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/pointed/cleave @@ -185,8 +177,8 @@ /datum/eldritch_knowledge/final/ash_final name = "Ashlord's Rite" - gain_text = "The forgotten lords have spoken! The Lord of Ash has come! Fear the flame!" - desc = "Bring three corpses onto a transmutation rune, after ascending you will become immune to fire, space, temperature and other environmental hazards. You will develop resistance to all other damages. You will be granted two spells, one which can bring forth a cascade of massive fire, and another which will surround your body in precious flames for a minute." + gain_text = "The Nightwatcher found the rite and shared it amongst mankind! For now I am one with the fire, WITNESS MY ASCENSION!" + desc = "Bring 3 corpses onto a transmutation rune, you will become immune to fire, the vacuum of space, cold and other enviromental hazards and become overall sturdier to all other damages. You will gain a spell that passively creates ring of fire around you as well ,as you will gain a powerful ability that lets you create a wave of flames all around you." required_atoms = list(/mob/living/carbon/human) cost = 5 route = PATH_ASH diff --git a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm index 024fddbca8..7b737f582d 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm @@ -1,21 +1,21 @@ /datum/eldritch_knowledge/base_flesh name = "Principle of Hunger" - desc = "Inducts you into the Path of Flesh. Allows you to transmute a pool of blood with your eldritch blade into a Blade of Flesh." - gain_text = "Hundred's of us starved, but I.. I found the strength in my greed." - banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/rust_final) + desc = "Inducts you into the Path of Flesh. Allows you to transmute a pool of blood with a spear into a Blade of Flesh." + gain_text = "Hundreds of us starved, but not me... I found strength in my greed." + banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void) next_knowledge = list(/datum/eldritch_knowledge/flesh_grasp) - required_atoms = list(/obj/item/melee/sickly_blade,/obj/effect/decal/cleanable/blood) + required_atoms = list(/obj/item/spear,/obj/effect/decal/cleanable/blood) result_atoms = list(/obj/item/melee/sickly_blade/flesh) - cost = 1 + cost = 0 route = PATH_FLESH /datum/eldritch_knowledge/flesh_ghoul name = "Imperfect Ritual" desc = "Allows you to resurrect the dead as voiceless dead by sacrificing them on the transmutation rune with a poppy. Voiceless dead are mute and have 50 HP. You can only have 2 at a time." - gain_text = "I found notes... notes of a ritual, scraps, unfinished, and yet... I still did it." + gain_text = "I found notes of a dark ritual, unfinished... yet still, I pushed forward." cost = 1 required_atoms = list(/mob/living/carbon/human,/obj/item/reagent_containers/food/snacks/grown/poppy) - next_knowledge = list(/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/armor,/datum/eldritch_knowledge/ashen_eyes) + next_knowledge = list(/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/void_cloak,/datum/eldritch_knowledge/ashen_eyes) route = PATH_FLESH var/max_amt = 2 var/current_amt = 0 @@ -66,8 +66,8 @@ /datum/eldritch_knowledge/flesh_grasp name = "Grasp of Flesh" - gain_text = "'My newfound desire, it drove me to do great things,' The Priest said." - desc = "Empowers your Mansus Grasp to be able to create a single ghoul out of a dead player. You cannot raise the same person twice. Ghouls have only 50 HP and look like husks." + gain_text = "My new found desires drove me to greater and greater heights." + desc = "Empowers your mansus grasp to be able to create a single ghoul out of a dead person. Ghouls are only half as sturdy as a regular person and look like husks to the heathens' eyes." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/flesh_ghoul) var/ghoul_amt = 4 @@ -78,8 +78,12 @@ . = ..() if(!ishuman(target) || target == user) return + + if(iscarbon(target)) + user.reagents.add_reagent(/datum/reagent/eldritch, 5) + var/mob/living/carbon/human/human_target = target - var/datum/status_effect/eldritch/eldritch_effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh) + var/datum/status_effect/eldritch/eldritch_effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh) || human_target.has_status_effect(/datum/status_effect/eldritch/void) if(eldritch_effect) . = TRUE eldritch_effect.on_effect() @@ -131,25 +135,26 @@ /datum/eldritch_knowledge/flesh_mark name = "Mark of Flesh" gain_text = "I saw them, the marked ones. The screams... the silence." - desc = "Your sickly blade now applies a mark of flesh to those cut by it. Once marked, using your Mansus Grasp upon them will cause additional bleeding from the target." + desc = "Your Mansus Grasp now applies the Mark of Flesh on hit. Attack the afflicted with your Sickly Blade to detonate the mark. Upon detonation, the Mark of Flesh causes additional bleeding." cost = 2 next_knowledge = list(/datum/eldritch_knowledge/summon/raw_prophet) - banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/ash_mark) + banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/void_mark) route = PATH_FLESH -/datum/eldritch_knowledge/flesh_mark/on_eldritch_blade(target,user,proximity_flag,click_parameters) +/datum/eldritch_knowledge/flesh_mark/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) . = ..() if(isliving(target)) + . = TRUE var/mob/living/living_target = target living_target.apply_status_effect(/datum/status_effect/eldritch/flesh) /datum/eldritch_knowledge/flesh_blade_upgrade name = "Bleeding Steel" - gain_text = "It rained blood, that's when I understood the gravekeeper's advice." - desc = "Your blade will now cause additional bleeding to those hit by it." + gain_text = "And then, blood rained from the heavens. That's when I finally understood the Marshal's teachings." + desc = "Your Sickly Blade will now cause additional bleeding." cost = 2 next_knowledge = list(/datum/eldritch_knowledge/summon/stalker) - banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/rust_blade_upgrade) + banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/void_blade_upgrade) route = PATH_FLESH /datum/eldritch_knowledge/flesh_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters) @@ -162,18 +167,18 @@ /datum/eldritch_knowledge/summon/raw_prophet name = "Raw Ritual" - gain_text = "The uncanny man walks alone in the valley, I was able to call his aid." - desc = "You can now summon a Raw Prophet using eyes, a left arm, right arm and a pool of blood using a transmutation circle. Raw prophets have increased seeing range, and can see through walls. They can jaunt long distances, though they are fragile." + gain_text = "The Uncanny Man, who walks alone in the valley between the worlds... I was able to summon his aid." + desc = "You can now summon a Raw Prophet by transmutating a pair of eyes, a left arm and a pool of blood. Raw prophets have increased seeing range, as well as X-Ray vision, but they are very fragile." cost = 1 required_atoms = list(/obj/item/organ/eyes,/obj/item/bodypart/l_arm,/obj/item/bodypart/r_arm,/obj/effect/decal/cleanable/blood) mob_to_summon = /mob/living/simple_animal/hostile/eldritch/raw_prophet - next_knowledge = list(/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/spell/blood_siphon,/datum/eldritch_knowledge/curse/paralysis) + next_knowledge = list(/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/rune_carver,/datum/eldritch_knowledge/curse/paralysis) route = PATH_FLESH /datum/eldritch_knowledge/summon/stalker name = "Lonely Ritual" - gain_text = "I was able to combine my greed and desires to summon an eldritch beast I have not seen before." - desc = "You can now summon a Stalker using a knife, a candle, a pen and a piece of paper using a transmutation circle. Stalkers possess the ability to shapeshift into various forms while assuming the vigor and powers of that form." + gain_text = "I was able to combine my greed and desires to summon an eldritch beast I had never seen before. An ever shapeshifting mass of flesh, it knew well my goals." + desc = "You can now summon a Stalker by transmutating a pair of eyes, a candle, a pen and a piece of paper. Stalkers can shapeshift into harmless animals to get close to the victim." cost = 1 required_atoms = list(/obj/item/kitchen/knife,/obj/item/candle,/obj/item/pen,/obj/item/paper) mob_to_summon = /mob/living/simple_animal/hostile/eldritch/stalker @@ -182,7 +187,7 @@ /datum/eldritch_knowledge/summon/ashy name = "Ashen Ritual" - gain_text = "I combined principle of hunger with desire of destruction. The eyeful lords have noticed me." + gain_text = "I combined my principle of hunger with my desire for destruction. And the Nightwatcher knew my name." desc = "You can now summon an Ashen One by transmuting a pile of ash, a head and a book using a transmutation circle. They possess the ability to jaunt short distances and create a cascade of flames." cost = 1 required_atoms = list(/obj/effect/decal/cleanable/ash,/obj/item/bodypart/head,/obj/item/book) @@ -191,66 +196,43 @@ /datum/eldritch_knowledge/summon/rusty name = "Rusted Ritual" - gain_text = "I combined principle of hunger with desire of corruption. The rusted hills call my name." - desc = "You can now summon a Rust Walker transmuting a vomit pool, a head, and a book using a transmutation circle. Rust Walkers possess the ability to spread rust and can fire bolts of rust to further corrode the area." + gain_text = "I combined my principle of hunger with my desire for corruption. And the Rusted Hills called my name." + desc = "You can now summon a Rust Walker by transmuting a vomit pool, a severed head, and a book using a transmutation circle. Rust Walkers possess the ability to spread rust and can fire bolts of rust to further corrode the area." cost = 1 required_atoms = list(/obj/effect/decal/cleanable/vomit,/obj/item/bodypart/head,/obj/item/book) mob_to_summon = /mob/living/simple_animal/hostile/eldritch/rust_spirit - next_knowledge = list(/datum/eldritch_knowledge/summon/stalker,/datum/eldritch_knowledge/spell/entropic_plume) + next_knowledge = list(/datum/eldritch_knowledge/spell/voidpull,/datum/eldritch_knowledge/spell/entropic_plume) /datum/eldritch_knowledge/spell/blood_siphon name = "Blood Siphon" - gain_text = "Our blood is all the same after all, the owl told me." - desc = "You are granted a spell that drains some of the targets health, and returns it to you. It also has a chance to transfer any wounds you possess onto the target." + gain_text = "No matter the man, we bleed all the same. That's what the Marshal told me." + desc = "You gain a spell that drains lifeforce from your enemies to restore your own." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/pointed/blood_siphon - next_knowledge = list(/datum/eldritch_knowledge/summon/raw_prophet,/datum/eldritch_knowledge/spell/area_conversion) + next_knowledge = list(/datum/eldritch_knowledge/summon/stalker,/datum/eldritch_knowledge/spell/voidpull) /datum/eldritch_knowledge/final/flesh_final name = "Priest's Final Hymn" - gain_text = "Man of this world. Hear me! For the time of the lord of arms has come!" - desc = "Bring three corpses to a transmutation rune to either ascend as The Lord of the Night or summon a single Terror of the Night, however you cannot ascend more than once." + gain_text = "Men of this world. Hear me, for the time of the Lord of Arms has come! The Emperor of Flesh guides my army!" + desc = "Bring 3 bodies onto a transmutation rune to shed your human form and ascend to untold power." required_atoms = list(/mob/living/carbon/human) cost = 5 route = PATH_FLESH /datum/eldritch_knowledge/final/flesh_final/on_finished_recipe(mob/living/user, list/atoms, loc) - var/alert_ = alert(user,"Do you want to ascend as the lord of the night or just summon a terror of the night?","...","Yes","No") - user.SetImmobilized(10 HOURS) // no way someone will stand 10 hours in a spot, just so he can move while the alert is still showing. - switch(alert_) - if("No") - var/mob/living/summoned = new /mob/living/simple_animal/hostile/eldritch/armsy(loc) - message_admins("[summoned.name] is being summoned by [user.real_name] in [loc]") - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [summoned.real_name]", ROLE_HERETIC, null, ROLE_HERETIC, 100,summoned) - user.SetImmobilized(0) - if(LAZYLEN(candidates) == 0) - to_chat(user,"No ghost could be found...") - qdel(summoned) - return FALSE - var/mob/dead/observer/ghost_candidate = pick(candidates) - priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the dark, for vassal of arms has ascended! Terror of the night has come! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') - log_game("[key_name_admin(ghost_candidate)] has taken control of ([key_name_admin(summoned)]).") - summoned.ghostize(FALSE) - summoned.key = ghost_candidate.key - summoned.mind.add_antag_datum(/datum/antagonist/heretic_monster) //no you will NOT get the achivement you ghost. - var/datum/antagonist/heretic_monster/monster = summoned.mind.has_antag_datum(/datum/antagonist/heretic_monster) - var/datum/antagonist/heretic/master = user.mind.has_antag_datum(/datum/antagonist/heretic) - monster.set_owner(master) - master.ascended = TRUE - if("Yes") - var/mob/living/summoned = new /mob/living/simple_animal/hostile/eldritch/armsy/prime(loc,TRUE,10) - summoned.ghostize(0) - user.SetImmobilized(0) - priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the dark, for king of arms has ascended! Lord of the night has come! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') - log_game("[user.real_name] ascended as [summoned.real_name]") - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - H.client?.give_award(/datum/award/achievement/misc/flesh_ascension, H) - var/datum/antagonist/heretic/ascension = user.mind.has_antag_datum(/datum/antagonist/heretic) - ascension.ascended = TRUE - user.mind.transfer_to(summoned, TRUE) - user.gib() + . = ..() + priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Ever coiling vortex. Reality unfolded. THE LORD OF ARMS, [user.real_name] has ascended! Fear the ever twisting hand! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shed_human_form) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + H.physiology.brute_mod *= 0.5 + H.physiology.burn_mod *= 0.5 + var/datum/antagonist/heretic/heretic = user.mind.has_antag_datum(/datum/antagonist/heretic) + var/datum/eldritch_knowledge/flesh_grasp/ghoul1 = heretic.get_knowledge(/datum/eldritch_knowledge/flesh_grasp) + ghoul1.ghoul_amt *= 3 + var/datum/eldritch_knowledge/flesh_ghoul/ghoul2 = heretic.get_knowledge(/datum/eldritch_knowledge/flesh_ghoul) + ghoul2.max_amt *= 3 return ..() diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 5dc42855e5..8184beb3aa 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -1,18 +1,18 @@ /datum/eldritch_knowledge/base_rust name = "Blacksmith's Tale" - desc = "Inducts you into the Path of Rust. Allows you to transmute an eldritch blade with any trash item into a Blade of Rust." - gain_text = "'Let me tell you a story,' The Blacksmith said as he gazed into his rusty blade." - banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/flesh_final) + desc = "Inducts you into the Path of Rust. Allows you to transmute a spear with any trash item into a Blade of Rust." + gain_text = "'Let me tell you a story', said the Blacksmith, as he gazed deep into his rusty blade." + banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/flesh_final,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void) next_knowledge = list(/datum/eldritch_knowledge/rust_fist) - required_atoms = list(/obj/item/melee/sickly_blade,/obj/item/trash) + required_atoms = list(/obj/item/spear,/obj/item/trash) result_atoms = list(/obj/item/melee/sickly_blade/rust) - cost = 1 + cost = 0 route = PATH_RUST /datum/eldritch_knowledge/rust_fist name = "Grasp of Rust" - desc = "Empowers your Mansus Grasp to deal 500 damage to non-living matter and rust any structure it touches. Destroys already rusted structures." - gain_text = "Rust grows on the ceiling of the mansus." + desc = "Empowers your Mansus Grasp to deal 500 damage to non-living matter and rust any surface it touches. Already rusted surfaces are destroyed." + gain_text = "On the ceiling of the Mansus, rust grows as moss does on a stone." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/rust_regen) var/rust_force = 500 @@ -20,35 +20,40 @@ route = PATH_RUST /datum/eldritch_knowledge/rust_fist/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + var/check = FALSE + if(ismob(target)) + var/mob/living/mobster = target + if(!mobster.mob_biotypes & MOB_ROBOTIC) + return FALSE + else + check = TRUE + if(user.a_intent == INTENT_HARM || check) + target.rust_heretic_act() + return TRUE + +/datum/eldritch_knowledge/rust_fist/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters) . = ..() if(ishuman(target)) var/mob/living/carbon/human/H = target - var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) + var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) if(E) E.on_effect() H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25) - else - for(var/X in user.mind.spell_list) - if(!istype(X,/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp)) - continue - var/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp/MG = X - MG.charge_counter = min(round(MG.charge_counter + MG.charge_max * 0.75),MG.charge_max) - target.rust_heretic_act() - return TRUE /datum/eldritch_knowledge/spell/area_conversion name = "Aggressive Spread" - desc = "Spreads rust to nearby turfs. Destroys already rusted walls." - gain_text = "All wise men know not to touch the bound king." + desc = "Spreads rust to nearby surfaces. Already rusted surfaces are destroyed." + gain_text = "All wise men know well not to touch the Bound King." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/aoe_turf/rust_conversion - next_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/curse/corrosion,/datum/eldritch_knowledge/spell/blood_siphon,/datum/eldritch_knowledge/spell/rust_wave) + next_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/curse/corrosion,/datum/eldritch_knowledge/crucible,/datum/eldritch_knowledge/spell/rust_wave) route = PATH_RUST /datum/eldritch_knowledge/spell/rust_wave name = "Patron's Reach" desc = "You can now send a bolt of rust that corrupts the immediate area, and poisons the first target hit." - gain_text = "Messengers of hope fear the Rustbringer." + gain_text = "Messengers of Hope, fear the Rustbringer!" cost = 1 spell_to_add = /obj/effect/proc_holder/spell/aimed/rust_wave route = PATH_RUST @@ -56,7 +61,7 @@ /datum/eldritch_knowledge/rust_regen name = "Leeching Walk" desc = "Passively heals you when you are on rusted tiles." - gain_text = "'The strength was unparalleled, unnatural.' The Blacksmith was smiling." + gain_text = "The strength was unparalleled, unnatural. The Blacksmith was smiling." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/armor,/datum/eldritch_knowledge/essence) route = PATH_RUST @@ -75,26 +80,27 @@ /datum/eldritch_knowledge/rust_mark name = "Mark of Rust" - desc = "Your eldritch blade now applies a rust mark. Rust marks have a chance to deal between 0 to 200 damage to 75% of enemies items. To activate the mark use your Mansus Grasp on it." - gain_text = "Lords of the depths help those in dire need at a cost." + desc = "Your Mansus Grasp now applies the Mark of Rust on hit. Attack the afflicted with your Sickly Blade to detonate the mark. Upon detonation, the Mark of Rust has a chance to deal between 0 to 200 damage to 75% of your enemy's held items." + gain_text = "Rusted Hills help those in dire need at a cost." cost = 2 next_knowledge = list(/datum/eldritch_knowledge/spell/area_conversion) - banned_knowledge = list(/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/flesh_mark) + banned_knowledge = list(/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/void_mark) route = PATH_RUST -/datum/eldritch_knowledge/rust_mark/on_eldritch_blade(target,user,proximity_flag,click_parameters) +/datum/eldritch_knowledge/rust_mark/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) . = ..() if(isliving(target)) + . = TRUE var/mob/living/living_target = target living_target.apply_status_effect(/datum/status_effect/eldritch/rust) /datum/eldritch_knowledge/rust_blade_upgrade - name = "Toxic Steel" - gain_text = "Let the blade guide you through the flesh." - desc = "Your blade of choice will now add toxin to enemies bloodstream." + name = "Toxic Blade" + gain_text = "The Blade will guide you through the flesh, should you let it." + desc = "Your blade of choice will now poison your enemies on hit." cost = 2 next_knowledge = list(/datum/eldritch_knowledge/spell/entropic_plume) - banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade) + banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/void_blade_upgrade) route = PATH_RUST /datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(mob/target,user,proximity_flag,click_parameters) @@ -106,8 +112,8 @@ /datum/eldritch_knowledge/spell/entropic_plume name = "Entropic Plume" - desc = "You can now send a befuddling plume that blinds, poisons and makes enemies strike each other, while also converting the immediate area into rust." - gain_text = "If they knew, the truth would turn them against eachother." + desc = "You can now send a disorienting plume of pure entropy that blinds, poisons and makes enemies strike each other. It also rusts any tiles it affects." + gain_text = "The slightest glimmer of truth would turn them against eachother." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/cone/staggered/entropic_plume next_knowledge = list(/datum/eldritch_knowledge/rust_fist_upgrade,/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/rusty) @@ -115,26 +121,26 @@ /datum/eldritch_knowledge/armor name = "Armorer's Ritual" - desc = "You can now create eldritch armor using a built table and a gas mask on top of a transmutation rune." - gain_text = "For I am the heir to the throne of doom." + desc = "You can now create Eldritch Armor using a table and a gas mask." + gain_text = "The Rusted Hills welcomed the Blacksmith in their generosity." cost = 1 - next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/flesh_ghoul) + next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/cold_snap) required_atoms = list(/obj/structure/table,/obj/item/clothing/mask/gas) result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/eldritch) /datum/eldritch_knowledge/essence name = "Priest's Ritual" - desc = "You can now transmute a tank of water into a bottle of eldritch fluid." - gain_text = "This is an old recipe, I got it from an owl." + desc = "You can now transmute a tank of water and a glass shard into a bottle of eldritch water." + gain_text = "This is an old recipe. The Owl whispered it to me." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/spell/ashen_shift) - required_atoms = list(/obj/structure/reagent_dispensers/watertank) + required_atoms = list(/obj/structure/reagent_dispensers/watertank,/obj/item/shard) result_atoms = list(/obj/item/reagent_containers/glass/beaker/eldritch) /datum/eldritch_knowledge/rust_fist_upgrade name = "Vile Grip" desc = "Empowers your Mansus Grasp further, sickening your foes and making them vomit, while also strengthening the rate at which your hand decays objects." - gain_text = "A sickly diseased touch that was, yet, so welcoming." + gain_text = "His touch vile, terrible, and yet so terribly inviting.." cost = 2 next_knowledge = list(/datum/eldritch_knowledge/spell/grasp_of_decay) var/rust_force = 750 @@ -145,13 +151,13 @@ . = ..() if(ishuman(target)) var/mob/living/carbon/human/H = target - H.set_disgust(75) + H.set_disgust(25) return TRUE /datum/eldritch_knowledge/spell/grasp_of_decay name = "Grasp of Decay" - desc = "Applying your knowledge of rust to the human body, a knowledge that could decay your foes from the inside out, resulting in organ failure, vomiting, or eventual death through peeling flesh." - gain_text = "Decay, similar to Rust, yet so much more terribly uninviting." + desc = "Applying your knowledge of rust to the human body, a knowledge that could decay your foes from the inside out, resulting in organ failure, vomiting, or eventual death through the peeling of rotting flesh." + gain_text = "Rust, decay, it's all the same. All that remains is application." cost = 2 spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/grasp_of_decay next_knowledge = list(/datum/eldritch_knowledge/final/rust_final) @@ -160,7 +166,7 @@ /datum/eldritch_knowledge/final/rust_final name = "Rustbringer's Oath" desc = "Bring three corpses onto a transmutation rune. After you finish the ritual, rust will now automatically spread from the rune. Your healing on rust is also tripled, while you become more resilient overall." - gain_text = "Champion of rust. Corruptor of steel. Fear the dark for Rustbringer has come!" + gain_text = "Champion of rust. Corruptor of steel. Fear the dark for the Rustbringer has come! Rusted Hills, CALL MY NAME!" cost = 5 required_atoms = list(/mob/living/carbon/human) route = PATH_RUST @@ -169,7 +175,6 @@ var/mob/living/carbon/human/H = user H.physiology.brute_mod *= 0.5 H.physiology.burn_mod *= 0.5 - H.client?.give_award(/datum/award/achievement/misc/rust_ascension, H) priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') new /datum/rust_spread(loc) var/datum/antagonist/heretic/ascension = H.mind.has_antag_datum(/datum/antagonist/heretic) diff --git a/code/modules/antagonists/eldritch_cult/knowledge/void_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/void_lore.dm new file mode 100644 index 0000000000..6046bfbdf5 --- /dev/null +++ b/code/modules/antagonists/eldritch_cult/knowledge/void_lore.dm @@ -0,0 +1,223 @@ +/datum/eldritch_knowledge/base_void + name = "Glimmer of Winter" + desc = "Opens up the path of void to you. Allows you to transmute a spear in a sub-zero temperature into a void blade." + gain_text = "I feel a shimmer in the air, atmosphere around me gets colder. I feel my body realizing the emptiness of existance. Something's watching me" + banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/flesh_final,/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/final/rust_final) + next_knowledge = list(/datum/eldritch_knowledge/void_grasp) + required_atoms = list(/obj/item/spear) + result_atoms = list(/obj/item/melee/sickly_blade/void) + cost = 0 + route = PATH_VOID + +/datum/eldritch_knowledge/base_void/recipe_snowflake_check(list/atoms, loc) + . = ..() + var/turf/open/turfie = loc + if(turfie.GetTemperature() > T0C) + return FALSE + +/datum/eldritch_knowledge/void_grasp + name = "Grasp of Void" + desc = "Temporarily mutes your victim, also lowers their body temperature." + gain_text = "I found the cold watcher who observes me. The resonance of cold grows within me. This isn't the end of the mystery." + cost = 1 + route = PATH_VOID + next_knowledge = list(/datum/eldritch_knowledge/cold_snap) + +/datum/eldritch_knowledge/void_grasp/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!iscarbon(target)) + return + var/mob/living/carbon/carbon_target = target + var/turf/open/turfie = get_turf(carbon_target) + turfie.TakeTemperature(-20) + carbon_target.adjust_bodytemperature(-40) + carbon_target.silent = clamp(carbon_target.silent + 4, 0, 20) + return TRUE + +/datum/eldritch_knowledge/void_grasp/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!ishuman(target)) + return + var/mob/living/carbon/human/H = target + var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) + if(!E) + return + E.on_effect() + H.silent = clamp(H.silent + 3, 0, 20) + +/datum/eldritch_knowledge/cold_snap + name = "Aristocrat's Way" + desc = "Makes you immune to cold temperatures, and you no longer need to breathe, you can still take damage from lack of pressure." + gain_text = "I found a thread of cold breath. It lead me to a strange shrine, all made of crystals. Translucent and white, a depiction of a nobleman stood before me." + cost = 1 + route = PATH_VOID + next_knowledge = list(/datum/eldritch_knowledge/void_cloak,/datum/eldritch_knowledge/void_mark,/datum/eldritch_knowledge/armor) + +/datum/eldritch_knowledge/cold_snap/on_gain(mob/user) + . = ..() + ADD_TRAIT(user,TRAIT_RESISTCOLD,MAGIC_TRAIT) + ADD_TRAIT(user, TRAIT_NOBREATH, MAGIC_TRAIT) + +/datum/eldritch_knowledge/cold_snap/on_lose(mob/user) + . = ..() + REMOVE_TRAIT(user,TRAIT_RESISTCOLD,MAGIC_TRAIT) + ADD_TRAIT(user, TRAIT_NOBREATH, MAGIC_TRAIT) + +/datum/eldritch_knowledge/void_cloak + name = "Void Cloak" + desc = "A cloak that can become invisbile at will, hiding items you store in it. To create it transmute a glass shard, any item of clothing that you can fit over your uniform and any type of bedsheet." + gain_text = "Owl is the keeper of things that quite not are in practice, but in theory are." + cost = 1 + next_knowledge = list(/datum/eldritch_knowledge/flesh_ghoul,/datum/eldritch_knowledge/cold_snap) + result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/void) + required_atoms = list(/obj/item/shard,/obj/item/clothing/suit,/obj/item/bedsheet) + +/datum/eldritch_knowledge/void_mark + name = "Mark of Void" + gain_text = "A gust of wind? Maybe a shimmer in the air. Presence is overwhelming, my senses betrayed me, my mind is my enemy." + desc = "Your mansus grasp now applies mark of void status effect. To proc the mark, use your sickly blade on the marked. Mark of void when procced lowers the victims body temperature significantly." + cost = 2 + next_knowledge = list(/datum/eldritch_knowledge/spell/void_phase) + banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/flesh_mark) + route = PATH_VOID + +/datum/eldritch_knowledge/void_mark/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!isliving(target)) + return + . = TRUE + var/mob/living/living_target = target + living_target.apply_status_effect(/datum/status_effect/eldritch/void) + +/datum/eldritch_knowledge/spell/void_phase + name = "Void Phase" + gain_text = "Reality bends under the power of memory, for all is fleeting, and what else stays?" + desc = "You gain a long range pointed blink that allows you to instantly teleport to your location, it causes aoe damage around you and your chosen location." + cost = 1 + spell_to_add = /obj/effect/proc_holder/spell/pointed/void_blink + next_knowledge = list(/datum/eldritch_knowledge/rune_carver,/datum/eldritch_knowledge/crucible,/datum/eldritch_knowledge/void_blade_upgrade) + route = PATH_VOID + +/datum/eldritch_knowledge/rune_carver + name = "Carving Knife" + gain_text = "Etched, carved... eternal. I can carve the monolith and evoke their powers!" + desc = "You can create a carving knife, which allows you to create up to 3 carvings on the floor that have various effects on nonbelievers who walk over them. They make quite a handy throwing weapon. To create the carving knife transmute a knife with a glass shard and a piece of paper." + cost = 1 + next_knowledge = list(/datum/eldritch_knowledge/spell/void_phase,/datum/eldritch_knowledge/summon/raw_prophet) + required_atoms = list(/obj/item/kitchen/knife,/obj/item/shard,/obj/item/paper) + result_atoms = list(/obj/item/melee/rune_knife) + +/datum/eldritch_knowledge/crucible + name = "Mawed Crucible" + gain_text = "This is pure agony, i wasn't able to summon the dereliction of the emperor, but i stumbled upon a diffrent recipe..." + desc = "Allows you to create a mawed crucible, eldritch structure that allows you to create potions of various effects, to do so transmute a table with a watertank" + cost = 1 + next_knowledge = list(/datum/eldritch_knowledge/spell/void_phase,/datum/eldritch_knowledge/spell/area_conversion) + required_atoms = list(/obj/structure/reagent_dispensers/watertank,/obj/structure/table) + result_atoms = list(/obj/structure/eldritch_crucible) + +/datum/eldritch_knowledge/void_blade_upgrade + name = "Seeking blade" + gain_text = "Fleeting memories, fleeting feet. I can mark my way with the frozen blood upon the snow. Covered and forgotten." + desc = "You can now use your blade on a distant marked target to move to them and attack them." + cost = 2 + next_knowledge = list(/datum/eldritch_knowledge/spell/voidpull) + banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/rust_blade_upgrade) + route = PATH_VOID + +/datum/eldritch_knowledge/void_blade_upgrade/on_ranged_attack_eldritch_blade(atom/target, mob/user, click_parameters) + . = ..() + var/mob/living/carbon/carbon_human = user + var/mob/living/carbon/human/human_target = target + var/datum/status_effect/eldritch/effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh) || human_target.has_status_effect(/datum/status_effect/eldritch/void) + if(!effect) + return + var/dir = angle2dir(dir2angle(get_dir(user,human_target))+180) + carbon_human.forceMove(get_step(human_target,dir)) + var/obj/item/melee/sickly_blade/blade = carbon_human.get_active_held_item() + blade.melee_attack_chain(carbon_human,human_target,attackchain_flags = ATTACK_IGNORE_CLICKDELAY) + +/datum/eldritch_knowledge/spell/voidpull + name = "Void Pull" + gain_text = "This entity calls itself The Aristocrat, I'm close to finishing what was started." + desc = "You gain an ability that let's you pull people around you closer to you." + cost = 1 + spell_to_add = /obj/effect/proc_holder/spell/targeted/void_pull + next_knowledge = list(/datum/eldritch_knowledge/spell/boogiewoogie,/datum/eldritch_knowledge/spell/blood_siphon,/datum/eldritch_knowledge/summon/rusty) + route = PATH_VOID + +/datum/eldritch_knowledge/spell/boogiewoogie + name = "Void's Applause" + gain_text = "The curtain is closing, and I'm certain that The Aristocrat is proud of me." + desc = "With the clap of your hands, you can swap your position with someone within your vision." + cost = 2 + spell_to_add = /obj/effect/proc_holder/spell/pointed/boogie_woogie + next_knowledge = list(/datum/eldritch_knowledge/spell/domain_expansion) + route = PATH_VOID + +/datum/eldritch_knowledge/spell/domain_expansion + name = "Infinite Void" + gain_text = "This world will be my stage, and nothing will be out of my reach." + desc = "Gain the ability to mark a 7x7 area as your domain after a short delay. Creatures in your domain are slowed and branded with a void mark, allowing you to quickly teleport to them and slash them, further inhibiting their ability to move." + cost = 2 + spell_to_add = /obj/effect/proc_holder/spell/aoe_turf/domain_expansion + next_knowledge = list(/datum/eldritch_knowledge/final/void_final) + route = PATH_VOID + +/datum/eldritch_knowledge/final/void_final + name = "Waltz at the End of Time" + desc = "Bring 3 corpses onto the transmutation rune. After you finish the ritual you will automatically silence people around you and will summon a snow storm around you." + gain_text = "The world falls into darkness. I stand in an empty plane, small flakes of ice fall from the sky. The Aristocrat stands before me, he motions to me. We will play a waltz to the whispers of dying reality, as the world is destroyed before our eyes." + cost = 5 + required_atoms = list(/mob/living/carbon/human) + route = PATH_VOID + ///soundloop for the void theme + var/datum/looping_sound/void_loop/sound_loop + ///Reference to the ongoing voidstorm that surrounds the heretic + var/datum/weather/void_storm/storm + +/datum/eldritch_knowledge/final/void_final/on_finished_recipe(mob/living/user, list/atoms, loc) + var/mob/living/carbon/human/H = user + user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/repulse/eldritch) + H.physiology.brute_mod *= 0.5 + H.physiology.burn_mod *= 0.5 + ADD_TRAIT(H, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) + priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# The nobleman of void [H.real_name] has arrived, step along the Waltz that ends worlds! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') + + sound_loop = new(list(user),TRUE,TRUE) + return ..() + +/datum/eldritch_knowledge/final/void_final/on_death() + if(sound_loop) + sound_loop.stop() + if(storm) + storm.end() + QDEL_NULL(storm) + +/datum/eldritch_knowledge/final/void_final/on_life(mob/user) + . = ..() + if(!finished) + return + + for(var/mob/living/carbon/livies in spiral_range(7,user)-user) + if(IS_HERETIC_MONSTER(livies) || IS_HERETIC(livies)) + return + livies.silent = clamp(livies.silent + 1, 0, 5) + livies.adjust_bodytemperature(-20) + + var/turf/turfie = get_turf(user) + if(!isopenturf(turfie)) + return + var/turf/open/open_turfie = turfie + open_turfie.TakeTemperature(-20) + + var/area/user_area = get_area(user) + var/turf/user_turf = get_turf(user) + + if(!storm) + storm = new /datum/weather/void_storm(list(user_turf.z)) + storm.telegraph() + + storm.area_type = user_area.type + storm.impacted_areas = list(user_area) + storm.update_areas() diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 9c3e0ef64a..90f8680da9 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -202,8 +202,9 @@ filled = 1 release_pressure = ONE_ATMOSPHERE*2 -/obj/machinery/portable_atmospherics/canister/Initialize(mapload, datum/gas_mixture/existing_mixture) - . = ..() +/obj/machinery/portable_atmospherics/canister/New(loc, datum/gas_mixture/existing_mixture) + ..() + if(existing_mixture) air_contents.copy_from(existing_mixture) else @@ -221,10 +222,8 @@ air_contents.set_temperature(starter_temp) /obj/machinery/portable_atmospherics/canister/air/create_gas() - var/oh_two = /datum/gas/oxygen - var/dihydrogen = /datum/gas/nitrogen //how to piss of chemists - air_contents.set_moles(oh_two, (O2STANDARD * maximum_pressure * filled) * air_contents.return_volume() / (R_IDEAL_GAS_EQUATION * air_contents.return_temperature())) - air_contents.set_moles(dihydrogen, (N2STANDARD * maximum_pressure * filled) * air_contents.return_volume() / (R_IDEAL_GAS_EQUATION * air_contents.return_temperature())) + air_contents.set_moles(/datum/gas/oxygen, (O2STANDARD * maximum_pressure * filled) * air_contents.return_volume() / (R_IDEAL_GAS_EQUATION * air_contents.return_temperature())) + air_contents.set_moles(/datum/gas/nitrogen, (N2STANDARD * maximum_pressure * filled) * air_contents.return_volume() / (R_IDEAL_GAS_EQUATION * air_contents.return_temperature())) /obj/machinery/portable_atmospherics/canister/update_icon_state() if(stat & BROKEN) diff --git a/code/modules/cargo/blackmarket/blackmarket_item.dm b/code/modules/cargo/blackmarket/blackmarket_item.dm new file mode 100644 index 0000000000..53c0004a7f --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_item.dm @@ -0,0 +1,51 @@ +/datum/blackmarket_item + var/name // Name for the item entry used in the uplink. + var/desc // Description for the item entry used in the uplink. + var/category // The category this item belongs to, should be already declared in the market that this item is accessible in. + var/list/markets = list(/datum/blackmarket_market/blackmarket) // "/datum/blackmarket_market"s that this item should be in, used by SSblackmarket on init. + + var/price // Price for the item, if not set creates a price according to the *_min and *_max vars. + var/stock // How many of this type of item is available, if not set creates a price according to the *_min and *_max vars. + + var/item // Path to or the item itself what this entry is for, this should be set even if you override spawn_item to spawn your item. + + var/price_min = 0 // Minimum price for the item if generated randomly. + var/price_max = 0 // Maximum price for the item if generated randomly. + var/stock_min = 1 // Minimum amount that there should be of this item in the market if generated randomly. This defaults to 1 as most items will have it as 1. + var/stock_max = 0 // Maximum amount that there should be of this item in the market if generated randomly. + var/availability_prob = 0 // Probability for this item to be available. Used by SSblackmarket on init. + +/datum/blackmarket_item/New() + if(isnull(price)) + price = rand(price_min, price_max) + if(isnull(stock)) + stock = rand(stock_min, stock_max) + +/datum/blackmarket_item/proc/spawn_item(loc) // Used for spawning the wanted item, override if you need to do something special with the item. + return new item(loc) + +/datum/blackmarket_item/proc/buy(obj/item/blackmarket_uplink/uplink, mob/buyer, shipping_method) // Buys the item and makes SSblackmarket handle it. + // Sanity + if(!istype(uplink) || !istype(buyer)) + return FALSE + if(!item || stock <= 0) // This shouldn't be able to happen unless there was some manipulation or admin fuckery. + return FALSE + var/datum/blackmarket_purchase/purchase = new(src, uplink, shipping_method) // Alright, the item has been purchased. + if(SSblackmarket.queue_item(purchase)) // SSblackmarket takes care of the shipping. + stock-- + log_game("[key_name(buyer)] has succesfully purchased [name] using [shipping_method] for shipping.") + return TRUE + return FALSE + +/datum/blackmarket_purchase // This exists because it is easier to keep track of all the vars this way. + var/datum/blackmarket_item/entry // The entry being purchased. + var/item // Instance of the item being sent. + var/obj/item/blackmarket_uplink/uplink // The uplink where this purchase was done from. + var/method // Shipping method used to buy this item. + +/datum/blackmarket_purchase/New(_entry, _uplink, _method) + entry = _entry + if(!ispath(entry.item)) + item = entry.item + uplink = _uplink + method = _method diff --git a/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm b/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm new file mode 100644 index 0000000000..a6ee19e38d --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm @@ -0,0 +1,55 @@ +/datum/blackmarket_item/clothing + category = "Clothing" + +/datum/blackmarket_item/clothing/ninja_mask + name = "Space Ninja Mask" + desc = "Apart from being acid, lava, fireproof and being hard to take off someone it does nothing special on it's own." + item = /obj/item/clothing/mask/gas/space_ninja + price_min = 200 + price_max = 500 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/clothing/durathread_vest + name = "Durathread Vest" + desc = "Dont let them tell you this stuff is \"Like asbestos\" or \"Pulled from the market for safety concerns\". It could be the difference between a robusting and a retaliation." + item = /obj/item/clothing/suit/armor/vest/durathread + price_min = 200 + price_max = 400 + stock_max = 4 + availability_prob = 50 + +/datum/blackmarket_item/clothing/durathread_helmet + name = "Durathread Helmet" + desc = "Customers ask why it's called a helmet when it's just made from armoured fabric and I always say the same thing: No refunds." + item = /obj/item/clothing/head/helmet/durathread + price_min = 100 + price_max = 200 + stock_max = 4 + availability_prob = 50 + +/datum/blackmarket_item/clothing/full_spacesuit_set + name = "Nanotrasen Branded Spacesuit Box" + desc = "A few boxes of \"Old Style\" space suits fell off the back of a space truck." + item = /obj/item/storage/box + price_min = 1500 + price_max = 4000 + stock_max = 3 + availability_prob = 30 + +/datum/blackmarket_item/clothing/full_spacesuit_set/spawn_item(loc) + var/obj/item/storage/box/B = ..() + B.name = "Spacesuit Box" + B.desc = "It has a NT logo on it." + new /obj/item/clothing/suit/space(B) + new /obj/item/clothing/head/helmet/space(B) + return B + +/datum/blackmarket_item/clothing/chameleon_hat + name = "Chameleon Hat" + desc = "Pick any hat you want with this Handy device. Not Quality Tested." + item = /obj/item/clothing/head/chameleon/broken + price_min = 100 + price_max = 200 + stock_max = 2 + availability_prob = 70 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm new file mode 100644 index 0000000000..469c467c2f --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm @@ -0,0 +1,58 @@ +/datum/blackmarket_item/consumable + category = "Consumables" + +/datum/blackmarket_item/consumable/clown_tears + name = "Bowl of Clown's Tears" + desc = "Guaranteed fresh from Weepy Boggins Tragic Kitchen" + item = /obj/item/reagent_containers/food/snacks/soup/clownstears + stock = 1 + price_min = 520 + price_max = 600 + availability_prob = 10 + +/datum/blackmarket_item/consumable/donk_pocket_box + name = "Box of Donk Pockets" + desc = "A well packaged box containing the favourite snack of every spacefarer." + item = /obj/item/storage/box/donkpockets + stock_min = 2 + stock_max = 5 + price_min = 325 + price_max = 400 + availability_prob = 80 + +/datum/blackmarket_item/consumable/suspicious_pills + name = "Bottle of Suspicious Pills" + desc = "A random cocktail of luxury drugs that are sure to put a smile on your face!" + item = /obj/item/storage/pill_bottle + stock_min = 2 + stock_max = 3 + price_min = 400 + price_max = 700 + availability_prob = 50 + +/datum/blackmarket_item/consumable/suspicious_pills/spawn_item(loc) + var/pillbottle = pick(list(/obj/item/storage/pill_bottle/zoom, + /obj/item/storage/pill_bottle/happy, + /obj/item/storage/pill_bottle/lsd, + /obj/item/storage/pill_bottle/aranesp, + /obj/item/storage/pill_bottle/stimulant)) + return new pillbottle(loc) + +/datum/blackmarket_item/consumable/floor_pill + name = "Strange Pill" + desc = "The Russian Roulette of the Maintenance Tunnels." + item = /obj/item/reagent_containers/pill/floorpill + stock_min = 5 + stock_max = 35 + price_min = 10 + price_max = 60 + availability_prob = 50 + +/datum/blackmarket_item/consumable/pumpup + name = "Shoddy Stimulants" + desc = "Feel the energy inside each needle!" + item = /obj/item/reagent_containers/hypospray/medipen/stimpack + stock_max = 5 + price_min = 50 + price_max = 150 + availability_prob = 90 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm new file mode 100644 index 0000000000..474be8d29c --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm @@ -0,0 +1,53 @@ +/datum/blackmarket_item/misc + category = "Miscellaneous" + +/datum/blackmarket_item/misc/cap_gun + name = "Cap Gun" + desc = "Prank your friends with this harmless gun! Harmlessness guranteed." + item = /obj/item/toy/gun + price_min = 50 + price_max = 200 + stock_max = 6 + availability_prob = 80 + +/datum/blackmarket_item/misc/shoulder_holster + name = "Shoulder holster" + desc = "Yeehaw, hardboiled friends! This holster is the first step in your dream of becoming a detective and being allowed to shoot real guns!" + item = /obj/item/storage/belt/holster + price_min = 400 + price_max = 800 + stock_max = 8 + availability_prob = 60 + +/datum/blackmarket_item/misc/holywater + name = "Flask of holy water" + desc = "Father Lootius' own brand of ready-made holy water." + item = /obj/item/reagent_containers/food/drinks/bottle/holywater + price_min = 400 + price_max = 600 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/misc/holywater/spawn_item(loc) + if (prob(6.66)) + return new /obj/item/reagent_containers/glass/beaker/unholywater(loc) + return ..() + +/datum/blackmarket_item/misc/strange_seed + name = "Strange Seeds" + desc = "An Exotic Variety of seed that can contain anything from glow to acid." + item = /obj/item/seeds/random + price_min = 320 + price_max = 360 + stock_min = 2 + stock_max = 5 + availability_prob = 50 + +/datum/blackmarket_item/misc/smugglers_satchel + name = "Smuggler's Satchel" + desc = "This easily hidden satchel can become a versatile tool to anybody with the desire to keep certain items out of sight and out of mind." + item = /obj/item/storage/backpack/satchel/flat + price_min = 750 + price_max = 1000 + stock_max = 2 + availability_prob = 30 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/tools.dm b/code/modules/cargo/blackmarket/blackmarket_items/tools.dm new file mode 100644 index 0000000000..3da10b16fd --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/tools.dm @@ -0,0 +1,74 @@ +/datum/blackmarket_item/tool + category = "Tools" + +/datum/blackmarket_item/tool/caravan_wrench + name = "Experimental Wrench" + desc = "The extra fast and handy wrench you always wanted!" + item = /obj/item/wrench/caravan + stock = 1 + price_min = 400 + price_max = 800 + availability_prob = 20 + +/datum/blackmarket_item/tool/caravan_wirecutters + name = "Experimental Wirecutters" + desc = "The extra fast and handy wirecutters you always wanted!" + item = /obj/item/wirecutters/caravan + stock = 1 + price_min = 400 + price_max = 800 + availability_prob = 20 + +/datum/blackmarket_item/tool/caravan_screwdriver + name = "Experimental Screwdriver" + desc = "The extra fast and handy screwdriver you always wanted!" + item = /obj/item/screwdriver/caravan + stock = 1 + price_min = 400 + price_max = 800 + availability_prob = 20 + +/datum/blackmarket_item/tool/caravan_crowbar + name = "Experimental Crowbar" + desc = "The extra fast and handy crowbar you always wanted!" + item = /obj/item/crowbar/red/caravan + stock = 1 + price_min = 400 + price_max = 800 + availability_prob = 20 + +/datum/blackmarket_item/tool/binoculars + name = "Binoculars" + desc = "Increase your sight by 150% with this handy tool!" + item = /obj/item/binoculars + stock = 1 + price_min = 400 + price_max = 960 + availability_prob = 30 + +/datum/blackmarket_item/tool/riot_shield + name = "Riot Shield" + desc = "Protect yourself from an unexpected riot at your local police department!" + item = /obj/item/shield/riot + price_min = 450 + price_max = 650 + stock_max = 2 + availability_prob = 50 + +/datum/blackmarket_item/tool/thermite_bottle + name = "Thermite Bottle" + desc = "30 units of Thermite to assist in creating a quick access point or get away!" + item = /obj/item/reagent_containers/glass/bottle/thermite + price_min = 500 + price_max = 1500 + stock_max = 3 + availability_prob = 30 + +/datum/blackmarket_item/tool/science_goggles + name = "Science Goggles" + desc = "These glasses scan the contents of containers and projects their contents to the user in an easy-to-read format." + item = /obj/item/clothing/glasses/science + price_min = 150 + price_max = 200 + stock_max = 3 + availability_prob = 50 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm new file mode 100644 index 0000000000..4978d688ae --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm @@ -0,0 +1,41 @@ +/datum/blackmarket_item/weapon + category = "Weapons" + +/datum/blackmarket_item/weapon/bear_trap + name = "Bear Trap" + desc = "Get the janitor back at his own game with this affordable prank kit." + item = /obj/item/restraints/legcuffs/beartrap + price_min = 300 + price_max = 550 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/weapon/shotgun_dart + name = "Shotgun Dart" + desc = "These handy darts can be filled up with any chemical and be shot with a shotgun! \ + Prank your friends by shooting them with laughter! \ + Not recommended for commercial use." + item = /obj/item/ammo_casing/shotgun/dart + price_min = 10 + price_max = 50 + stock_min = 5 + stock_max = 30 + availability_prob = 40 + +/datum/blackmarket_item/weapon/bone_spear + name = "Bone Spear" + desc = "Authentic tribal spear, made from real bones! A steal at any price, especially if you're a caveman." + item = /obj/item/spear/bonespear + price_min = 200 + price_max = 300 + stock_max = 3 + availability_prob = 60 + +/datum/blackmarket_item/weapon/emp_grenade + name = "EMP Grenade" + desc = "Use this grenade for SHOCKING results!" + item = /obj/item/grenade/empgrenade + price_min = 100 + price_max = 400 + stock_max = 2 + availability_prob = 50 diff --git a/code/modules/cargo/blackmarket/blackmarket_market.dm b/code/modules/cargo/blackmarket/blackmarket_market.dm new file mode 100644 index 0000000000..ee95c82d77 --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_market.dm @@ -0,0 +1,40 @@ +/datum/blackmarket_market + var/name = "huh?" // Name for the market. + + var/list/shipping // Available shipping methods and prices, just leave the shipping method out that you don't want to have. + + // Automatic vars, do not touch these. + var/list/available_items = list() // Items available from this market, populated by SSblackmarket on initialization. + var/list/categories = list() // Item categories available from this market, only items which are in these categories can be gotten from this market. + +/datum/blackmarket_market/proc/add_item(datum/blackmarket_item/item) // Adds item to the available items and add it's category if it is not in categories yet. + if(!prob(initial(item.availability_prob))) + return FALSE + if(ispath(item)) + item = new item() + if(!(item.category in categories)) + categories += item.category + available_items[item.category] = list() + available_items[item.category] += item + return TRUE + +/datum/blackmarket_market/proc/purchase(item, category, method, obj/item/blackmarket_uplink/uplink, user) // Handles buying the item, this is mainly for future use and moving the code away from the uplink. + if(!istype(uplink) || !(method in shipping)) + return FALSE + for(var/datum/blackmarket_item/I in available_items[category]) + if(I.type != item) + continue + var/price = I.price + shipping[method] + if(uplink.money < price) // I can't get the price of the item and shipping in a clean way to the UI, so I have to do this. + to_chat("You don't have enough credits in [uplink] for [I] with [method] shipping.") + return FALSE + if(I.buy(uplink, user, method)) + uplink.money -= price + return TRUE + return FALSE + +/datum/blackmarket_market/blackmarket + name = "Black Market" + shipping = list(SHIPPING_METHOD_LTSRBT =50, + SHIPPING_METHOD_LAUNCH =10, + SHIPPING_METHOD_TELEPORT=75) diff --git a/code/modules/cargo/blackmarket/blackmarket_telepad.dm b/code/modules/cargo/blackmarket/blackmarket_telepad.dm new file mode 100644 index 0000000000..eb986a443a --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_telepad.dm @@ -0,0 +1,92 @@ +/obj/item/circuitboard/machine/ltsrbt + name = "LTSRBT (Machine Board)" + icon_state = "bluespacearray" + build_path = /obj/machinery/ltsrbt + req_components = list( + /obj/item/stack/ore/bluespace_crystal = 2, + /obj/item/stock_parts/subspace/ansible = 1, + /obj/item/stock_parts/micro_laser = 1, + /obj/item/stock_parts/scanning_module = 2) + def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) + +/obj/machinery/ltsrbt + name = "Long-To-Short-Range-Bluespace-Transciever" + desc = "The LTSRBT is a compact teleportation machine for recieving and sending items outside the station and inside the station.\nUsing teleportation frequencies stolen from NT it is near undetectable.\nEssential for any illegal market operations on NT stations.\n" + icon_state = "exonet_node" + circuit = /obj/item/circuitboard/machine/ltsrbt + density = TRUE + idle_power_usage = 200 + var/power_efficiency = 1 // Divider for power_usage_per_teleport. + var/power_usage_per_teleport = 10000 // Power used per teleported which gets divided by power_efficiency. + var/recharge_time = 0 // The time it takes for the machine to recharge before being able to send or recieve items. + var/recharge_cooldown = 0 // Current recharge progress. + var/base_recharge_time = 100 // Base recharge time which is used to get recharge_time. + var/recieving // Current /datum/blackmarket_purchase being recieved. + var/transmitting // Current /datum/blackmarket_purchase being sent to the target uplink. + var/list/datum/blackmarket_purchase/queue = list() // Queue for purchases that the machine should recieve and send. + +/obj/machinery/ltsrbt/Initialize() + . = ..() + SSblackmarket.telepads += src + +/obj/machinery/ltsrbt/Destroy() + SSblackmarket.telepads -= src + if(SSblackmarket.telepads.len) // Bye bye orders. + for(var/datum/blackmarket_purchase/P in queue) + SSblackmarket.queue_item(P) + . = ..() + +/obj/machinery/ltsrbt/RefreshParts() + recharge_time = base_recharge_time + for(var/obj/item/stock_parts/scanning_module/scan in component_parts) // On tier 4 recharge_time should be 20 and by default it is 80 as scanning modules should be tier 1. + recharge_time -= scan.rating * 10 + recharge_cooldown = recharge_time + power_efficiency = 0 + for(var/obj/item/stock_parts/micro_laser/laser in component_parts) + power_efficiency += laser.rating + if(!power_efficiency) // Shouldn't happen but you never know. + power_efficiency = 1 + +/obj/machinery/ltsrbt/proc/add_to_queue(datum/blackmarket_purchase/purchase) // Adds /datum/blackmarket_purchase to queue unless the machine is free, then it sets the purchase to be instantly recieved + if(!recharge_cooldown && !recieving && !transmitting) + recieving = purchase + return + queue += purchase + +/obj/machinery/ltsrbt/process() + if(stat & NOPOWER) + return + if(recharge_cooldown) + recharge_cooldown-- + return + var/turf/T = get_turf(src) + if(recieving) + var/datum/blackmarket_purchase/P = recieving + if(!P.item || ispath(P.item)) + P.item = P.entry.spawn_item(T) + else + var/atom/movable/M = P.item + M.forceMove(T) + use_power(power_usage_per_teleport / power_efficiency) + var/datum/effect_system/spark_spread/sparks = new + sparks.set_up(5, 1, get_turf(src)) + sparks.attach(P.item) + sparks.start() + recieving = null + transmitting = P + recharge_cooldown = recharge_time + return + else if(transmitting) + var/datum/blackmarket_purchase/P = transmitting + if(!P.item) + QDEL_NULL(transmitting) + if(!(P.item in T.contents)) + QDEL_NULL(transmitting) + return + do_teleport(P.item, get_turf(P.uplink)) + use_power(power_usage_per_teleport / power_efficiency) + QDEL_NULL(transmitting) + recharge_cooldown = recharge_time + return + if(queue.len) + recieving = pick_n_take(queue) diff --git a/code/modules/cargo/blackmarket/blackmarket_uplink.dm b/code/modules/cargo/blackmarket/blackmarket_uplink.dm new file mode 100644 index 0000000000..bcbed59b38 --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_uplink.dm @@ -0,0 +1,141 @@ +/obj/item/blackmarket_uplink + name = "Black Market Uplink" + icon = 'icons/obj/blackmarket.dmi' + icon_state = "uplink" + // UI variables. + var/ui_x = 720 + var/ui_y = 480 + var/viewing_category + var/viewing_market + var/selected_item + var/buying + var/money = 0 // How much money is inserted into the uplink. + var/list/accessible_markets = list(/datum/blackmarket_market/blackmarket) // List of typepaths for "/datum/blackmarket_market"s that this uplink can access. + +/obj/item/blackmarket_uplink/Initialize() + . = ..() + if(accessible_markets.len) + viewing_market = accessible_markets[1] + var/list/categories = SSblackmarket.markets[viewing_market].categories + if(categories && categories.len) + viewing_category = categories[1] + +/obj/item/blackmarket_uplink/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/holochip) || istype(I, /obj/item/stack/spacecash) || istype(I, /obj/item/coin)) + var/worth = I.get_item_credit_value() + if(!worth) + to_chat(user, "[I] doesn't seem to be worth anything!") + money += worth + to_chat(user, "You slot [I] into [src] and it reports a total of [money] credits inserted.") + qdel(I) + return + . = ..() + +/obj/item/blackmarket_uplink/AltClick(mob/user) + if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/amount_to_remove = FLOOR(input(user, "How much do you want to withdraw? Current Amount: [money]", "Withdraw Funds", 5) as num|null, 1) + if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + if(!amount_to_remove || amount_to_remove < 0) + return + if(amount_to_remove > money) + to_chat(user, "There is only [money] credits in [src]") + return + var/obj/item/holochip/holochip = new (user.drop_location(), amount_to_remove) + money -= amount_to_remove + holochip.name = "washed " + holochip.name + user.put_in_hands(holochip) + to_chat(user, "You withdraw [amount_to_remove] credits into a holochip.") + +/obj/item/blackmarket_uplink/ui_interact(mob/user, ui_key = "BlackMarketUplink", 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) + if(!ui) + ui = new(user, src, ui_key, name, ui_x, ui_y, master_ui, state) + ui.open() + +/obj/item/blackmarket_uplink/ui_data(mob/user) + var/list/data = list() + var/datum/blackmarket_market/market = viewing_market ? SSblackmarket.markets[viewing_market] : null + data["categories"] = market ? market.categories : null + data["delivery_methods"] = list() + if(market) + for(var/delivery in market.shipping) + data["delivery_methods"] += list(list("name" = delivery, "price" = market.shipping[delivery])) + data["money"] = money + data["buying"] = buying + data["items"] = list() + data["viewing_category"] = viewing_category + data["viewing_market"] = viewing_market + if(viewing_category && market) + if(market.available_items[viewing_category]) + for(var/datum/blackmarket_item/I in market.available_items[viewing_category]) + data["items"] += list(list( + "id" = I.type, + "name" = I.name, + "cost" = I.price, + "amount" = I.stock, + "desc" = I.desc || I.name + )) + return data + +/obj/item/blackmarket_uplink/ui_static_data(mob/user) + var/list/data = list() + data["delivery_method_description"] = SSblackmarket.shipping_method_descriptions + data["ltsrbt_built"] = SSblackmarket.telepads.len + data["markets"] = list() + for(var/M in accessible_markets) + var/datum/blackmarket_market/BM = SSblackmarket.markets[M] + data["markets"] += list(list( + "id" = M, + "name" = BM.name + )) + return data + +/obj/item/blackmarket_uplink/ui_act(action, params) + if(..()) + return + switch(action) + if("set_category") + if(isnull(params["category"])) + return + if(isnull(viewing_market)) + return + if(!(params["category"] in SSblackmarket.markets[viewing_market].categories)) + return + viewing_category = params["category"] + . = TRUE + if("set_market") + if(isnull(params["market"])) + return + var/market = text2path(params["market"]) + if(!(market in accessible_markets)) + return + viewing_market = market + var/list/categories = SSblackmarket.markets[viewing_market].categories + if(categories && categories.len) + viewing_category = categories[1] + else + viewing_category = null + . = TRUE + if("select") + if(isnull(params["item"])) + return + var/item = text2path(params["item"]) + selected_item = item + buying = TRUE + . = TRUE + if("cancel") + selected_item = null + buying = FALSE + . = TRUE + if("buy") + if(isnull(params["method"])) + return + if(isnull(selected_item)) + buying = FALSE + return + var/datum/blackmarket_market/market = SSblackmarket.markets[viewing_market] + market.purchase(selected_item, viewing_category, params["method"], src, usr) + buying = FALSE + selected_item = null diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 2943130a19..9202fd1f81 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -171,11 +171,11 @@ var/worth = 10 worth += C.air_contents.get_moles(/datum/gas/bz)*3 worth += C.air_contents.get_moles(/datum/gas/stimulum)*25 - worth += C.air_contents.get_moles(/datum/gas/hypernoblium)*1000 + worth += C.air_contents.get_moles(/datum/gas/hypernoblium)*20 worth += C.air_contents.get_moles(/datum/gas/miasma)*2 worth += C.air_contents.get_moles(/datum/gas/tritium)*7 worth += C.air_contents.get_moles(/datum/gas/pluoxium)*6 - worth += C.air_contents.get_moles(/datum/gas/nitryl)*30 + worth += C.air_contents.get_moles(/datum/gas/nitryl)*10 return worth diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index 4fa6a4eade..ad9fa2018e 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -16,7 +16,7 @@ errors |= MANIFEST_ERROR_ITEM /obj/item/paper/fluff/jobs/cargo/manifest/proc/is_approved() - return stamped && stamped.len && !is_denied() + return stamped?.len && !is_denied() /obj/item/paper/fluff/jobs/cargo/manifest/proc/is_denied() return stamped && ("stamp-deny" in stamped) @@ -49,6 +49,7 @@ P.info += "

[station_name()] Supply Requisition

" P.info += "
" P.info += "Order #[id]
" + P.info += "Time of Order: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]
" P.info += "Item: [pack.name]
" P.info += "Access Restrictions: [get_access_desc(pack.access)]
" P.info += "Requested by: [orderer]
" @@ -68,10 +69,10 @@ P.name = "shipping manifest - [packname?"#[id] ([pack.name])":"(Grouped Item Crate)"]" P.info += "

[command_name()] Shipping Manifest

" P.info += "
" - if(id && !(id == "Cargo")) + if(owner && !(owner == "Cargo")) P.info += "Direct purchase from [owner]
" P.name += " - Purchased by [owner]" - P.info += "Order #[id]
" + P.info += "Order[packname?"":"s"]: [id]
" P.info += "Destination: [station_name]
" if(packname) P.info += "Item: [packname]
" @@ -82,8 +83,11 @@ var/obj/structure/closet/C = container ignore_this += C.lockerelectronics for(var/atom/movable/AM in container.contents - ignore_this) - if((P.errors & MANIFEST_ERROR_CONTENTS) && prob(50)) - continue + if((P.errors & MANIFEST_ERROR_CONTENTS)) + if(prob(50)) + P.info += "
  • [AM.name]
  • " + else + continue P.info += "
  • [AM.name]
  • " P.info += "" P.info += "

    Stamp below to confirm receipt of goods:

    " @@ -94,7 +98,7 @@ /obj/structure/closet/crate/large, /obj/structure/closet/secure_closet/goodies )) - if(blacklisted_error[container.type]) + if(is_type_in_list(container, blacklisted_error)) P.errors &= ~MANIFEST_ERROR_ITEM else var/lost = max(round(container.contents.len / 10), 1) @@ -108,15 +112,23 @@ var/obj/structure/closet/crate/C = container C.manifest = P C.update_icon() + else + // manifest goes in if it's not a crate + container.contents += P return P /datum/supply_order/proc/generate(atom/A) + var/account_holder + if(paying_account) + account_holder = paying_account.account_holder + else + account_holder = "Cargo" var/obj/structure/closet/crate/C = pack.generate(A, paying_account) - generateManifest(C, paying_account, pack) + generateManifest(C, account_holder, pack) return C -/datum/supply_order/proc/generateCombo(var/miscbox, var/misc_own, var/misc_contents) +/datum/supply_order/proc/generateCombo(miscbox, misc_own, misc_contents) for (var/I in misc_contents) new I(miscbox) generateManifest(miscbox, misc_own, "") diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index a158f0f1c1..985c827e65 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -434,6 +434,17 @@ /obj/item/stack/tile/noslip/thirty) crate_name = "high-traction floor tiles crate" +/datum/supply_pack/misc/blackmarket_telepad + name = "Black Market LTSRBT" + desc = "Need a faster and better way of transporting your illegal goods from and to the station? Fear not, the Long-To-Short-Range-Bluespace-Transceiver (LTSRBT for short) is here to help. Contains a LTSRBT circuit, two bluespace crystals, and one ansible." + cost = 8000 + contraband = TRUE + contains = list(/obj/item/circuitboard/machine/ltsrbt, + /obj/item/stack/ore/bluespace_crystal/artificial, + /obj/item/stack/ore/bluespace_crystal/artificial, + /obj/item/stock_parts/subspace/ansible) + crate_name = "crate" + ////////////////////////////////////////////////////////////////////////////// //////////////////////////////// Lewd Supplies /////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/cargo/packs/vending.dm b/code/modules/cargo/packs/vending.dm index e55f24d91e..6d978d629f 100644 --- a/code/modules/cargo/packs/vending.dm +++ b/code/modules/cargo/packs/vending.dm @@ -67,7 +67,7 @@ /datum/supply_pack/vending/hydro name = "Hydroponics Supply Crate" - desc = "Arnt you glad you dont have to do it the natural way? Contains a megaseed and nutrimax vending machine refill." + desc = "Aren't you glad you dont have to do it the natural way? Contains a megaseed and nutrimax vending machine refill." cost = 5000 contains = list(/obj/item/vending_refill/hydroseeds, /obj/item/vending_refill/hydronutrients) @@ -82,6 +82,14 @@ contains = list(/obj/item/vending_refill/kink) crate_name = "Kinkmate construction kit" +/datum/supply_pack/vending/barkbox + name = "Bark Box Supply Crate" + desc = "Running of out things to keep your pets happy?" + cost = 2000 + contraband = TRUE + contains = list(/obj/item/vending_refill/barkbox) + crate_name = "bark box supply crate" + /datum/supply_pack/vending/medical name = "Medical Vending Crate" desc = "Contains refills for medical vending machines." diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 90adf8e7ff..3d2264a593 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -130,26 +130,28 @@ /obj/structure/closet/supplypod/update_overlays() . = ..() - if (style == STYLE_INVISIBLE) + if(style == STYLE_INVISIBLE) return - if (rubble) + + if(rubble) . += rubble.getForeground(src) - if (style == STYLE_SEETHROUGH) - for (var/atom/A in contents) + + if(style == STYLE_SEETHROUGH) + for(var/atom/A in contents) var/mutable_appearance/itemIcon = new(A) itemIcon.transform = matrix().Translate(-1 * SUPPLYPOD_X_OFFSET, 0) . += itemIcon - for (var/t in turfs_in_cargo)//T is just a turf's type + for(var/t in turfs_in_cargo)//T is just a turf's type var/turf/turf_type = t var/mutable_appearance/itemIcon = mutable_appearance(initial(turf_type.icon), initial(turf_type.icon_state)) itemIcon.transform = matrix().Translate(-1 * SUPPLYPOD_X_OFFSET, 0) . += itemIcon return - if (opened) //We're opened means all we have to worry about is masking a decal if we have one - if (!decal) //We don't have a decal to mask + if(opened) //We're opened means all we have to worry about is masking a decal if we have one + if(!decal) //We don't have a decal to mask return - if (!door) //We have a decal but no door, so let's just add the decal + if(!door) //We have a decal but no door, so let's just add the decal . += decal return var/icon/masked_decal = new(icon, decal) //The decal we want to apply @@ -159,23 +161,25 @@ door_masker.Blend("#000000", ICON_SUBTRACT) masked_decal.Blend(door_masker, ICON_ADD) . += masked_decal - else //If we're closed - if (!door) //We have no door, lets see if we have a decal. If not, theres nothing we need to do - if (decal) - . += decal - return - else if (GLOB.podstyles[style][POD_SHAPE] != POD_SHAPE_NORML) //If we're not a normal pod shape (aka, if we don't have fins), just add the door without masking - . += door - else - var/icon/masked_door = new(icon, door) //The door we want to apply - var/icon/fin_masker = new(icon, "mask_[fin_mask]") //The fin shape we want to 'cut out' of the door - fin_masker.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 1,1,1,0, 0,0,0,1) - fin_masker.SwapColor("#ffffffff", null) - fin_masker.Blend("#000000", ICON_SUBTRACT) - masked_door.Blend(fin_masker, ICON_ADD) - . += masked_door - if (decal) + return + + //If we're closed + if(!door) //We have no door, lets see if we have a decal. If not, theres nothing we need to do + if(decal) . += decal + return + else if (GLOB.podstyles[style][POD_SHAPE] != POD_SHAPE_NORML) //If we're not a normal pod shape (aka, if we don't have fins), just add the door without masking + . += door + else + var/icon/masked_door = new(icon, door) //The door we want to apply + var/icon/fin_masker = new(icon, "mask_[fin_mask]") //The fin shape we want to 'cut out' of the door + fin_masker.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 1,1,1,0, 0,0,0,1) + fin_masker.SwapColor("#ffffffff", null) + fin_masker.Blend("#000000", ICON_SUBTRACT) + masked_door.Blend(fin_masker, ICON_ADD) + . += masked_door + if(decal) + . += decal /obj/structure/closet/supplypod/tool_interact(obj/item/W, mob/user) if(bluespace) //We dont want to worry about interacting with bluespace pods, as they are due to delete themselves soon anyways. @@ -192,7 +196,7 @@ /obj/structure/closet/supplypod/toggle(mob/living/user) return -/obj/structure/closet/supplypod/open(mob/living/user, force = TRUE) +/obj/structure/closet/supplypod/open(mob/living/user, force = FALSE) return /obj/structure/closet/supplypod/proc/handleReturnAfterDeparting(atom/movable/holder = src) @@ -550,9 +554,6 @@ var/obj/effect/pod_landingzone_effect/helper var/list/smoke_effects = new /list(13) -/obj/effect/ex_act() - return - /obj/effect/pod_landingzone/Initialize(mapload, podParam, single_order = null, clientman) . = ..() if (ispath(podParam)) //We can pass either a path for a pod (as expressconsoles do), or a reference to an instantiated pod (as the centcom_podlauncher does) @@ -647,4 +648,12 @@ desc = "This disk provides a firmware update to the Express Supply Console, granting the use of Nanotrasen's Bluespace Drop Pods to the supply department." icon = 'icons/obj/module.dmi' icon_state = "cargodisk" + // inhand_icon_state = "card-id" w_class = WEIGHT_CLASS_SMALL + +// let's not. +/obj/structure/closet/supplypod/handle_lock_addition() + return + +/obj/structure/closet/supplypod/handle_lock_removal() + return diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 16e1b45843..151b271d9e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -105,8 +105,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/be_random_body = 0 //whether we'll have a random body every round var/gender = MALE //gender of character (well duh) var/age = 30 //age of character - var/language = "Random" //bonus language - var/choselanguage = "Random" //language appearance var/underwear = "Nude" //underwear type var/undie_color = "FFFFFF" var/undershirt = "Nude" //undershirt type @@ -130,6 +128,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/custom_speech_verb = "default" //if your say_mod is to be something other than your races var/custom_tongue = "default" //if your tongue is to be something other than your races + var/additional_language = "None" //additional language your character has var/modified_limbs = list() //prosthetic/amputated limbs var/chosen_limb_id //body sprite selected to load for the users limbs, null means default, is sanitized when loaded @@ -277,10 +276,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Character Settings" dat += "Character Appearance" - dat += "Loadout" + dat += "Character Speech" + dat += "Loadout" dat += "Game Preferences" - dat += "Content Preferences" - dat += "Keybindings" + dat += "Content Preferences" + dat += "Keybindings" if(!path) dat += "
    Please create an account to save your preferences
    " @@ -328,7 +328,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Gender: [gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
    " dat += "Age: [age]
    " - dat += "Language: [choselanguage]
    " dat += "Special Names:
    " var/old_group @@ -485,13 +484,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if(use_skintones || mutant_colors) dat += "" - dat += APPEARANCE_CATEGORY_COLUMN - dat += "

    Speech preferences

    " - dat += "Custom Speech Verb:
    " - dat += "
    [custom_speech_verb]
    " - dat += "Custom Tongue:
    " - dat += "
    [custom_tongue]
    " - if(HAIR in pref_species.species_traits) dat += APPEARANCE_CATEGORY_COLUMN @@ -678,6 +670,36 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "" + if(3) + if(path) + var/savefile/S = new /savefile(path) + if(S) + dat += "
    " + var/name + var/unspaced_slots = 0 + for(var/i=1, i<=max_save_slots, i++) + unspaced_slots++ + if(unspaced_slots > 4) + dat += "
    " + unspaced_slots = 0 + S.cd = "/character[i]" + S["real_name"] >> name + if(!name) + name = "Character[i]" + dat += "[name] " + dat += "
    " + + dat += "" + dat += "
    " + dat += "

    Speech preferences

    " + dat += "Custom Speech Verb:
    " + dat += "[custom_speech_verb]
    " + dat += "Custom Tongue:
    " + dat += "[custom_tongue]
    " + dat += "Additional Language
    " + dat += "[additional_language]
    " + dat += "
    " + if (1) // Game Preferences dat += "" dat += "
    " dat += "

    General Settings

    " @@ -841,12 +863,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(days_remaining) dat += "Be [capitalize(i)]: \[IN [days_remaining] DAYS]
    " else - dat += "Be [capitalize(i)]: [(i in be_special) ? "Enabled" : "Disabled"]
    " + dat += "Be [i == ROLE_SYNDICATE ? "Antag": capitalize(i)]: [(i in be_special) ? "Enabled" : "Disabled"]
    " dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Enabled" : "Disabled"]
    " dat += "
    " - if(3) + if(4) //calculate your gear points from the chosen item gear_points = CONFIG_GET(number/initial_gear_points) var/list/chosen_gear = loadout_data["SAVE_[loadout_slot]"] @@ -965,7 +987,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    [loadout_item ? (loadout_item[LOADOUT_CUSTOM_DESCRIPTION] ? loadout_item[LOADOUT_CUSTOM_DESCRIPTION] : gear.description) : gear.description] Progress: [min(progress_made, unlockable.progress_required)]/[unlockable.progress_required]
    " - if(4) // Content preferences + if(5) // Content preferences dat += "
    " dat += "

    Fetish content prefs

    " dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
    " @@ -989,7 +1011,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Automatic Wagging: [(cit_toggles & NO_AUTO_WAG) ? "Disabled" : "Enabled"]
    " dat += "
    " dat += "
    " - if(5) // Custom keybindings + if(6) // Custom keybindings dat += "Keybindings: [(hotkeys) ? "Hotkeys" : "Input"]
    " dat += "Keybindings mode controls how the game behaves with tab and map/input focus.
    If it is on Hotkeys, the game will always attempt to force you to map focus, meaning keypresses are sent \ directly to the map instead of the input. You will still be able to use the command bar, but you need to tab to do it every time you click on the game map.
    \ @@ -2339,28 +2361,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["body_model"] = chosengender gender = chosengender - if("language") - choselanguage = input(user, "Select a language.", "Language", language) as null|anything in list("Beachtongue","Draconic","Dwarven", - "Chimpanzee","Space Sign Language","Random") - if(!choselanguage) - return - switch(choselanguage) - if("Rachidian") - language = /datum/language/arachnid - if("Beachtongue") - language = /datum/language/beachbum - if("Draconic") - language = /datum/language/draconic - if("Dwarven") - language = /datum/language/dwarf - if("Chimpanzee") - language = /datum/language/monkey - if("Space Sign Language") - language = /datum/language/signlanguage - if("Random") - language = pick(list("Rachidian", "Beachtongue","Draconic","Dwarven", - "Chimpanzee","Space Sign Language")) - if("body_size") var/new_body_size = input(user, "Choose your desired sprite size: (90-125%)\nWarning: This may make your character look distorted. Additionally, any size under 100% takes a 10% maximum health penalty", "Character Preference", features["body_size"]*100) as num|null if(new_body_size) @@ -2370,11 +2370,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/selected_custom_tongue = input(user, "Choose your desired tongue (none means your species tongue)", "Character Preference") as null|anything in GLOB.roundstart_tongues if(selected_custom_tongue) custom_tongue = selected_custom_tongue + if("speech_verb") var/selected_custom_speech_verb = input(user, "Choose your desired speech verb (none means your species speech verb)", "Character Preference") as null|anything in GLOB.speech_verbs if(selected_custom_speech_verb) custom_speech_verb = selected_custom_speech_verb + if("language") + var/selected_language = input(user, "Choose your desired additional language", "Character Preference") as null|anything in GLOB.roundstart_languages + if(selected_language) + additional_language = selected_language + if("bodysprite") var/selected_body_sprite = input(user, "Choose your desired body sprite", "Character Preference") as null|anything in pref_species.allowed_limb_ids if(selected_body_sprite) @@ -2909,6 +2915,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) new_custom_tongue.Insert(character) if(custom_speech_verb != "default") character.dna.species.say_mod = custom_speech_verb + if(additional_language && additional_language != "None") + var/language_entry = GLOB.roundstart_languages[additional_language] + if(language_entry) + character.grant_language(language_entry, TRUE, TRUE) //limb stuff, only done when initially spawning in if(initial_spawn) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 141346acde..812e8c4821 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -604,8 +604,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["body_model"] >> features["body_model"] S["body_size"] >> features["body_size"] S["age"] >> age - S["language"] >> language - S["choselanguage"] >> choselanguage S["hair_color"] >> hair_color S["facial_hair_color"] >> facial_hair_color S["eye_type"] >> eye_type @@ -626,6 +624,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["uplink_loc"] >> uplink_spawn_loc S["custom_speech_verb"] >> custom_speech_verb S["custom_tongue"] >> custom_tongue + S["additional_language"] >> additional_language S["feature_mcolor"] >> features["mcolor"] S["feature_lizard_tail"] >> features["tail_lizard"] S["feature_lizard_snout"] >> features["snout"] @@ -881,6 +880,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default") custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default") + additional_language = sanitize_inlist(additional_language, GLOB.roundstart_languages, "None") security_records = copytext(security_records, 1, MAX_FLAVOR_LEN) medical_records = copytext(medical_records, 1, MAX_FLAVOR_LEN) @@ -964,8 +964,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["body_model"] , features["body_model"]) WRITE_FILE(S["body_size"] , features["body_size"]) WRITE_FILE(S["age"] , age) - WRITE_FILE(S["language"] , language) - WRITE_FILE(S["choselanguage"] , choselanguage) WRITE_FILE(S["hair_color"] , hair_color) WRITE_FILE(S["facial_hair_color"] , facial_hair_color) WRITE_FILE(S["eye_type"] , eye_type) @@ -987,6 +985,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["species"] , pref_species.id) WRITE_FILE(S["custom_speech_verb"] , custom_speech_verb) WRITE_FILE(S["custom_tongue"] , custom_tongue) + WRITE_FILE(S["additional_language"] , additional_language) // records WRITE_FILE(S["security_records"] , security_records) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index b0af7aa0d5..28a3343ae6 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -190,6 +190,12 @@ tagname = stripped_input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot", MAX_NAME_LEN) name = "[initial(name)] - [tagname]" +/obj/item/clothing/neck/petcollar/ribbon + name = "ribbon pet collar" + icon_state = "ribboncollar" + poly_states = 2 + poly_colors = list("#454545", "#292929") + /obj/item/clothing/neck/petcollar/leather name = "leather pet collar" icon_state = "leathercollar" @@ -225,6 +231,12 @@ return ..() +/obj/item/clothing/neck/petcollar/locked/ribbon + name = "ribbon pet collar" + icon_state = "ribboncollar" + poly_states = 2 + poly_colors = list("#454545", "#292929") + /obj/item/clothing/neck/petcollar/locked/leather name = "leather pet collar" icon_state = "leathercollar" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index a27d82a544..d8e0466069 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -94,6 +94,7 @@ icon_state = "sec_dep_jacket" item_state = "sec_dep_jacket" armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) + allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/toggle/labcoat/depjacket/sup name = "supply jacket" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 3e72765234..354d488703 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -567,6 +567,26 @@ attack_verb = list("warned", "cautioned", "smashed") armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +/obj/item/clothing/suit/petharness + name = "pet harness" + desc = "For your pet! Or not! Has a little clip on the back." + icon_state = "petharness" + item_state = "petharness" + body_parts_covered = NONE + mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON + allowed = /obj/item/toy/fluff + +/obj/item/clothing/suit/petharness/mesh + name = "mesh pet harness" + desc = "For your pet! Or not! Has some mesh to cover up your more sensitive bits and a little clip on the back." + icon_state = "petharness_mesh" + item_state = "petharness_mesh" + body_parts_covered = CHEST + +/obj/item/clothing/suit/petharness/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#0056D9", "#959595"), 2, _flags = POLYCHROMIC_ACTION) + // WINTER COATS /obj/item/clothing/suit/hooded/wintercoat diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 98d6809d64..4e29483846 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -4,6 +4,8 @@ actions_types = list(/datum/action/item_action/toggle_hood) var/obj/item/clothing/head/hooded/hood var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this + ///Alternative mode for hiding the hood, instead of storing the hood in the suit it qdels it, useful for when you deal with hooded suit with storage. + var/alternative_mode = FALSE /obj/item/clothing/suit/hooded/Initialize() . = ..() @@ -43,6 +45,8 @@ H.transferItemToLoc(hood, src, TRUE) H.update_inv_wear_suit() else + if(alternative_mode) + QDEL_NULL(hood) hood.forceMove(src) update_icon() diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 72af4e9572..d7ee4de62c 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -59,6 +59,12 @@ has_sensor = TRUE armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5) +/obj/item/clothing/under/syndicate/cosmetic/skirt + name = "tactitool skirtleneck" + icon_state = "tactifool_skirt" + fitted = FEMALE_UNIFORM_TOP + mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON + /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" desc = "A double seamed tactical turtleneck disguised as a civilian grade silk suit. Intended for the most formal operator. The collar is really sharp." diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm index 25a5cb2ffa..41aab20a11 100755 --- a/code/modules/events/abductor.dm +++ b/code/modules/events/abductor.dm @@ -3,7 +3,7 @@ typepath = /datum/round_event/ghost_role/abductor weight = 10 max_occurrences = 1 - min_players = 20 + min_players = 30 gamemode_blacklist = list("nuclear","wizard","revolution","dynamic") /datum/round_event/ghost_role/abductor diff --git a/code/modules/events/supermatter_surge.dm b/code/modules/events/supermatter_surge.dm index d54fc4dcd2..6b0a093440 100644 --- a/code/modules/events/supermatter_surge.dm +++ b/code/modules/events/supermatter_surge.dm @@ -13,11 +13,27 @@ var/power = 2000 /datum/round_event/supermatter_surge/setup() - power = rand(200,4000) + if(prob(70)) + power = rand(200,100000) + else + power = rand(200,200000) /datum/round_event/supermatter_surge/announce() - if(power > 800 || prob(round(power/8))) - priority_announce("Class [round(power/500) + 1] supermatter surge detected. Intervention may be required.", "Anomaly Alert") + var/severity = "" + switch(power) + if(-INFINITY to 100000) + var/low_threat_perc = 100-round(100*((power-200)/(100000-200))) + if(prob(low_threat_perc)) + if(prob(low_threat_perc)) + severity = "low; the supermatter should return to normal operation shortly." + else + severity = "medium; the supermatter should return to normal operation, but check NT CIMS to ensure this." + else + severity = "high; if the supermatter's cooling is not fortified, coolant may need to be added." + if(100000 to INFINITY) + severity = "extreme; emergency action is likely to be required even if coolant loop is fine." + if(power > 20000 || prob(round(power/200))) + priority_announce("Supermatter surge detected. Estimated severity is [severity]", "Anomaly Alert") /datum/round_event/supermatter_surge/start() GLOB.main_supermatter_engine.matter_power += power diff --git a/code/modules/events/supernova.dm b/code/modules/events/supernova.dm index 9766ab6212..a109d484e9 100644 --- a/code/modules/events/supernova.dm +++ b/code/modules/events/supernova.dm @@ -17,7 +17,7 @@ announceWhen = rand(4, 60) supernova = new SSsun.suns += supernova - if(prob(50)) + if(prob(20)) power = rand(5,100) / 100 else power = rand(5,5000) / 100 @@ -33,9 +33,9 @@ /datum/round_event/supernova/start() - supernova.power_mod = 0.00000002 * power + supernova.power_mod = 0.001 * power var/explosion_size = rand(1000000000, 999999999) - var/turf/epicenter = get_turf_in_angle(supernova.azimuth, SSmapping.get_station_center(), world.maxx / 2) + var/turf/epicenter = get_turf_in_angle(supernova.azimuth, SSmapping.get_station_center(), round(world.maxx * 0.45)) for(var/array in GLOB.doppler_arrays) var/obj/machinery/doppler_array/A = array A.sense_explosion(epicenter, explosion_size/2, explosion_size, 0, 107000000 / power, explosion_size/2, explosion_size, 0) @@ -46,13 +46,13 @@ sucker_light.give_home_power() /datum/round_event/supernova/tick() - var/midpoint = (endWhen-startWhen)/2 + var/midpoint = round((endWhen-startWhen)/2) switch(activeFor) if(startWhen to midpoint) supernova.power_mod = min(supernova.power_mod*1.2, power) if(endWhen-10 to endWhen) supernova.power_mod /= 4 - if(prob(round(supernova.power_mod / 2)) && storm_count < 3 && !SSweather.get_weather_by_type(/datum/weather/rad_storm)) + if(prob(round(supernova.power_mod / 2)) && storm_count < 4 && !SSweather.get_weather_by_type(/datum/weather/rad_storm)) SSweather.run_weather(/datum/weather/rad_storm/supernova) storm_count++ @@ -62,6 +62,6 @@ /datum/weather/rad_storm/supernova weather_duration_lower = 50 - weather_duration_lower = 100 + weather_duration_upper = 100 telegraph_duration = 100 radiation_intensity = 50 diff --git a/code/modules/events/travelling_trader.dm b/code/modules/events/travelling_trader.dm index 2f7b9dbea5..f7cbba2e4a 100644 --- a/code/modules/events/travelling_trader.dm +++ b/code/modules/events/travelling_trader.dm @@ -200,7 +200,7 @@ return FALSE /mob/living/carbon/human/dummy/travelling_trader/animal_hunter/give_reward(mob/giver) //the reward is actually given in a jar, because releasing it onto the station might be a bad idea - var/obj/item/pet_carrier/bluespace/jar = new(get_turf(src)) + var/obj/item/pet_carrier/bluespace/single_use/jar = new(get_turf(src)) var/chosen_animal = pickweight(possible_rewards) var/mob/living/new_animal = new chosen_animal(jar) if(giver && giver.tag) diff --git a/code/modules/fields/infinite_void.dm b/code/modules/fields/infinite_void.dm new file mode 100644 index 0000000000..8a60976b43 --- /dev/null +++ b/code/modules/fields/infinite_void.dm @@ -0,0 +1,169 @@ + +/obj/effect/domain_expansion + anchored = TRUE + name = "infinite void" + desc = "Once inside, the user's cursed techniques are improved and cannot be avoided." + layer = FLY_LAYER + pixel_x = -64 + pixel_y = -64 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + var/list/immune = list() // the one who creates the domain_expansion is immune, which includes wizards and the dead slime you murdered to make this chronofield + var/turf/target + var/freezerange = 2 + var/duration = 140 + var/datum/proximity_monitor/advanced/domain_expansion/chronofield + alpha = 125 + var/check_anti_magic = FALSE + var/check_holy = FALSE + +/obj/effect/domain_expansion/Initialize(mapload, radius, time, list/immune_atoms, start = TRUE) //Immune atoms assoc list atom = TRUE + . = ..() + if(!isnull(time)) + duration = time + if(!isnull(radius)) + freezerange = radius + for(var/A in immune_atoms) + immune[A] = TRUE + for(var/mob/living/L in GLOB.player_list) + if(locate(/obj/effect/proc_holder/spell/aoe_turf/domain_expansion) in L.mind.spell_list) //People who can stop time are immune to its effects + immune[L] = TRUE + for(var/mob/living/simple_animal/hostile/guardian/G in GLOB.parasites) + if(G.summoner && locate(/obj/effect/proc_holder/spell/aoe_turf/domain_expansion) in G.summoner.mind.spell_list) //It would only make sense that a person's stand would also be immune. + immune[G] = TRUE + if(start) + INVOKE_ASYNC(src, .proc/domain_expansion) + +/obj/effect/domain_expansion/Destroy() + qdel(chronofield) + return ..() + +/obj/effect/domain_expansion/proc/domain_expansion() + target = get_turf(src) + chronofield = make_field(/datum/proximity_monitor/advanced/domain_expansion, list("current_range" = freezerange, "host" = src, "immune" = immune, "check_anti_magic" = check_anti_magic, "check_holy" = check_holy)) + QDEL_IN(src, duration) + +/obj/effect/domain_expansion/magic + check_anti_magic = TRUE + +/datum/proximity_monitor/advanced/domain_expansion + name = "chronofield" + setup_field_turfs = TRUE + field_shape = FIELD_SHAPE_RADIUS_SQUARE + requires_processing = TRUE + var/list/immune = list() + var/list/frozen_things = list() + var/list/frozen_mobs = list() //cached separately for processing + var/list/frozen_structures = list() //Also machinery, and only frozen aestethically + var/list/frozen_turfs = list() //Only aesthetically + var/check_anti_magic = FALSE + var/check_holy = FALSE + + var/static/list/global_frozen_atoms = list() + +/datum/proximity_monitor/advanced/domain_expansion/Destroy() + unfreeze_all() + return ..() + +/datum/proximity_monitor/advanced/domain_expansion/field_turf_crossed(atom/movable/AM) + freeze_atom(AM) + +/datum/proximity_monitor/advanced/domain_expansion/proc/freeze_atom(atom/movable/A) + if(immune[A] || global_frozen_atoms[A] || !istype(A)) + return FALSE + if(ismob(A)) + var/mob/M = A + if(M.anti_magic_check(check_anti_magic, check_holy)) + immune[A] = TRUE + return + var/frozen = TRUE + if(isliving(A)) + freeze_mob(A) + else if((ismachinery(A) && !istype(A, /obj/machinery/light)) || isstructure(A)) //Special exception for light fixtures since recoloring causes them to change light + freeze_structure(A) + else + frozen = FALSE + if(A.throwing) + freeze_throwing(A) + frozen = TRUE + if(!frozen) + return + + frozen_things[A] = A.move_resist + A.move_resist = INFINITY + global_frozen_atoms[A] = src + into_the_negative_zone(A) + RegisterSignal(A, COMSIG_MOVABLE_PRE_MOVE, .proc/unfreeze_atom) + RegisterSignal(A, COMSIG_ITEM_PICKUP, .proc/unfreeze_atom) + + return TRUE + +/datum/proximity_monitor/advanced/domain_expansion/proc/unfreeze_all() + for(var/i in frozen_things) + unfreeze_atom(i) + for(var/T in frozen_turfs) + unfreeze_turf(T) + +/datum/proximity_monitor/advanced/domain_expansion/proc/unfreeze_atom(atom/movable/A) + SIGNAL_HANDLER + + if(A.throwing) + unfreeze_throwing(A) + if(isliving(A)) + unfreeze_mob(A) + + UnregisterSignal(A, COMSIG_MOVABLE_PRE_MOVE) + UnregisterSignal(A, COMSIG_ITEM_PICKUP) + escape_the_negative_zone(A) + A.move_resist = frozen_things[A] + frozen_things -= A + global_frozen_atoms -= A + +/datum/proximity_monitor/advanced/domain_expansion/proc/freeze_throwing(atom/movable/AM) + var/datum/thrownthing/T = AM.throwing + T.paused = TRUE + +/datum/proximity_monitor/advanced/domain_expansion/proc/unfreeze_throwing(atom/movable/AM) + var/datum/thrownthing/T = AM.throwing + if(T) + T.paused = FALSE + +/datum/proximity_monitor/advanced/domain_expansion/proc/freeze_turf(turf/T) + into_the_negative_zone(T) + frozen_turfs += T + +/datum/proximity_monitor/advanced/domain_expansion/proc/unfreeze_turf(turf/T) + escape_the_negative_zone(T) + +/datum/proximity_monitor/advanced/domain_expansion/proc/freeze_structure(obj/O) + into_the_negative_zone(O) + frozen_structures += O + +/datum/proximity_monitor/advanced/domain_expansion/proc/unfreeze_structure(obj/O) + escape_the_negative_zone(O) + +/datum/proximity_monitor/advanced/domain_expansion/process() + for(var/i in frozen_mobs) + var/mob/living/m = i + m.apply_status_effect(/datum/status_effect/eldritch/void) + +/datum/proximity_monitor/advanced/domain_expansion/setup_field_turf(turf/T) + for(var/i in T.contents) + freeze_atom(i) + freeze_turf(T) + return ..() + +/datum/proximity_monitor/advanced/domain_expansion/proc/freeze_mob(mob/living/L) + frozen_mobs += L + L.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/domain) + +/datum/proximity_monitor/advanced/domain_expansion/proc/unfreeze_mob(mob/living/L) + L.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/domain) + frozen_mobs -= L + +//you don't look quite right, is something the matter? +/datum/proximity_monitor/advanced/domain_expansion/proc/into_the_negative_zone(atom/A) + A.add_atom_colour(list(-0.6,0,0,0, 0,-0.6,0,0, 0,0,-1,0, 0,0,0,1, 0.5,0.5,1,0), TEMPORARY_COLOUR_PRIORITY) + +//let's put some colour back into your cheeks +/datum/proximity_monitor/advanced/domain_expansion/proc/escape_the_negative_zone(atom/A) + A.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 94960a2658..8c5631336e 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -466,6 +466,17 @@ foodtype = GRAIN | SUGAR dunkable = TRUE +/obj/item/reagent_containers/food/snacks/dogtreat + name = "dog treat" + desc = "It's a scooby-snack. Right?" + icon_state = "dogtreat" + bitesize = 1 + bonus_reagents = list(/datum/reagent/consumable/nutriment = 1) + list_reagents = list(/datum/reagent/consumable/nutriment = 1) + filling_color = "#635444" + tastes = list("meat" = 1, "dough" = 1) + foodtype = GRAIN | MEAT + /obj/item/reagent_containers/food/snacks/donkpocket name = "\improper Donk-pocket" desc = "The food of choice for the seasoned traitor." diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 6c418ab612..5343595f89 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -214,6 +214,17 @@ result = /obj/item/reagent_containers/food/snacks/cracker subcategory = CAT_PASTRY +/datum/crafting_recipe/food/dogtreat + time = 15 + name = "Dog Treat" + reqs = list( + /datum/reagent/consumable/sodiumchloride = 1, + /obj/item/reagent_containers/food/snacks/meat/cutlet = 1, + /obj/item/reagent_containers/food/snacks/pastrybase = 1, + ) + result = /obj/item/reagent_containers/food/snacks/dogtreat + subcategory = CAT_PASTRY + /datum/crafting_recipe/food/fortunecookie time = 15 name = "Fortune cookie" diff --git a/code/modules/language/arachnid.dm b/code/modules/language/arachnid.dm index 92ea47781e..d021e5a35b 100644 --- a/code/modules/language/arachnid.dm +++ b/code/modules/language/arachnid.dm @@ -9,6 +9,7 @@ flags = NO_STUTTER | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD icon_state = "arachnid" + chooseable_roundstart = TRUE /datum/language/arachnid/scramble(input) . = prob(65) ? "wiff" : "thump" diff --git a/code/modules/language/draconic.dm b/code/modules/language/draconic.dm index aaa998c2c0..ed72252773 100644 --- a/code/modules/language/draconic.dm +++ b/code/modules/language/draconic.dm @@ -18,3 +18,4 @@ ) icon_state = "lizard" default_priority = 90 + chooseable_roundstart = TRUE diff --git a/code/modules/language/dwarven.dm b/code/modules/language/dwarven.dm index 17a4674415..aded22cd6f 100644 --- a/code/modules/language/dwarven.dm +++ b/code/modules/language/dwarven.dm @@ -11,3 +11,4 @@ default_priority = 90 icon_state = "dwarf" + chooseable_roundstart = TRUE diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 42b439ba03..f65d928301 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -22,6 +22,8 @@ var/list/scramble_cache = list() var/default_priority = 0 // the language that an atom knows with the highest "default_priority" is selected by default. + var/chooseable_roundstart = FALSE // can we pick it from the customization menu as an additional language? + // if you are seeing someone speak popcorn language, then something is wrong. var/icon = 'icons/misc/language.dmi' var/icon_state = "popcorn" diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm index 53e598b02b..6f3da838bc 100644 --- a/code/modules/language/monkey.dm +++ b/code/modules/language/monkey.dm @@ -10,3 +10,4 @@ default_priority = 80 icon_state = "animal" + chooseable_roundstart = TRUE diff --git a/code/modules/language/mushroom.dm b/code/modules/language/mushroom.dm index b896d11449..038ee0f905 100644 --- a/code/modules/language/mushroom.dm +++ b/code/modules/language/mushroom.dm @@ -9,3 +9,4 @@ sentence_chance = 0 default_priority = 80 syllables = list("poof", "pff", "pFfF", "piff", "puff", "pooof", "pfffff", "piffpiff", "puffpuff", "poofpoof", "pifpafpofpuf") + chooseable_roundstart = TRUE diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm index cca56ca933..6b7b1c366d 100644 --- a/code/modules/language/slime.dm +++ b/code/modules/language/slime.dm @@ -10,3 +10,4 @@ default_priority = 70 icon_state = "slime" + chooseable_roundstart = TRUE diff --git a/code/modules/language/sylvan.dm b/code/modules/language/sylvan.dm index 3bbf5f6afd..a1ac6725b9 100644 --- a/code/modules/language/sylvan.dm +++ b/code/modules/language/sylvan.dm @@ -16,3 +16,4 @@ ) icon_state = "plant" default_priority = 90 + chooseable_roundstart = TRUE diff --git a/code/modules/language/voltaic.dm b/code/modules/language/voltaic.dm index ead7fe7c7f..9a64f56889 100644 --- a/code/modules/language/voltaic.dm +++ b/code/modules/language/voltaic.dm @@ -12,3 +12,4 @@ ) icon_state = "volt" default_priority = 90 + chooseable_roundstart = TRUE diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 6af1c2118c..ba61169aac 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -928,7 +928,10 @@ ghost.ManualFollow(src) /obj/item/melee/ghost_sword/process() - ghost_check() + force = 0 + var/ghost_counter = ghost_check() + + force = clamp((ghost_counter * 4), 0, 75) /obj/item/melee/ghost_sword/proc/recursive_orbit_collect(atom/A, list/L) for(var/i in A.orbiters?.orbiters) @@ -1282,8 +1285,8 @@ if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one! chaser_timer = world.time + chaser_cooldown var/obj/effect/temp_visual/hierophant/chaser/C = new(get_turf(user), user, target, chaser_speed, friendly_fire_check) - C.damage = 30 - C.monster_damage_boost = FALSE + C.damage = 15 + C.monster_damage_boost = TRUE log_combat(user, target, "fired a chaser at", src) else INVOKE_ASYNC(src, .proc/cardinal_blasts, T, user) //otherwise, just do cardinal blast @@ -1399,10 +1402,10 @@ new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, user) for(var/t in RANGE_TURFS(1, T)) var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, user, TRUE) //blasts produced will not hurt allies - B.damage = 30 + B.damage = 15 for(var/t in RANGE_TURFS(1, source)) var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, user, TRUE) //but absolutely will hurt enemies - B.damage = 30 + B.damage = 15 for(var/mob/living/L in range(1, source)) INVOKE_ASYNC(src, .proc/teleport_mob, source, L, T, user) //regardless, take all mobs near us along sleep(6) //at this point the blasts detonate @@ -1463,8 +1466,8 @@ if(!J) return var/obj/effect/temp_visual/hierophant/blast/B = new(J, user, friendly_fire_check) - B.damage = 30 - B.monster_damage_boost = FALSE + B.damage = 15 + B.monster_damage_boost = TRUE previousturf = J J = get_step(previousturf, dir) @@ -1476,7 +1479,7 @@ sleep(2) for(var/t in RANGE_TURFS(1, T)) var/obj/effect/temp_visual/hierophant/blast/B = new(t, user, friendly_fire_check) - B.damage = 15 //keeps monster damage boost due to lower damage + B.damage = 15 //keeps monster damage boost due to lower damage (now added to all damage due to reduction to 15, 30dmg 50AP isn't cool) //Just some minor stuff diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm index 0c22a85886..a4bd0afdcb 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm @@ -477,6 +477,10 @@ name = "Messy" icon_state = "hair_messy" +/datum/sprite_accessory/hair/messy2 + name = "Messy2" + icon_state = "hair_messy2" + /datum/sprite_accessory/hair/modern name = "Modern" icon_state = "hair_modern" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f143f6302d..6f5109c90b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1237,7 +1237,7 @@ if(user.incapacitated() || !user.Adjacent(src)) return FALSE if(W && user.a_intent == INTENT_HELP && W.can_give()) - user.give() + user.give(src) return TRUE /mob/living/carbon/verb/give_verb() @@ -1253,4 +1253,4 @@ var/obj/item/I = usr.get_active_held_item() var/mob/living/carbon/C = usr if(I.can_give()) - C.give() + C.give(src) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 6af171568b..31ab636ceb 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -41,10 +41,10 @@ . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." //head - if(head) + if(head && !(head.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." //suit/armor - if(wear_suit) + if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." //suit/armor storage if(s_store && !(SLOT_S_STORE in obscured)) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 5f30d902b1..3e65bb6e66 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -115,13 +115,13 @@ . = ..() if(!.) return + if(HAS_TRAIT(src, TRAIT_NOGUNS)) + to_chat(src, "You can't bring yourself to use a ranged weapon!") + return FALSE if(G.trigger_guard == TRIGGER_GUARD_NORMAL) if(HAS_TRAIT(src, TRAIT_CHUNKYFINGERS)) to_chat(src, "Your meaty finger is much too large for the trigger guard!") return FALSE - if(HAS_TRAIT(src, TRAIT_NOGUNS)) - to_chat(src, "Your fingers don't fit in the trigger guard!") - return FALSE /mob/living/carbon/human/proc/get_bank_account() RETURN_TYPE(/datum/bank_account) diff --git a/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm b/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm index ed3c7e21d4..1aac2fd02e 100644 --- a/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm +++ b/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm @@ -37,11 +37,11 @@ to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") return if(IsAvailable()) - transforming = TRUE UpdateButtonIcon() var/mutcolor = owner.get_ability_property(INNATE_ABILITY_SLIME_BLOBFORM, PROPERTY_BLOBFORM_COLOR) || ("#" + H.dna.features["mcolor"]) if(!is_puddle) if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle + transforming = TRUE is_puddle = TRUE //so we know which transformation to use when its used ADD_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT) owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 75aff774ce..fba6ecd40c 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -625,7 +625,7 @@ say_mod = "clicks" limbs_id = "clockgolem" info_text = "As a Clockwork Golem, you are faster than other types of golems, and are capable of using guns. On death, you will break down into scrap." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES,NOGENITALS,NOAROUSAL) + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES,NOGENITALS,NOAROUSAL,ROBOTIC_LIMBS) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID @@ -667,6 +667,10 @@ /datum/species/golem/clockwork/no_scrap //These golems are created through the herald's beacon and leave normal corpses on death. id = "clockwork golem servant" + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES,NOSTOMACH,NOLIVER,NOGENITALS,NOAROUSAL,NOTRANSSTING,ROBOTIC_LIMBS,HAS_BONE) + inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID + inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_NOHUNGER,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) + inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID armor = 15 //Balance reasons make this armor weak no_equip = list() nojumpsuit = FALSE @@ -675,6 +679,8 @@ dangerous_existence = TRUE random_eligible = FALSE info_text = "As a Clockwork Golem Servant, you are faster than other types of golems, and are capable of using guns." //warcult golems leave a corpse + gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless) + /datum/species/golem/cloth name = "Cloth Golem" diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 89b3d603ea..5dc33c3778 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -3,7 +3,7 @@ id = SPECIES_VAMPIRE default_color = "FFFFFF" species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,DRINKSBLOOD,HAS_FLESH,HAS_BONE) - inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH) + inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH,TRAIT_NOMARROW) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutant_bodyparts = list("mcolor" = "FFFFFF", "tail_human" = "None", "ears" = "None", "deco_wings" = "None") exotic_bloodtype = "U" @@ -53,10 +53,11 @@ C.adjustOxyLoss(-4) C.adjustCloneLoss(-4) return - C.blood_volume -= 0.75 //Will take roughly 19.5 minutes to die from standard blood volume, roughly 83 minutes to die from max blood volume. - if(C.blood_volume <= (BLOOD_VOLUME_SURVIVE*C.blood_ratio)) - to_chat(C, "You ran out of blood!") - C.dust() + if(C.blood_volume > 0.5) + C.blood_volume -= 0.5 //Will take roughly 19.5 minutes to die from standard blood volume, roughly 83 minutes to die from max blood volume. + else + C.dust(FALSE, TRUE) + var/area/A = get_area(C) if(istype(A, /area/chapel) && C.mind?.assigned_role != "Chaplain") to_chat(C, "You don't belong here!") @@ -125,7 +126,7 @@ . = ..() var/obj/item/organ/heart/vampire/darkheart = getorgan(/obj/item/organ/heart/vampire) if(darkheart) - . += "Current blood level: [blood_volume]/[BLOOD_VOLUME_MAXIMUM]." + . += "Current blood level: [blood_volume]/[BLOOD_VOLUME_MAXIMUM]." /obj/item/organ/heart/vampire diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index a6453e58b7..0ce5af12b9 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -3,7 +3,7 @@ * Splits off into PhysicalLife() and BiologicalLife(). Override those instead of this. */ /mob/living/proc/Life(seconds, times_fired) - //SHOULD_NOT_SLEEP(TRUE) + SHOULD_NOT_SLEEP(TRUE) if(mob_transforming) return @@ -24,7 +24,7 @@ break var/msg = "[key_name_admin(src)] [ADMIN_JMP(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished." message_admins(msg) - send2tgs_adminless_only("Mob", msg, R_ADMIN) + INVOKE_ASYNC(GLOBAL_PROC, .proc/send2tgs_adminless_only, "Mob", msg, R_ADMIN) log_game("[key_name(src)] was found to have no .loc with an attached client.") // This is a temporary error tracker to make sure we've caught everything diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 8e39dc5234..486a0acf4e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -514,10 +514,21 @@ /mob/living/ratvar_act() if(status_flags & GODMODE) return - if(stat != DEAD && !is_servant_of_ratvar(src)) + if(stat == DEAD || is_servant_of_ratvar(src)) + return + if(is_eligible_servant(src)) + add_servant_of_ratvar(src) + to_chat(src, "Ratvar's influence invades your mind, praise the Justiciar!") + else to_chat(src, "A blinding light boils you alive! Run!") adjust_fire_stacks(20) + adjustFireLoss(35) IgniteMob() + if(iscultist(src)) + to_chat(src, "You resist Ratvar's influence... but not all of it! Run!") + adjustFireLoss(35) + if(src && reagents) + reagents.add_reagent(/datum/reagent/fuel/holyoil, 5) return FALSE diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 9646796802..7ca2234081 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -90,11 +90,11 @@ GLOBAL_LIST_INIT(department_radio_keys, list( var/static/list/one_character_prefix = list(MODE_HEADSET = TRUE, MODE_ROBOT = TRUE, MODE_WHISPER = TRUE) var/ic_blocked = FALSE - /* - if(client && !forced && config.ic_filter_regex && findtext(message, config.ic_filter_regex)) + + if(client && !forced && CHAT_FILTER_CHECK(message)) //The filter doesn't act on the sanitized message, but the raw message. ic_blocked = TRUE - */ + if(sanitize) message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) if(!message || message == "") @@ -103,6 +103,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(ic_blocked) //The filter warning message shows the sanitized message though. to_chat(src, "That message contained a word prohibited in IC chat! Consider reviewing the server rules.\n\"[message]\"") + SSblackbox.record_feedback("tally", "ic_blocked_words", 1, lowertext(config.ic_filter_regex.match)) return var/datum/saymode/saymode = SSradio.saymodes[talk_key] @@ -333,7 +334,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( var/obj/item/bodypart/rightarm = get_bodypart(BODY_ZONE_R_ARM) if(HAS_TRAIT(src, TRAIT_MUTE) && get_selected_language() != /datum/language/signlanguage) return 0 - + if (get_selected_language() == /datum/language/signlanguage) var/left_disabled = FALSE var/right_disabled = FALSE diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index e0e1d91ba9..ce6a5dcda1 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -200,7 +200,7 @@ if(option == "Random") iconstates[option] = image(icon = src.icon, icon_state = "ai-random") continue - iconstates[option] = image(icon = src.icon, icon_state = resolve_ai_icon(option)) + iconstates[option] = image(icon = src.icon, icon_state = resolve_ai_icon(option, radial_preview = TRUE)) view_core() var/ai_core_icon = show_radial_menu(src, src , iconstates, radius = 42) diff --git a/code/modules/mob/living/silicon/robot/update_icons.dm b/code/modules/mob/living/silicon/robot/update_icons.dm index a567446e9e..088c93cff1 100644 --- a/code/modules/mob/living/silicon/robot/update_icons.dm +++ b/code/modules/mob/living/silicon/robot/update_icons.dm @@ -23,13 +23,17 @@ if(module.cyborg_base_icon == "robot") icon = 'icons/mob/robots.dmi' pixel_x = initial(pixel_x) - if(stat != DEAD && !(IsUnconscious() ||IsStun() || IsKnockdown() || IsParalyzed() || low_power_mode)) //Not dead, not stunned. + if(stat != DEAD && !(IsUnconscious() || IsStun() || IsParalyzed() || low_power_mode)) //Not dead, not stunned. if(!eye_lights) eye_lights = new() - if(lamp_intensity > 2) + if(lamp_enabled || lamp_doom) eye_lights.icon_state = "[module.special_light_key ? "[module.special_light_key]":"[module.cyborg_base_icon]"]_l" + eye_lights.color = lamp_doom? COLOR_RED : lamp_color + eye_lights.plane = 19 //glowy eyes else eye_lights.icon_state = "[module.special_light_key ? "[module.special_light_key]":"[module.cyborg_base_icon]"]_e[is_servant_of_ratvar(src) ? "_r" : ""]" + eye_lights.color = COLOR_WHITE + eye_lights.plane = -1 eye_lights.icon = icon add_overlay(eye_lights) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a7fd9c5ac0..bc8c3fed87 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -1059,5 +1059,5 @@ Pass a positive integer as an argument to override a bot's default speed. I.icon_state = null path.Cut(1, 2) -/mob/living/silicon/rust_heretic_act() +/mob/living/simple_animal/bot/rust_heretic_act() adjustBruteLoss(500) diff --git a/code/modules/mob/living/simple_animal/eldritch_demons.dm b/code/modules/mob/living/simple_animal/eldritch_demons.dm index dbf62be16d..4a96c4be67 100644 --- a/code/modules/mob/living/simple_animal/eldritch_demons.dm +++ b/code/modules/mob/living/simple_animal/eldritch_demons.dm @@ -192,6 +192,11 @@ back.contract_next_chain_into_single_tile() return +/mob/living/simple_animal/hostile/eldritch/armsy/proc/get_length() + . += 1 + if(back) + . += back.get_length() + ///Updates the next mob in the chain to move to our last location, fixed the worm if somehow broken. /mob/living/simple_animal/hostile/eldritch/armsy/proc/update_chain_links() gib_trail() diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 49581b91a7..e3486a40e2 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -425,7 +425,9 @@ /mob/living/simple_animal/pet/dog/corgi/Ian/BiologicalLife() if(!(. = ..())) return + INVOKE_ASYNC(src, .proc/corgi_ai_behavior) +/mob/living/simple_animal/pet/dog/corgi/Ian/proc/corgi_ai_behavior() //Feeding, chasing food, FOOOOODDDD if(!stat && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE) && !buckled) turns_since_scan++ diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm index b4d60af198..98700ffaf0 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm @@ -11,7 +11,7 @@ var/datum/boss_active_timed_battle/atb var/point_regen_delay = 20 var/point_regen_amount = 1 - + sentience_type = SENTIENCE_BOSS /mob/living/simple_animal/hostile/boss/Initialize() . = ..() diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 7616e31aa8..37eedcb312 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -25,6 +25,7 @@ /obj/item/modular_computer/laptop/examine(mob/user) . = ..() + . += "Drag it in your hand to pick it up." if(screen_on) . += "Alt-click to close it." @@ -76,6 +77,9 @@ M.put_in_hand(src, H.held_index) /obj/item/modular_computer/laptop/on_attack_hand(mob/user) + . = ..() + if(!.) + return if(screen_on && isturf(loc)) return attack_self(user) diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 65ff97dd1b..162f480c02 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -1,8 +1,9 @@ /datum/computer_file/program/budgetorders filename = "orderapp" - filedesc = "Nanotrasen Internal Requisition Network (NIRN)" + filedesc = "NT IRN" + // category = PROGRAM_CATEGORY_SUPL program_icon_state = "request" - extended_desc = "A request network that utilizes the Nanotrasen Ordering network to purchase supplies using a department budget account." + extended_desc = "Nanotrasen Internal Requisition Network interface for supply purchasing using a department budget account." requires_ntnet = TRUE transfer_access = ACCESS_HEADS usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET @@ -79,7 +80,6 @@ data["supplies"] = list() for(var/pack in SSshuttle.supply_packs) var/datum/supply_pack/P = SSshuttle.supply_packs[pack] - // todo: replace to P.access_view if(!is_visible_pack(usr, P.access , null, P.contraband) || P.hidden) continue if(!data["supplies"][P.group]) @@ -105,7 +105,7 @@ data["docked"] = SSshuttle.supply.mode == SHUTTLE_IDLE data["loan"] = !!SSshuttle.shuttle_loan data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched - data["can_send"] = FALSE //There is no situation where I want the app to be able to send the shuttle AWAY from the station, but conversely is fine. + data["can_send"] = FALSE //There is no situation where I want the app to be able to send the shuttle AWAY from the station, but conversely is fine. data["can_approve_requests"] = can_approve_requests data["app_cost"] = TRUE var/message = "Remember to stamp and send back the supply manifests." diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 3f21d2cf2c..0babfcdddd 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -20,7 +20,8 @@ "Head of Security", "Chief Engineer", "Research Director", - "Chief Medical Officer") + "Chief Medical Officer", + "Quartermaster") //The scaling factor of max total positions in relation to the total amount of people on board the station in % var/max_relative_positions = 30 //30%: Seems reasonable, limit of 6 @ 20 players @@ -43,7 +44,7 @@ /datum/computer_file/program/job_management/proc/can_close_job(datum/job/job) if(!(job?.title in blacklisted)) - if(job.total_positions > length(GLOB.player_list) * (max_relative_positions / 100)) + if(job.total_positions > job.current_positions) var/delta = (world.time / 10) - GLOB.time_last_changed_position if((change_position_cooldown < delta) || (opened_positions[job.title] > 0)) return TRUE @@ -67,7 +68,7 @@ if(!j || !can_open_job(j)) return if(opened_positions[edit_job_target] >= 0) - GLOB.time_last_changed_position = world.time / 10 + GLOB.time_last_changed_position = world.time / 10 // global cd j.total_positions++ opened_positions[edit_job_target]++ playsound(computer, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) diff --git a/code/modules/movespeed/_movespeed_modifier.dm b/code/modules/movespeed/_movespeed_modifier.dm index 46d10afe7f..5c4bf2ed64 100644 --- a/code/modules/movespeed/_movespeed_modifier.dm +++ b/code/modules/movespeed/_movespeed_modifier.dm @@ -161,8 +161,10 @@ GLOBAL_LIST_EMPTY(movespeed_modification_cache) /// Handles the special case of editing the movement var /mob/vv_edit_var(var_name, var_value) if(var_name == NAMEOF(src, control_object)) - var/obj/O = var_name - if(!istype(O) || (O.obj_flags & DANGEROUS_POSSESSION)) + var/obj/O = var_value + if(!istype(O) && (var_value != null)) + return FALSE + if(O.obj_flags & DANGEROUS_POSSESSION) return FALSE var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown)) var/diff diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 4c710cb483..1a017c25b0 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -21,6 +21,9 @@ multiplicative_slowdown = 1.5 priority = 50 +/datum/movespeed_modifier/status_effect/domain + multiplicative_slowdown = 3 + /datum/movespeed_modifier/status_effect/tased/no_combat_mode multiplicative_slowdown = 8 priority = 100 diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 5b5292a020..0ebbce53cf 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -80,6 +80,9 @@ SSshuttle.lockdown = TRUE SSpersistence.station_was_destroyed = TRUE sleep(600) + if(QDELETED(src)) + priority_announce("Accausal event alert rescinded. Eldritch presence no longer reading on sensors. Solution package disarmed. Reccomend immediate evacuation","Central Command Higher Dimensional Affairs") + return if(resolved == FALSE) resolved = TRUE sound_to_playing_players('sound/machines/alarm.ogg') diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 481d3c2c68..0a7598cd79 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -516,7 +516,7 @@ trajectory = new(starting.x, starting.y, starting.z, pixel_x, pixel_y, Angle, pixel_increment_amount) fired = TRUE if(hitscan) - process_hitscan() + INVOKE_ASYNC(src, .proc/process_hitscan) return if(!(datum_flags & DF_ISPROCESSING)) START_PROCESSING(SSprojectiles, src) diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 8de4b1248f..cd55d00cf1 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -88,9 +88,9 @@ mix_message = "The mixture boils off a yellow, smelly vapor..."//Sulfur burns off, leaving the camphor /datum/chemical_reaction/anaphroplus - name = "pentacamphor" + name = "hexacamphor" id = /datum/reagent/drug/anaphrodisiacplus results = list(/datum/reagent/drug/anaphrodisiacplus = 1) - required_reagents = list(/datum/reagent/drug/aphrodisiac = 5, /datum/reagent/acetone = 1) - required_temp = 300 + required_reagents = list(/datum/reagent/drug/anaphrodisiac = 6, /datum/reagent/acetone = 1) + required_temp = 400 mix_message = "The mixture thickens and heats up slighty..." diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 76b08c7cdf..5d68d00200 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -453,3 +453,8 @@ /obj/item/reagent_containers/glass/bottle/ichor/green name = "green potion" list_reagents = list(/datum/reagent/green_ichor = 1) + +/obj/item/reagent_containers/glass/bottle/thermite + name = "thermite bottle" + list_reagents = list(/datum/reagent/thermite = 30) + diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 235abd2005..a70449b035 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -105,13 +105,3 @@ materials = list(/datum/material/iron = 2000, /datum/material/bluespace = 500) category = list("Bluespace Designs") departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/bluespace_carrier - name = "Bluespace Jar" - desc = "A jar used to contain creatures, using the power of bluespace." - id = "bluespace_carrier" - build_type = PROTOLATHE - build_path = /obj/item/pet_carrier/bluespace - materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 600) - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 9879171e71..e45434cec4 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -94,7 +94,7 @@ /datum/design/medicinalsmartdart name = "Medicinal Smartdart" - desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient using it's smart nanofilter technology only medicines contained within the dart are administered to the patient. Additonally, due to capillary action, injection of chemicals past the overdose limit is prevented." + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient using its smart nanofilter technology, only medicines contained within the dart are administered to the patient. Additonally, due to capillary action, injection of chemicals past the overdose limit is prevented." id = "medicinalsmartdart" build_type = PROTOLATHE materials = list(/datum/material/glass = 100, /datum/material/plastic = 100, /datum/material/iron = 100) @@ -192,6 +192,16 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE +/datum/design/hypospraykit + name = "Empty Hypospray Kit" + desc = "A plastic medical kit for storing hyposprays and hypospray accessories." + id = "hypokit" + build_type = PROTOLATHE + materials = list(/datum/material/plastic = 5000) + build_path = /obj/item/storage/hypospraykit // let's not summon new hyposprays thanks + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + /datum/design/blood_bag name = "Empty Blood Bag" desc = "A small sterilized plastic bag for blood." @@ -203,7 +213,7 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/bsblood_bag - name = "Blue Space Empty Blood Bag" + name = "Empty Bluespace Blood Bag" desc = "A large sterilized plastic bag for blood." id = "bsblood_bag" build_path = /obj/item/reagent_containers/blood/bluespace @@ -809,22 +819,22 @@ research_icon_state = "surgery_chest" /datum/design/surgery/healing/brute_upgrade - name = "Tend Wounds (Brute) Upgrade" + name = "Tend Wounds (Brute) Upgrade I" surgery = /datum/surgery/healing/brute/upgraded id = "surgery_heal_brute_upgrade" /datum/design/surgery/healing/brute_upgrade_2 - name = "Tend Wounds (Brute) Upgrade" + name = "Tend Wounds (Brute) Upgrade II" surgery = /datum/surgery/healing/brute/upgraded/femto id = "surgery_heal_brute_upgrade_femto" /datum/design/surgery/healing/burn_upgrade - name = "Tend Wounds (Burn) Upgrade" + name = "Tend Wounds (Burn) Upgrade I" surgery = /datum/surgery/healing/burn/upgraded id = "surgery_heal_burn_upgrade" /datum/design/surgery/healing/burn_upgrade_2 - name = "Tend Wounds (Burn) Upgrade" + name = "Tend Wounds (Burn) Upgrade II" surgery = /datum/surgery/healing/brute/upgraded/femto id = "surgery_heal_burn_upgrade_femto" @@ -835,16 +845,26 @@ id = "surgery_heal_combo" /datum/design/surgery/healing/combo_upgrade - name = "Tend Wounds (Mixture) Upgrade" + name = "Tend Wounds (Mixture) Upgrade I" surgery = /datum/surgery/healing/combo/upgraded id = "surgery_heal_combo_upgrade" /datum/design/surgery/healing/combo_upgrade_2 - name = "Tend Wounds (Mixture) Upgrade" + name = "Tend Wounds (Mixture) Upgrade II" desc = "A surgical procedure that repairs both bruises and burns faster than their individual counterparts. It is more effective than both the individual surgeries." surgery = /datum/surgery/healing/combo/upgraded/femto id = "surgery_heal_combo_upgrade_femto" +/datum/design/surgery/healing/robot_upgrade + name = "Repair Robotic Limbs Upgrade" + surgery = /datum/surgery/robot_healing/upgraded + id = "surgery_heal_robo_upgrade" + +/datum/design/surgery/healing/robot_upgrade_2 + name = "Repair Robotic Limbs Upgrade II" + surgery = /datum/surgery/robot_healing/upgraded/femto + id = "surgery_heal_robo_upgrade_femto" + /datum/design/surgery/surgery_toxinhealing name = "Body Rejuvenation" desc = "A surgical procedure that helps deal with oxygen deprecation, and treat toxic damaged. Works on corpses and alive alike without chemicals." diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index 53fa5b21ea..b0d213969e 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -9,7 +9,7 @@ build_type = IMPRINTER materials = list(/datum/material/glass = 1000) build_path = /obj/item/circuitboard/computer/cargo/express - category = list("Mining Designs") + category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_CARGO /datum/design/bluespace_pod @@ -19,7 +19,7 @@ build_type = PROTOLATHE materials = list(/datum/material/glass = 1000) build_path = /obj/item/disk/cargo/bluespace_pod - category = list("Mining Designs") + category = list("Electronics") departmental_flags = DEPARTMENTAL_FLAG_CARGO /datum/design/drill diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index fb29399064..de0ebcb63a 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -43,7 +43,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi /obj/item/storage/part_replacer/bluespace name = "bluespace rapid part exchange device" - desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts. Definitely not just a BSRPED painted orange." + desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts." icon_state = "BS_RPED" w_class = WEIGHT_CLASS_NORMAL works_from_distance = TRUE @@ -109,6 +109,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi icon_state = "borgrped" /obj/item/storage/part_replacer/bluespace/cyborg + desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts. Definitely not just a BSRPED painted orange." icon_state = "borg_BS_RPED" /proc/cmp_rped_sort(obj/item/A, obj/item/B) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 40cc322eed..c7c2e7ef10 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -104,5 +104,6 @@ // Default research tech, prevents bricking design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "desttagger", "handlabel", "packagewrap", "destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "bepis", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "paystand", - "space_heater", "beaker", "large_beaker", "bucket", "xlarge_beaker", "sec_shellclip", "sec_beanbag", "sec_rshot", "sec_bshot", "sec_slug", "sec_islug", "sec_dart", "sec_38", "sec_38lethal", + "space_heater", "beaker", "large_beaker", "xlarge_beaker", "bucket", "hypovial", "large_hypovial", + "sec_shellclip", "sec_beanbag", "sec_rshot", "sec_bshot", "sec_slug", "sec_islug", "sec_dart", "sec_38", "sec_38lethal", "rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass") diff --git a/code/modules/research/techweb/nodes/biotech_nodes.dm b/code/modules/research/techweb/nodes/biotech_nodes.dm index 3c89f0bbab..d4f0a4b913 100644 --- a/code/modules/research/techweb/nodes/biotech_nodes.dm +++ b/code/modules/research/techweb/nodes/biotech_nodes.dm @@ -5,7 +5,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack", "portable_chem_mixer") + design_ids = list("medicalkit", "hypokit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack", "portable_chem_mixer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) /datum/techweb_node/adv_biotech diff --git a/code/modules/research/techweb/nodes/bluespace_nodes.dm b/code/modules/research/techweb/nodes/bluespace_nodes.dm index ae9fdd6485..6c782456a8 100644 --- a/code/modules/research/techweb/nodes/bluespace_nodes.dm +++ b/code/modules/research/techweb/nodes/bluespace_nodes.dm @@ -13,7 +13,7 @@ display_name = "Applied Bluespace Research" description = "Using bluespace to make things faster and better." prereq_ids = list("bluespace_basic", "engineering") - design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart", "xenobio_slimebasic", "bluespace_tray", "bluespace_carrier") + design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart", "xenobio_slimebasic", "bluespace_tray") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) /datum/techweb_node/adv_bluespace @@ -24,6 +24,14 @@ design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bluespace_crystal", "xenobio_slimeadv") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) +/datum/techweb_node/emp_super + id = "emp_super" + display_name = "Quantum Electromagnetic Technology" + description = "Even better electromagnetic technology." + prereq_ids = list("emp_adv", "adv_bluespace") // why should the rest of T4 be locked but not this node? grmblgrmbl + design_ids = list("quadultra_micro_laser") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) + /datum/techweb_node/bluespace_power id = "bluespace_power" display_name = "Bluespace Power Technology" @@ -37,7 +45,7 @@ display_name = "Bluespace Pockets" description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality." prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma") - design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding", "bsblood_bag", "duffelbag_holding") + design_ids = list("bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding", "bsblood_bag", "duffelbag_holding") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500) /datum/techweb_node/bluespace_portal diff --git a/code/modules/research/techweb/nodes/medical_nodes.dm b/code/modules/research/techweb/nodes/medical_nodes.dm index 914a6174ab..af23804c57 100644 --- a/code/modules/research/techweb/nodes/medical_nodes.dm +++ b/code/modules/research/techweb/nodes/medical_nodes.dm @@ -116,6 +116,14 @@ design_ids = list("surgery_heal_brute_upgrade","surgery_heal_burn_upgrade") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) +/datum/techweb_node/adv_surgery + id = "adv_surgery" + display_name = "Advanced Surgery" + description = "When simple medicine doesn't cut it." + prereq_ids = list("imp_wt_surgery") + design_ids = list("surgery_revival", "surgery_lobotomy", "surgery_heal_brute_upgrade_femto","surgery_heal_burn_upgrade_femto","surgery_heal_robo_upgrade","surgery_heal_combo", "surgery_toxinhealing", "organbox", "surgery_adv_dissection") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + /datum/techweb_node/advance_surgerytools id = "advance_surgerytools" display_name = "Advanced Surgery Tools" @@ -124,20 +132,12 @@ design_ids = list("drapes", "retractor_adv", "surgicaldrill_adv", "scalpel_adv", "bonesetter", "surgical_tape") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) -/datum/techweb_node/adv_surgery - id = "adv_surgery" - display_name = "Advanced Surgery" - description = "When simple medicine doesn't cut it." - prereq_ids = list("imp_wt_surgery") - design_ids = list("surgery_revival", "surgery_lobotomy", "surgery_heal_brute_upgrade_femto","surgery_heal_burn_upgrade_femto", "surgery_heal_combo", "surgery_toxinhealing", "organbox", "surgery_adv_dissection") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - /datum/techweb_node/exp_surgery id = "exp_surgery" display_name = "Experimental Surgery" description = "When evolution isn't fast enough." prereq_ids = list("adv_surgery") - design_ids = list("surgery_pacify","surgery_vein_thread","surgery_muscled_veins","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond", "surgery_exp_dissection", "surgery_heal_combo_upgrade") + design_ids = list("surgery_pacify","surgery_vein_thread","surgery_muscled_veins","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond", "surgery_exp_dissection","surgery_heal_robo_upgrade_femto","surgery_heal_combo_upgrade") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) /datum/techweb_node/alien_surgery diff --git a/code/modules/research/techweb/nodes/misc_nodes.dm b/code/modules/research/techweb/nodes/misc_nodes.dm index 94a19924b8..2e5fdca6bf 100644 --- a/code/modules/research/techweb/nodes/misc_nodes.dm +++ b/code/modules/research/techweb/nodes/misc_nodes.dm @@ -49,14 +49,6 @@ design_ids = list("ultra_micro_laser") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) -/datum/techweb_node/emp_super - id = "emp_super" - display_name = "Quantum Electromagnetic Technology" //bs - description = "Even better electromagnetic technology." - prereq_ids = list("emp_adv") - design_ids = list("quadultra_micro_laser") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - /////////////////////////Clown tech///////////////////////// /datum/techweb_node/clown id = "clown" diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 5f9b810070..d62b3c2611 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -12,6 +12,7 @@ pixel_x = -32 pixel_y = -32 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + rad_flags = RAD_NO_CONTAMINATE | RAD_PROTECT_CONTENTS light_range = 8 light_color = LIGHT_COLOR_LAVA var/open = FALSE @@ -71,6 +72,7 @@ /obj/structure/opacity_blocker icon = 'icons/effects/96x96.dmi' icon_state = "gate_blocker" + rad_flags = RAD_NO_CONTAMINATE | RAD_PROTECT_CONTENTS layer = EDGED_TURF_LAYER pixel_x = -32 pixel_y = -32 @@ -252,6 +254,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) icon = 'icons/turf/boss_floors.dmi' icon_state = "pristine_tile1" layer = ABOVE_OPEN_TURF_LAYER + rad_flags = RAD_NO_CONTAMINATE | RAD_PROTECT_CONTENTS anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/tile_key = "pristine_tile" diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 7af0315934..899e2b2f6f 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -25,7 +25,14 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/item/shared_storage, /obj/structure/extraction_point, /obj/machinery/syndicatebomb, - /obj/item/hilbertshotel + /obj/item/hilbertshotel, + /obj/machinery/launchpad, + /obj/machinery/disposal, + /obj/structure/disposalpipe, + /obj/item/hilbertshotel, + /obj/machinery/camera, + /obj/item/gps, + /obj/structure/checkoutmachine ))) GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( @@ -33,6 +40,11 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( /mob/living/simple_animal/slaughter ))) +/// How many goody orders we can fit in a lockbox before we upgrade to a crate +#define GOODY_FREE_SHIPPING_MAX 5 +/// How much to charge oversized goody orders +#define CRATE_TAX 700 + /obj/docking_port/mobile/supply name = "supply shuttle" id = "supply" @@ -58,6 +70,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( return check_blacklist(shuttle_areas, GLOB.blacklisted_cargo_types - GLOB.cargo_shuttle_leave_behind_typecache) return ..() +// fuc off /obj/docking_port/mobile/supply/enterTransit() var/list/leave_behind = list() for(var/i in check_blacklist(shuttle_areas, GLOB.cargo_shuttle_leave_behind_typecache)) @@ -98,12 +111,11 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( sell() /obj/docking_port/mobile/supply/proc/buy() - if(!SSshuttle.shoppinglist.len) - return - var/list/obj/miscboxes = list() //miscboxes are combo boxes that contain all goody orders grouped var/list/misc_order_num = list() //list of strings of order numbers, so that the manifest can show all orders in a box var/list/misc_contents = list() //list of lists of items that each box will contain + if(!SSshuttle.shoppinglist.len) + return var/list/empty_turfs = list() for(var/place in shuttle_areas) @@ -113,30 +125,39 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( continue empty_turfs += T - var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) var/value = 0 var/purchases = 0 + var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties + for(var/datum/supply_order/SO in SSshuttle.shoppinglist) if(!empty_turfs.len) break - var/price = SO.pack.cost if(SO.applied_coupon) price *= (1 - SO.applied_coupon.discount_pct_off) + var/datum/bank_account/D if(SO.paying_account) //Someone paid out of pocket D = SO.paying_account + var/list/current_buyer_orders = goodies_by_buyer[SO.paying_account] // so we can access the length a few lines down if(!SO.pack.goody) price *= 1.1 //TODO make this customizable by the quartermaster + + // note this is before we increment, so this is the GOODY_FREE_SHIPPING_MAX + 1th goody to ship. also note we only increment off this step if they successfully pay the fee, so there's no way around it + else if(LAZYLEN(current_buyer_orders) == GOODY_FREE_SHIPPING_MAX) + price += CRATE_TAX + D.bank_card_talk("Goody order size exceeds free shipping limit: Assessing [CRATE_TAX] credit S&H fee.") else - D = cargo_budget + D = SSeconomy.get_dep_account(ACCOUNT_CAR) if(D) - if(!D.adjust_money(-SO.pack.cost)) + if(!D.adjust_money(-price)) if(SO.paying_account) D.bank_card_talk("Cargo order #[SO.id] rejected due to lack of funds. Credits required: [price]") continue if(SO.paying_account) + if(SO.pack.goody) + LAZYADD(goodies_by_buyer[SO.paying_account], SO) D.bank_card_talk("Cargo order #[SO.id] has shipped. [price] credits have been charged to your bank account.") var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) cargo.adjust_money(price - SO.pack.cost) //Cargo gets the handling fee @@ -145,30 +166,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( SSshuttle.orderhistory += SO QDEL_NULL(SO.applied_coupon) - if(SO.pack.goody) //goody means it gets piled in the miscbox - if(SO.paying_account) - if(!miscboxes.len || !miscboxes[D.account_holder]) //if there's no miscbox for this person - miscboxes[D.account_holder] = new /obj/item/storage/lockbox/order(pick_n_take(empty_turfs)) - var/obj/item/storage/lockbox/order/our_box = miscboxes[D.account_holder] - our_box.buyer_account = SO.paying_account - miscboxes[D.account_holder].name = "small items case - purchased by [D.account_holder]" - misc_contents[D.account_holder] = list() - for (var/item in SO.pack.contains) - misc_contents[D.account_holder] += item - misc_order_num[D.account_holder] = "[misc_order_num[D.account_holder]]#[SO.id] " - else //No private payment, so we just stuff it all into a generic crate - if(!miscboxes.len || !miscboxes["Cargo"]) - miscboxes["Cargo"] = new /obj/structure/closet/secure_closet/goodies(pick_n_take(empty_turfs)) - miscboxes["Cargo"].name = "small items closet" - misc_contents["Cargo"] = list() - miscboxes["Cargo"].req_access = list() - for (var/item in SO.pack.contains) - misc_contents["Cargo"] += item - //new item(miscboxes["Cargo"]) - if(SO.pack.access) - miscboxes["Cargo"].req_access += SO.pack.access - misc_order_num["Cargo"] = "[misc_order_num["Cargo"]]#[SO.id] " - else + if(!SO.pack.goody) //we handle goody crates below SO.generate(pick_n_take(empty_turfs)) SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.cost]", "[SO.pack.name]")) @@ -177,16 +175,43 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( message_admins("\A [SO.pack.name] ordered by [ADMIN_LOOKUPFLW(SO.orderer_ckey)], paid by [D.account_holder] has shipped.") purchases++ + // we handle packing all the goodies last, since the type of crate we use depends on how many goodies they ordered. If it's more than GOODY_FREE_SHIPPING_MAX + // then we send it in a crate (including the CRATE_TAX cost), otherwise send it in a free shipping case + for(var/D in goodies_by_buyer) + var/list/buying_account_orders = goodies_by_buyer[D] + var/datum/bank_account/buying_account = D + var/buyer = buying_account.account_holder + + if(buying_account_orders.len > GOODY_FREE_SHIPPING_MAX) // no free shipping, send a crate + var/obj/structure/closet/crate/secure/owned/our_crate = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs)) + our_crate.buyer_account = buying_account + our_crate.name = "goody crate - purchased by [buyer]" + miscboxes[buyer] = our_crate + else //free shipping in a case + miscboxes[buyer] = new /obj/item/storage/lockbox/order(pick_n_take(empty_turfs)) + var/obj/item/storage/lockbox/order/our_case = miscboxes[buyer] + our_case.buyer_account = buying_account + miscboxes[buyer].name = "goody case - purchased by [buyer]" + misc_contents[buyer] = list() + + for(var/O in buying_account_orders) + var/datum/supply_order/our_order = O + for (var/item in our_order.pack.contains) + misc_contents[buyer] += item + misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] " + for(var/I in miscboxes) var/datum/supply_order/SO = new/datum/supply_order() SO.id = misc_order_num[I] SO.generateCombo(miscboxes[I], I, misc_contents[I]) qdel(SO) + var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO) /obj/docking_port/mobile/supply/proc/sell() var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + var/presale_points = D.account_balance var/gain = 0 if(!GLOB.exports_list.len) // No exports list? Generate it! @@ -204,6 +229,8 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( continue if(bounty_ship_item_and_contents(AM, dry_run = FALSE)) matched_bounty = TRUE + // ignore mech checks because the mech is ONLY for bounty + continue if(!AM.anchored || istype(AM, /obj/mecha)) export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex) @@ -230,4 +257,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( msg = copytext_char(msg, 1, MAX_MESSAGE_LEN) SSshuttle.centcom_message = msg - investigate_log("Shuttle contents sold for [gain] credits. Contents: [ex.exported_atoms || "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO) + investigate_log("Shuttle contents sold for [D.account_balance - presale_points] credits. Contents: [ex.exported_atoms ? ex.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO) + +#undef GOODY_FREE_SHIPPING_MAX +#undef CRATE_TAX diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e514fd5c9a..aff296b684 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -394,7 +394,7 @@ name = "smithed katana blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/twohand/katana - icon_state = "katana" + icon_state = "katana-s" /obj/item/smithing/katanablade/startfinish() diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index f5b23e6087..dd655a0ea5 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -169,7 +169,6 @@ /***************************COMBO***************************/ /datum/surgery/healing/combo - /datum/surgery/healing/combo name = "Tend Wounds (Mixture, Basic)" replaced_by = /datum/surgery/healing/combo/upgraded diff --git a/code/modules/surgery/robot_healing.dm b/code/modules/surgery/robot_healing.dm index f473ef280e..6c9ff6e78f 100644 --- a/code/modules/surgery/robot_healing.dm +++ b/code/modules/surgery/robot_healing.dm @@ -1,9 +1,9 @@ //Almost copypaste of tend wounds, with some changes /datum/surgery/robot_healing - name = "Repair robotic limbs (basic)" + name = "Repair Robotic Limbs" desc = "A surgical procedure that provides repairs and maintenance to robotic limbs. Is slightly more efficient when the patient is severely damaged." - + replaced_by = /datum/surgery steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/pry_off_plating, /datum/surgery_step/cut_wires, @@ -14,8 +14,28 @@ possible_locs = list(BODY_ZONE_CHEST) requires_bodypart_type = 0 //You can do this on anyone, but it won't really be useful on people without augments. ignore_clothes = TRUE + var/healing_step_type var/antispam = FALSE - var/healing_step_type = /datum/surgery_step/robot_heal/basic + +/datum/surgery/robot_healing/basic + name = "Repair Robotic Limbs (Basic)" + replaced_by = /datum/surgery/robot_healing/upgraded + healing_step_type = /datum/surgery_step/robot_heal/basic + desc = "A surgical procedure that provides basic repairs and maintenance to a patient's robotic limbs. Heals slightly more when the patient is severely injured." + +/datum/surgery/robot_healing/upgraded + name = "Repair Robotic Limbs (Adv.)" + requires_tech = TRUE + replaced_by = /datum/surgery/robot_healing/upgraded/femto + healing_step_type = /datum/surgery_step/robot_heal/upgraded + desc = "A surgical procedure that provides advanced repairs and maintenance to a patient's robotic limbs. Heals more when the patient is severely injured." + +/datum/surgery/robot_healing/upgraded/femto + name = "Repair Robotic Limbs (Exp.)" + requires_tech = TRUE + replaced_by = null // as good as it gets + healing_step_type = /datum/surgery_step/robot_heal/upgraded/femto + desc = "A surgical procedure that provides experimental repairs and maintenance to a patient's robotic limbs. Heals considerably more when the patient is severely injured." /datum/surgery/robot_healing/New(surgery_target, surgery_location, surgery_bodypart) ..() @@ -35,26 +55,21 @@ var/healsburn = FALSE var/brutehealing = 0 var/burnhealing = 0 - var/missinghpbonus = 0 //heals an extra point of damager per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing! + var/missinghpbonus = 0 //heals an extra point of damage per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing! /datum/surgery_step/robot_heal/tool_check(mob/user, obj/item/tool) if(implement_type == TOOL_WELDER && !tool.tool_use_check(user, 1)) return FALSE return TRUE -/datum/surgery/robot_healing/can_start(mob/user, mob/living/carbon/target, obj/item/tool) - var/possible = FALSE +/datum/surgery/robot_healing/can_start(mob/user, mob/living/carbon/target, obj/item/tool) // hey delta? why is the check for this all the way down here for(var/obj/item/bodypart/B in target.bodyparts) if(B.is_robotic_limb()) - possible = TRUE - break - if(!possible) - return FALSE - return TRUE + return ..() /datum/surgery_step/robot_heal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/woundtype - if(implement_type == TOOL_WELDER) + if(implement_type == TOOL_WELDER) healsbrute = TRUE healsburn = FALSE woundtype = "dents" @@ -133,3 +148,13 @@ brutehealing = 10 burnhealing = 10 missinghpbonus = 15 + +/datum/surgery_step/robot_heal/upgraded + brutehealing = 10 + burnhealing = 10 + missinghpbonus = 10 + +/datum/surgery_step/robot_heal/upgraded/femto + brutehealing = 10 + burnhealing = 10 + missinghpbonus = 5 diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm index de15b16b68..5471eb9f31 100644 --- a/code/modules/uplink/uplink_items/uplink_clothing.dm +++ b/code/modules/uplink/uplink_items/uplink_clothing.dm @@ -98,6 +98,7 @@ item = /obj/item/clothing/gloves/tackler/combat/insulated include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) cost = 2 + illegal_tech = FALSE /datum/uplink_item/device_tools/syndicate_eyepatch name = "Mechanical Eyepatch" diff --git a/code/modules/uplink/uplink_items/uplink_devices.dm b/code/modules/uplink/uplink_items/uplink_devices.dm index 5f5eb91a04..ad1cc31ba7 100644 --- a/code/modules/uplink/uplink_items/uplink_devices.dm +++ b/code/modules/uplink/uplink_items/uplink_devices.dm @@ -130,6 +130,7 @@ multitool and combat gloves that are resistant to shocks and heat." item = /obj/item/storage/toolbox/syndicate cost = 1 + illegal_tech = FALSE /datum/uplink_item/device_tools/syndie_glue name = "Glue" diff --git a/code/modules/uplink/uplink_items/uplink_stealthdevices.dm b/code/modules/uplink/uplink_items/uplink_stealthdevices.dm index 28d02cf79b..0a82b3b8b3 100644 --- a/code/modules/uplink/uplink_items/uplink_stealthdevices.dm +++ b/code/modules/uplink/uplink_items/uplink_stealthdevices.dm @@ -16,6 +16,7 @@ with these cards." item = /obj/item/card/id/syndicate cost = 2 + illegal_tech = FALSE /datum/uplink_item/stealthy_tools/ai_detector name = "Artificial Intelligence Detector" diff --git a/code/modules/vending/barkbox.dm b/code/modules/vending/barkbox.dm new file mode 100644 index 0000000000..4b5d9734dd --- /dev/null +++ b/code/modules/vending/barkbox.dm @@ -0,0 +1,36 @@ +/obj/machinery/vending/barkbox + name = "Bark Box" + desc = "For all your pet needs!" + icon_state = "barkbox" + product_slogans = "Whuff!;Bark!;Give me a treat!" + products = list( + /obj/item/storage/fancy/treat_box = 8, + /obj/item/clothing/neck/petcollar = 5, + /obj/item/clothing/neck/petcollar/ribbon = 5, + /obj/item/clothing/neck/petcollar/leather = 5, + /obj/item/clothing/suit/petharness = 4, + /obj/item/clothing/suit/petharness/mesh = 4, + /obj/item/toy/fluff/tennis_poly = 4, + /obj/item/toy/fluff/tennis_poly/tri = 2, + /obj/item/toy/fluff/bone_poly = 4, + /obj/item/toy/fluff/frisbee_poly = 4 + ) + contraband = list( + /obj/item/clothing/neck/petcollar/locked = 2, + /obj/item/clothing/neck/petcollar/locked/ribbon = 2, + /obj/item/clothing/neck/petcollar/locked/leather = 2, + /obj/item/key/collar = 2, + /obj/item/dildo/knotted = 3 + ) + premium = list( + /obj/item/toy/fluff/tennis_poly/tri/squeak = 1, + /obj/item/toy/fluff/bone_poly/squeak = 1 + ) + refill_canister = /obj/item/vending_refill/barkbox + default_price = PRICE_CHEAP + extra_price = PRICE_BELOW_NORMAL + payment_department = NO_FREEBIES + +/obj/item/vending_refill/barkbox + machine_name = "Bark Box" + icon_state = "refill_barkbox" diff --git a/config/game_options.txt b/config/game_options.txt index 7776d87d4e..b9d763e5b0 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -72,6 +72,14 @@ ALERT_DELTA Destruction of the station is imminent. All crew are instructed to o ## Uncomment to not send a roundstart intercept report. Gamemodes may override this. #NO_INTERCEPT_REPORT +## Comment to disable weighting modes by how chaotic recent mode rolls were. +WEIGH_BY_RECENT_CHAOS + +## The weight adjustment will be proportional to this power relative to the "ideal" weight range. +## e.g. if we have a weight range of 0-5, and an exponent of 1, 6 will be weighted 1/2, 7 1/3 etc. +## if exponent is 2, it'll be 1/4, 1/9 etc. +CHAOS_EXPONENT 1 + ## Probablities for game modes chosen in 'secret' and 'random' modes. ## Default probablity is 1, increase to make that mode more likely to be picked. ## Set to 0 to disable that mode. @@ -154,6 +162,11 @@ FORCE_ANTAG_COUNT CLOCKWORK_CULT #FORCE_ANTAG_COUNT WIZARD #FORCE_ANTAG_COUNT MONKEY +## A config for how much each game mode's chaos level is. +## All of them have reasonable defaults, but this can be used to adjust them. +## 0-9, where 0 is lowest chaos (should only be extended) and 9 is highest (wizard? nukies?) +#CHAOS_LEVEL EXTENDED 0 + ## Uncomment these for overrides of the minimum / maximum number of players in a round type. ## If you set any of these occasionally check to see if you still need them as the modes ## will still be actively rebalanced around the SUGGESTED populations, not your overrides. diff --git a/html/changelog.html b/html/changelog.html index f039539b98..b240141879 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -71,6 +71,168 @@
  • Properly segments all the augment sprites so that they correctly display.
  • Properly labels the augment limb icon sprites.
  • Fixes going over the defined limit of roundstart prosthetics
  • +

    23 March 2021

    +

    LetterN updated:

    + + +

    21 March 2021

    +

    Arturlang updated:

    + +

    GrayRachnid updated:

    + +

    Hatterhat updated:

    + +

    LetterN updated:

    + +

    Putnam3145 updated:

    + +

    The-Sun-In-Splendour updated:

    + +

    dzahlus updated:

    + +

    timothyteakettle updated:

    + + +

    20 March 2021

    +

    Hatterhat updated:

    + + +

    19 March 2021

    +

    DeltaFire15 updated:

    + +

    Putnam3145 updated:

    + +

    SandPoot updated:

    + +

    kiwedespars updated:

    + +

    zeroisthebiggay updated:

    + + +

    18 March 2021

    +

    Arturlang updated:

    + +

    Hatterhat updated:

    + + +

    17 March 2021

    +

    KeRSedChaplain updated:

    + +

    timothyteakettle updated:

    + + +

    16 March 2021

    +

    GrayRachnid updated:

    + +

    HeroWithYay updated:

    + +

    LetterN updated:

    + +

    Putnam3145 updated:

    + +

    SandPoot updated:

    + + +

    14 March 2021

    +

    Adelphon updated:

    + +

    Hatterhat updated:

    + +

    Putnam3145 updated:

    + +

    kiwedespars updated:

    + +

    necromanceranne updated:

    + + +

    12 March 2021

    +

    R3dtail updated:

    +

    10 March 2021

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 81d12c0c62..ae22fdc466 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -28701,25 +28701,117 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: The femur breaker now actually breaks legs by applying a compound fracture. Putnam3145: - balance: uncapped TEG power, buffing high-temp TEGs -2021-03-11: +2021-03-12: + R3dtail: + - spellcheck: Adds Periods and moves some words around. +2021-03-14: + Adelphon: + - rscadd: messy2 + - bugfix: papermask + Hatterhat: + - rscadd: Robotic limb repair surgery now has tiers. + - rscadd: 'Pubby and Delta now have roundstart limb-growers relatively close to, + if not in, the operating theaters. tweak: Box QM''s console now can announce + things.' Putnam3145: - - rscadd: Supernova event - - refactor: Bloodsucker day/night cycle now processes on a subsystem instead of - using while and sleep (!!) - Sneakyrat: - - bugfix: Fixes precise insertion ui(when it asks you how many sheets you want to - put in the mat container) so you can actually choose how much to put in and - it will still work if your stack is bigger than the remaining space - - bugfix: Fixes precise insertion not working for remote mat containers - - bugfix: Fixes Protolathe/mechfab insert material animations not working - - bugfix: Fixes the material insertion animation for protolathes occurring on the - circuit printer - - bugfix: Fixes the material insertion animation not actually playing when it was - started - - bugfix: Fixes the material insertion animation for iron not being made - - bugfix: Fixes the material insertion animation sometimes not picking the right - material for sheets that have multiple different materials in them + - bugfix: chaos loads now + kiwedespars: + - rscadd: adds a cute new plushie necromanceranne: - - bugfix: Properly segments all the augment sprites so that they correctly display. - - bugfix: Properly labels the augment limb icon sprites. - - bugfix: Fixes going over the defined limit of roundstart prosthetics + - bugfix: Fixes cosmetic augments missing their foot sprites. +2021-03-16: + GrayRachnid: + - balance: removed red toolbox, agent id, and guerilla gloves from unlocking illegal + tech. + HeroWithYay: + - bugfix: fixed spelling error + LetterN: + - bugfix: Borg light icons not turning off + - bugfix: Double ai icon select + Fixes ai core not having icons + - bugfix: Missing air tank icon + - bugfix: Computer boards being dumb and nullspacing/qdeling itself + Putnam3145: + - balance: Supernova now much lower chance to be inconsequential + - balance: Made hyper-nob's point values way lower (25/20 for science/cargo instead + of 1000/1000) + - balance: Made nitryl's cargo sell value less (10 instead of 30) + SandPoot: + - bugfix: Fixed interacting with telecomms. +2021-03-17: + KeRSedChaplain: + - rscadd: Added three new rites, and makes soul vessels obtainable + - bugfix: fixes clockwork guardians inheriting marauders blocking + - soundadd: added sounds for the ratvar end sequence, voiced by @dzahlus + timothyteakettle: + - rscadd: speech panel added to main menu customization +2021-03-18: + Arturlang: + - bugfix: Combat mode right click and right click verb give's are now actualyl targeted + Hatterhat: + - rscadd: Hypospray vials are now printable from the medical techshift start. + - rscadd: 'Empty hypospray kits are now printable behind biological technology. + tweak: Quantum electromag (T4 lasers) are now behind Advanced Bluespace like + the rest of T4.' +2021-03-19: + DeltaFire15: + - rscdel: 'Bluespace jars can no longer be printed / acquired from lathes / techwebs. + tweak: The travelling animal trader now gives you your reward in a one-use bluespace + jar.' + Putnam3145: + - rscadd: '"Antag" role that can be toggled to disable all antags' + SandPoot: + - rscadd: Tactitool Skirtleneck. + - rscadd: Adds the tactitool skirtleneck to the loadout. + kiwedespars: + - rscadd: 'New heretic path - Path of Void- it specializes in being extremely stealthy. + tweak : Removed curse of blindness replaced with mask of madness. hey it even + rhymes.' + - bugfix: fixes heretic mass deletion during transmutation bug. + - bugfix: Fixes heretic brews being permanent. + - bugfix: 'Fixes void storm breaking after resurrecting. tweak: Heretic has received + a minor textual facelift. tweak: Heretics who finish the Void Path and become + an Aristocrat of the Void can now survive in the Void (space).' + - bugfix: Heretics who research Aristocrats Way on the Void Path will no longer + suffocate in their own storm when they ascend (no longer breathes). + - bugfix: Mark of Void and Seeking Blade are once again exclusive only to Void. + - balance: 'Carving knife now deals more damage on throw and can embed in your enemies. + tweak: Grasp of Rust only rusts floors and machines on harm intent. tweak: when + u choose a sac target as heretic it ll also tell the job of the sac' + - rscadd: 2 new void spells, one a placeholder. + - rscadd: flesh mansus grasp buffed, now gives you 5u eldritch fluid when hitting + someone. + zeroisthebiggay: + - bugfix: fixes spriteless heretic book +2021-03-20: + Hatterhat: + - bugfix: Bluespace beaker filling icons for that narrow band between 90 and 80% + full now actually exist. +2021-03-21: + Arturlang: + - bugfix: Vampire statpanel no longer shows spans unnecesary + GrayRachnid: + - bugfix: fixed the holopad autocall bug + - bugfix: properly incorporated the secure holopad that was commented out in the + code. + - config: the in_character_filter.txt is now usable + - admin: headmins should edit the in_character_filter.txt + - server: someone with box access should delete racism with the in_character_filter.txt + - balance: buffed particle defender disabler shots from 13->15 stamina (15*6=90) + - balance: buffed particle defender laser ammo to 4 shots + Hatterhat: + - rscdel: removes pacifism from ghost cafe. have fun beating up your coworkers + LetterN: + - rscadd: Art gallery (meta) + - rscadd: Laptop vendor (meta, delta, box) + Putnam3145: + - balance: Buffed supermatter surge massively. + The-Sun-In-Splendour: + - bugfix: You cannot revive yourself (as a changeling) if you've been absorbed anymore + dzahlus: + - balance: rebalanced hierophant STAFF to do 15 damage on all attacks + timothyteakettle: + - bugfix: using the puddle ability when stunned wont break it +2021-03-23: + LetterN: + - bugfix: NIRM departamental purchases now work. Have fun spending the entire R&D + Budget! diff --git a/html/changelogs/AutoChangeLog-pr-14447.yml b/html/changelogs/AutoChangeLog-pr-14447.yml new file mode 100644 index 0000000000..1ed321f6b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14447.yml @@ -0,0 +1,5 @@ +author: "LetterN" +delete-after: True +changes: + - bugfix: "fixed laptops pickability" + - bugfix: "fixed closets being unweldable" diff --git a/html/changelogs/AutoChangeLog-pr-14473.yml b/html/changelogs/AutoChangeLog-pr-14473.yml new file mode 100644 index 0000000000..1d7db07abe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14473.yml @@ -0,0 +1,14 @@ +author: "ItzGabby" +delete-after: True +changes: + - rscadd: "Fluff Items with polychromic support" + - rscadd: "A new vendor called Bark box" + - rscadd: "A new form of snack with it's own box" + - rscadd: "Two harness, one of them being lewd" + - rscadd: "One new collar, with a ribbon. Classy." + - rscadd: "More locked forms of collars" + - rscdel: "Purged old balls" + - balance: "Removed the funny buffs each colored tennis ball had, down with the powergame!" + - imageadd: "Added polychromic fluff icons, vendor icons, suit icons, snack icons, fancy box icons, and a polychromic version of Izzy's ball." + - imagedel: "Deleted old balls, Izzy's Ball, except the rainbow one since it's special and as I did not go out of my way to get permission to touch." + - spellcheck: "Walked into vending.dm and glared for a moment at hydroponics' grammar." diff --git a/html/changelogs/AutoChangeLog-pr-14475.yml b/html/changelogs/AutoChangeLog-pr-14475.yml new file mode 100644 index 0000000000..5c26ac3970 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14475.yml @@ -0,0 +1,6 @@ +author: "qweq12yt" +delete-after: True +changes: + - rscadd: "added the black market uplink" + - imageadd: "added blackmarket.dmi" + - bugfix: "increased the black market interface's width, now the delivery options will show properly when the LTSRBT is built" diff --git a/html/changelogs/AutoChangeLog-pr-14491.yml b/html/changelogs/AutoChangeLog-pr-14491.yml new file mode 100644 index 0000000000..a40970617c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14491.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - bugfix: "The NOGUNS trait now takes precedence over the triggerguard checks." diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 34f4adf6ce..2efbbf115e 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 52164e1d33..4038a384fd 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/weather_effects.dmi b/icons/effects/weather_effects.dmi index da1523706e..4ae2387692 100644 Binary files a/icons/effects/weather_effects.dmi and b/icons/effects/weather_effects.dmi differ diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi index 33c33aaee2..279a3e76ef 100644 Binary files a/icons/mob/AI.dmi and b/icons/mob/AI.dmi differ diff --git a/icons/mob/actions/actions_clockcult.dmi b/icons/mob/actions/actions_clockcult.dmi index 92d6f98e73..d4f5c4ed6f 100644 Binary files a/icons/mob/actions/actions_clockcult.dmi and b/icons/mob/actions/actions_clockcult.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index 5e51eedffd..483929e24e 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi b/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi index 056fea5d4e..b4c622aae9 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi b/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi index 2545387155..fc53e35f62 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi b/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi index 97d09d4517..f69736f1fa 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi b/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi index bc0a068145..6945fe4fc9 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi b/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi index e3dee175c3..310f14b6fe 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi b/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi index e659e761ce..b502c1df5e 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi b/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi index 4651c57d74..e0b2f1c958 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi b/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi index c27ad213c7..503c759c4a 100644 Binary files a/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi and b/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi differ diff --git a/icons/mob/clockwork_mobs.dmi b/icons/mob/clockwork_mobs.dmi index 54690f6cac..b43f7f958e 100644 Binary files a/icons/mob/clockwork_mobs.dmi and b/icons/mob/clockwork_mobs.dmi differ diff --git a/icons/mob/clothing/custom_w.dmi b/icons/mob/clothing/custom_w.dmi index 3d3e0d24aa..1a4acbc242 100644 Binary files a/icons/mob/clothing/custom_w.dmi and b/icons/mob/clothing/custom_w.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index 23b981031c..c237feed29 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 7d9433525a..4653d2a5b8 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index 3214cc73ba..20b8576277 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index 35c1e5fbfb..39ad5337a7 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/mob/hair.dmi b/icons/mob/hair.dmi index 6ecaad55a5..7322b2cfaf 100644 Binary files a/icons/mob/hair.dmi and b/icons/mob/hair.dmi differ diff --git a/icons/mob/head_fluff.dmi b/icons/mob/head_fluff.dmi new file mode 100644 index 0000000000..1eb06e22c7 Binary files /dev/null and b/icons/mob/head_fluff.dmi differ diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 95106e3dbf..fd6a394301 100644 Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi index 2c1909108b..e3675f33a0 100644 Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ diff --git a/icons/mob/inhands/antag/clockwork_righthand.dmi b/icons/mob/inhands/antag/clockwork_righthand.dmi index 64ee6199a7..c813c83634 100644 Binary files a/icons/mob/inhands/antag/clockwork_righthand.dmi and b/icons/mob/inhands/antag/clockwork_righthand.dmi differ diff --git a/icons/mob/inhands/fluff_lefthand.dmi b/icons/mob/inhands/fluff_lefthand.dmi new file mode 100644 index 0000000000..cb78f463ba Binary files /dev/null and b/icons/mob/inhands/fluff_lefthand.dmi differ diff --git a/icons/mob/inhands/fluff_righthand.dmi b/icons/mob/inhands/fluff_righthand.dmi new file mode 100644 index 0000000000..27f88cc41d Binary files /dev/null and b/icons/mob/inhands/fluff_righthand.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 3d1cbfa273..5b5b9dd81d 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/mouthfluff.dmi b/icons/mob/mouthfluff.dmi new file mode 100644 index 0000000000..34fd7f99a9 Binary files /dev/null and b/icons/mob/mouthfluff.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 450269eda0..a4a86dc237 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/barkbox_fluff.dmi b/icons/obj/barkbox_fluff.dmi new file mode 100644 index 0000000000..e420e864e7 Binary files /dev/null and b/icons/obj/barkbox_fluff.dmi differ diff --git a/icons/obj/blackmarket.dmi b/icons/obj/blackmarket.dmi new file mode 100644 index 0000000000..99f4811ea6 Binary files /dev/null and b/icons/obj/blackmarket.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 9fa3e527ca..6b0dc9e63e 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index acd64bb424..26784cc796 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi index d7e0c9c24b..8540b2f392 100644 Binary files a/icons/obj/clothing/neck.dmi and b/icons/obj/clothing/neck.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index da3dbe6115..f689ee5068 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index a361d2bf6e..7b00d52f8f 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/icons/obj/eldritch.dmi b/icons/obj/eldritch.dmi index 646b12e734..8d9f96b607 100644 Binary files a/icons/obj/eldritch.dmi and b/icons/obj/eldritch.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index e8bd4790dc..40e00b431e 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 9ccfb9e7f8..bb426aed20 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index 11d02a46cc..97c3ea1409 100644 Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index 1ac941bae3..0010f08f3b 100644 Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index c70fe9d44e..68055d766d 100644 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/vending_restock.dmi b/icons/obj/vending_restock.dmi index 978a13803c..a48107546f 100644 Binary files a/icons/obj/vending_restock.dmi and b/icons/obj/vending_restock.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index cdbd49050a..0c59c3e711 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -254,13 +254,13 @@ /datum/gear/donator/toriball name = "Rainbow Tennis Ball" slot = SLOT_IN_BACKPACK - path = /obj/item/toy/tennis/rainbow + path = /obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow ckeywhitelist = list("annoymous35") /datum/gear/donator/izzyball name = "Katlin's Ball" slot = SLOT_IN_BACKPACK - path = /obj/item/toy/tennis/rainbow/izzy + path = /obj/item/toy/fluff/tennis_poly/tri/squeak/izzy ckeywhitelist = list("izzyinbox") /datum/gear/donator/cloak @@ -549,3 +549,8 @@ path = /obj/item/clothing/mask/breath/mmask ckeywhitelist = list("sneka") +/datum/gear/donator/smaiden + name = "Shrine Maiden" + slot = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/smaiden + ckeywhitelist = list("ultimarifox") diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index 0b700b11e2..466ee50474 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -9,33 +9,106 @@ subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS /datum/gear/backpack/tennis - name = "Classic Tennis Ball" - path = /obj/item/toy/tennis + name = "Polychromic Tennis Ball" + path = /obj/item/toy/fluff/tennis_poly subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS /datum/gear/backpack/tennis/red name = "Red Tennis Ball" - path = /obj/item/toy/tennis/red + path = /obj/item/toy/fluff/tennis_poly/red /datum/gear/backpack/tennis/yellow name = "Yellow Tennis Ball" - path = /obj/item/toy/tennis/yellow + path = /obj/item/toy/fluff/tennis_poly/yellow /datum/gear/backpack/tennis/green name = "Green Tennis Ball" - path = /obj/item/toy/tennis/green + path = /obj/item/toy/fluff/tennis_poly/green /datum/gear/backpack/tennis/cyan name = "Cyan Tennis Ball" - path = /obj/item/toy/tennis/cyan + path = /obj/item/toy/fluff/tennis_poly/cyan /datum/gear/backpack/tennis/blue name = "Blue Tennis Ball" - path = /obj/item/toy/tennis/blue + path = /obj/item/toy/fluff/tennis_poly/blue /datum/gear/backpack/tennis/purple name = "Purple Tennis Ball" - path = /obj/item/toy/tennis/purple + path = /obj/item/toy/fluff/tennis_poly/purple + +/datum/gear/backpack/tennis/tri + name = "Tri-color Polychromic Tennis Ball" + path = /obj/item/toy/fluff/tennis_poly/tri + cost = 3 + +/datum/gear/backpack/tennis/tri/squeak + name = "Squeakable Tri-color Polychromic Tennis Ball" + path = /obj/item/toy/fluff/tennis_poly/tri/squeak + cost = 6 + +/datum/gear/backpack/bone + name = "Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly + subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS + +/datum/gear/backpack/bone/red + name = "Red Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/red + +/datum/gear/backpack/bone/yellow + name = "Yellow Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/yellow + +/datum/gear/backpack/bone/green + name = "Green Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/green + +/datum/gear/backpack/bone/cyan + name = "Cyan Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/cyan + +/datum/gear/backpack/bone/blue + name = "Blue Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/blue + +/datum/gear/backpack/bone/purple + name = "Purple Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/purple + +/datum/gear/backpack/bone/squeak + name = "Squeakable Polychromic Bone" + path = /obj/item/toy/fluff/bone_poly/squeak + cost = 6 + +/datum/gear/backpack/frisbee + name = "Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly + subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS + +/datum/gear/backpack/frisbee/red + name = "Red Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly/red + +/datum/gear/backpack/frisbee/yellow + name = "Yellow Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly/yellow + +/datum/gear/backpack/frisbee/green + name = "Green Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly/green + +/datum/gear/backpack/frisbee/cyan + name = "Cyan Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly/cyan + +/datum/gear/backpack/frisbee/blue + name = "Blue Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly/blue + +/datum/gear/backpack/frisbee/purple + name = "Purple Polychromic Frisbee" + path = /obj/item/toy/fluff/frisbee_poly/purple /datum/gear/backpack/dildo name = "Customizable dildo" diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index 022d823291..945e0dfe12 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -199,6 +199,10 @@ name = "Tactitool Turtleneck" path = /obj/item/clothing/under/syndicate/cosmetic +/datum/gear/uniform/skirtleneck + name = "Tactitool Skirtleneck" + path = /obj/item/clothing/under/syndicate/cosmetic/skirt + /datum/gear/uniform/sweater name = "Cream Commando Sweater" path = /obj/item/clothing/under/sweater diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 3a3ecccc34..89734106cf 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -601,3 +601,12 @@ item_state = "mmask" mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' icon_state = "mmask" + +/obj/item/clothing/suit/smaiden + name = "shrine maiden" + desc = "Seems questionably tight for religious purposes." + icon_state = "smaiden" + item_state = "smaiden" + icon = 'icons/obj/custom.dmi' + mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' + mutantrace_variation = NONE diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm index a9334ca923..0adb12e5a1 100644 --- a/modular_citadel/code/modules/mob/cit_emotes.dm +++ b/modular_citadel/code/modules/mob/cit_emotes.dm @@ -321,3 +321,16 @@ else sound = pick('modular_citadel/sound/voice/human_female_pain_1.ogg', 'modular_citadel/sound/voice/human_female_pain_2.ogg', 'modular_citadel/sound/voice/human_female_pain_3.ogg', 'modular_citadel/sound/voice/human_female_scream_2.ogg', 'modular_citadel/sound/voice/human_female_scream_3.ogg', 'modular_citadel/sound/voice/human_female_scream_4.ogg') playsound(user, sound, 50, 0, 0) + +/datum/emote/living/clap1 + key = "clap1" + key_third_person = "claps" + message = "claps their hands together." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + restraint_check = TRUE + +/datum/emote/living/clap1/run_emote(mob/living/user, params) + if(!(. = ..())) + return + playsound(user, 'modular_citadel/sound/voice/clap.ogg', 50, 1, -1) diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index d7212f61d2..e5b81806e6 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -153,7 +153,7 @@ /obj/item/ammo_casing/energy/laser/pump projectile_type = /obj/item/projectile/beam/pump - e_cost = 350 + e_cost = 300 select_name = "kill" pellets = 6 variance = 15 @@ -189,5 +189,5 @@ name = "disabling blast" icon_state = "disablerslug" color = null - stamina = 13 + stamina = 15 range = 6 diff --git a/modular_citadel/icons/mob/inhands/balls_left.dmi b/modular_citadel/icons/mob/inhands/balls_left.dmi deleted file mode 100644 index 2e751d0f44..0000000000 Binary files a/modular_citadel/icons/mob/inhands/balls_left.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/inhands/balls_right.dmi b/modular_citadel/icons/mob/inhands/balls_right.dmi deleted file mode 100644 index 45ee6864f0..0000000000 Binary files a/modular_citadel/icons/mob/inhands/balls_right.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/mam_tails.dmi b/modular_citadel/icons/mob/mam_tails.dmi index a67c1b718c..7073328655 100644 Binary files a/modular_citadel/icons/mob/mam_tails.dmi and b/modular_citadel/icons/mob/mam_tails.dmi differ diff --git a/modular_citadel/icons/mob/mouthball.dmi b/modular_citadel/icons/mob/mouthball.dmi deleted file mode 100644 index b5c08dd648..0000000000 Binary files a/modular_citadel/icons/mob/mouthball.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/balls.dmi b/modular_citadel/icons/obj/balls.dmi deleted file mode 100644 index 9b9f4575b3..0000000000 Binary files a/modular_citadel/icons/obj/balls.dmi and /dev/null differ diff --git a/modular_citadel/sound/voice/clap.ogg b/modular_citadel/sound/voice/clap.ogg new file mode 100644 index 0000000000..03c4bdd392 Binary files /dev/null and b/modular_citadel/sound/voice/clap.ogg differ diff --git a/sound/ambience/VoidsEmbrace.ogg b/sound/ambience/VoidsEmbrace.ogg new file mode 100644 index 0000000000..0766dc1578 Binary files /dev/null and b/sound/ambience/VoidsEmbrace.ogg differ diff --git a/sound/magic/clockwork/ratvar_announce.ogg b/sound/magic/clockwork/ratvar_announce.ogg new file mode 100644 index 0000000000..6f997108c9 Binary files /dev/null and b/sound/magic/clockwork/ratvar_announce.ogg differ diff --git a/sound/magic/clockwork/ratvar_announce1.ogg b/sound/magic/clockwork/ratvar_announce1.ogg new file mode 100644 index 0000000000..08308cb1cd Binary files /dev/null and b/sound/magic/clockwork/ratvar_announce1.ogg differ diff --git a/sound/magic/clockwork/ratvar_announce2.ogg b/sound/magic/clockwork/ratvar_announce2.ogg new file mode 100644 index 0000000000..54a49c75c7 Binary files /dev/null and b/sound/magic/clockwork/ratvar_announce2.ogg differ diff --git a/sound/magic/clockwork/ratvarfire.ogg b/sound/magic/clockwork/ratvarfire.ogg new file mode 100644 index 0000000000..4b8a9be10a Binary files /dev/null and b/sound/magic/clockwork/ratvarfire.ogg differ diff --git a/sound/magic/domain.ogg b/sound/magic/domain.ogg new file mode 100644 index 0000000000..b08aedaad9 Binary files /dev/null and b/sound/magic/domain.ogg differ diff --git a/sound/magic/voidblink.ogg b/sound/magic/voidblink.ogg new file mode 100644 index 0000000000..7415601b90 Binary files /dev/null and b/sound/magic/voidblink.ogg differ diff --git a/sound/magic/voidclap.ogg b/sound/magic/voidclap.ogg new file mode 100644 index 0000000000..03c4bdd392 Binary files /dev/null and b/sound/magic/voidclap.ogg differ diff --git a/sound/magic/voidpull.ogg b/sound/magic/voidpull.ogg new file mode 100644 index 0000000000..703d3d4a76 Binary files /dev/null and b/sound/magic/voidpull.ogg differ diff --git a/sound/weapons/neovgre_laser.ogg b/sound/weapons/neovgre_laser.ogg index da97117ae8..c36e54fe87 100644 Binary files a/sound/weapons/neovgre_laser.ogg and b/sound/weapons/neovgre_laser.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 7879a87e32..03410ba0da 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -28,6 +28,7 @@ #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" +#include "code\__DEFINES\blackmarket.dm" #include "code\__DEFINES\botany.dm" #include "code\__DEFINES\callbacks.dm" #include "code\__DEFINES\cargo.dm" @@ -310,6 +311,7 @@ #include "code\controllers\subsystem\augury.dm" #include "code\controllers\subsystem\autotransfer.dm" #include "code\controllers\subsystem\blackbox.dm" +#include "code\controllers\subsystem\blackmarket.dm" #include "code\controllers\subsystem\chat.dm" #include "code\controllers\subsystem\communications.dm" #include "code\controllers\subsystem\dbcore.dm" @@ -705,6 +707,7 @@ #include "code\datums\weather\weather_types\floor_is_lava.dm" #include "code\datums\weather\weather_types\radiation_storm.dm" #include "code\datums\weather\weather_types\snow_storm.dm" +#include "code\datums\weather\weather_types\void_storm.dm" #include "code\datums\wires\_wires.dm" #include "code\datums\wires\airalarm.dm" #include "code\datums\wires\airlock.dm" @@ -1036,7 +1039,6 @@ #include "code\game\objects\items\airlock_painter.dm" #include "code\game\objects\items\apc_frame.dm" #include "code\game\objects\items\armor_kits.dm" -#include "code\game\objects\items\balls.dm" #include "code\game\objects\items\binoculars.dm" #include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\body_egg.dm" @@ -1070,6 +1072,7 @@ #include "code\game\objects\items\extinguisher.dm" #include "code\game\objects\items\fireaxe.dm" #include "code\game\objects\items\flamethrower.dm" +#include "code\game\objects\items\fluff.dm" #include "code\game\objects\items\gift.dm" #include "code\game\objects\items\granters.dm" #include "code\game\objects\items\handcuffs.dm" @@ -1617,6 +1620,7 @@ #include "code\modules\antagonists\clockcult\clock_items\clock_weapons\ratvarian_shield.dm" #include "code\modules\antagonists\clockcult\clock_items\clock_weapons\ratvarian_spear.dm" #include "code\modules\antagonists\clockcult\clock_mobs\_eminence.dm" +#include "code\modules\antagonists\clockcult\clock_mobs\clockwork_guardian.dm" #include "code\modules\antagonists\clockcult\clock_mobs\clockwork_marauder.dm" #include "code\modules\antagonists\clockcult\clock_scriptures\scripture_applications.dm" #include "code\modules\antagonists\clockcult\clock_scriptures\scripture_cyborg.dm" @@ -1671,9 +1675,11 @@ #include "code\modules\antagonists\eldritch_cult\eldritch_knowledge.dm" #include "code\modules\antagonists\eldritch_cult\eldritch_magic.dm" #include "code\modules\antagonists\eldritch_cult\eldritch_monster_antag.dm" +#include "code\modules\antagonists\eldritch_cult\eldritch_structures.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\ash_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\flesh_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\rust_lore.dm" +#include "code\modules\antagonists\eldritch_cult\knowledge\void_lore.dm" #include "code\modules\antagonists\ert\ert.dm" #include "code\modules\antagonists\fugitive\fugitive.dm" #include "code\modules\antagonists\fugitive\fugitive_outfits.dm" @@ -1865,6 +1871,15 @@ #include "code\modules\cargo\packs.dm" #include "code\modules\cargo\supplypod.dm" #include "code\modules\cargo\supplypod_beacon.dm" +#include "code\modules\cargo\blackmarket\blackmarket_item.dm" +#include "code\modules\cargo\blackmarket\blackmarket_market.dm" +#include "code\modules\cargo\blackmarket\blackmarket_telepad.dm" +#include "code\modules\cargo\blackmarket\blackmarket_uplink.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\clothing.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\consumables.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\misc.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\tools.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\weapons.dm" #include "code\modules\cargo\bounties\assistant.dm" #include "code\modules\cargo\bounties\botany.dm" #include "code\modules\cargo\bounties\chef.dm" @@ -2097,6 +2112,7 @@ #include "code\modules\events\wizard\summons.dm" #include "code\modules\fields\fields.dm" #include "code\modules\fields\gravity.dm" +#include "code\modules\fields\infinite_void.dm" #include "code\modules\fields\peaceborg_dampener.dm" #include "code\modules\fields\timestop.dm" #include "code\modules\fields\turf_objects.dm" @@ -3579,6 +3595,7 @@ #include "code\modules\vending\_vending.dm" #include "code\modules\vending\assist.dm" #include "code\modules\vending\autodrobe.dm" +#include "code\modules\vending\barkbox.dm" #include "code\modules\vending\boozeomat.dm" #include "code\modules\vending\cartridge.dm" #include "code\modules\vending\cigarette.dm" diff --git a/tgui/packages/tgui/interfaces/BlackmarketUplink.js b/tgui/packages/tgui/interfaces/BlackMarketUplink.js similarity index 99% rename from tgui/packages/tgui/interfaces/BlackmarketUplink.js rename to tgui/packages/tgui/interfaces/BlackMarketUplink.js index 8cfcff5756..877fe8b38b 100644 --- a/tgui/packages/tgui/interfaces/BlackmarketUplink.js +++ b/tgui/packages/tgui/interfaces/BlackMarketUplink.js @@ -15,7 +15,7 @@ export const BlackMarketUplink = (props, context) => { } = data; return ( diff --git a/tools/requirements.txt b/tools/requirements.txt index cf8552635d..20f350ca46 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1,6 +1,6 @@ pygit2==1.0.1 bidict==0.13.1 -Pillow==7.2.0 +Pillow==8.1.1 # changelogs PyYaml==5.3.1