diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm
index 0a2280a5a53..d41cfaa3a68 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm
@@ -1,34 +1,35 @@
"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/turf/closed/wall/shuttle/smooth/nodiagonal{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"c" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"d" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"e" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"f" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"g" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"h" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered)
-"i" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered)
-"j" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"k" = (/obj/machinery/computer/arcade/battle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"l" = (/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"m" = (/obj/effect/mob_spawn/human/golem/adamantine,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"n" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"o" = (/obj/item/weapon/resonator,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"p" = (/obj/machinery/mineral/ore_redemption,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"q" = (/obj/structure/statue/gold/rd,/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"r" = (/obj/machinery/computer/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"s" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"t" = (/obj/structure/table/wood,/obj/item/weapon/bedsheet/rd{desc = "Majestic."; layer = 3; name = "Royal Cape of the Liberator"; pixel_x = 5; pixel_y = 9},/obj/item/weapon/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"u" = (/obj/item/weapon/resonator/upgraded,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"v" = (/obj/machinery/autolathe,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"w" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"x" = (/obj/machinery/computer/arcade/orion_trail,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"y" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"z" = (/obj/structure/table/wood,/obj/item/weapon/surgical_drapes{pixel_x = 15},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"A" = (/obj/item/weapon/storage/firstaid/fire,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"B" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/areaeditor/blueprints{desc = "Use to build new structures in the wastes."; name = "land claim"},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"C" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/disk/design_disk/golem_shell,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"D" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
-"E" = (/obj/structure/ore_box,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
+"b" = (/turf/closed/wall/shuttle/smooth/nodiagonal{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"c" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"d" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"e" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"f" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"g" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"h" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered/golem_ship)
+"i" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered/golem_ship)
+"j" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"k" = (/obj/machinery/computer/arcade/battle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"l" = (/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"m" = (/obj/effect/mob_spawn/human/golem/adamantine,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"n" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"o" = (/obj/item/weapon/resonator,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"p" = (/obj/machinery/mineral/ore_redemption,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"q" = (/obj/structure/statue/gold/rd,/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"r" = (/obj/machinery/computer/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"s" = (/obj/machinery/bluespace_beacon,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"t" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"u" = (/obj/structure/table/wood,/obj/item/weapon/bedsheet/rd{desc = "Majestic."; layer = 3; name = "Royal Cape of the Liberator"; pixel_x = 5; pixel_y = 9},/obj/item/weapon/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"v" = (/obj/item/weapon/resonator/upgraded,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"w" = (/obj/machinery/autolathe,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"x" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"y" = (/obj/machinery/computer/arcade/orion_trail,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"z" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"A" = (/obj/structure/table/wood,/obj/item/weapon/surgical_drapes{pixel_x = 15},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"B" = (/obj/item/weapon/storage/firstaid/fire,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"C" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/areaeditor/blueprints{desc = "Use to build new structures in the wastes."; name = "land claim"},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"D" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/disk/design_disk/golem_shell,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"E" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
+"F" = (/obj/structure/ore_box,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaa
@@ -40,14 +41,14 @@ aabbbbjjbbbbjjbbbbbb
aabkllllmmbllllllnhi
aabllllloojlllllllhi
bbbjjbbbbbblllllpbbb
-bqrllllllljlllllljsj
-btlllllllljlllllljlj
-bbbjjbbbbbblllluvbbb
-aabllllloojllllllwhi
-aabxllllmmbyllzABChi
+bqrllllllljlslllljtj
+bulllllllljlllllljlj
+bbbjjbbbbbbllllvwbbb
+aabllllloojllllllxhi
+aabyllllmmbzllABCDhi
aabbbbjjbbbbjjbbbbbb
-aaaaabfffffffffffDhi
-aaaaabEEEEEEEefffDhi
+aaaaabfffffffffffEhi
+aaaaabFFFFFFFefffEhi
aaaaabbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm
new file mode 100644
index 00000000000..5d7751cb668
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm
@@ -0,0 +1,372 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/obj/structure/sign/mining/survival{
+ pixel_y = -32
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/turf/closed/wall/shuttle/survival/pod{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"e" = (
+/obj/structure/sign/mining/survival{
+ dir = 4;
+ icon_state = "survival";
+ pixel_x = 32;
+ tag = "icon-survival (EAST)"
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"f" = (
+/obj/structure/fans,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"g" = (
+/obj/machinery/smartfridge/survival_pod/empty,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"h" = (
+/obj/item/device/gps/computer,
+/obj/structure/tubes,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"i" = (
+/obj/structure/sign/mining/survival{
+ dir = 8;
+ icon_state = "survival";
+ pixel_x = -32;
+ tag = "icon-survival (WEST)"
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"j" = (
+/obj/effect/decal/cleanable/blood/drip,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"k" = (
+/obj/machinery/sleeper/survival_pod,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"l" = (
+/obj/item/weapon/pickaxe,
+/obj/effect/decal/cleanable/blood,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"m" = (
+/obj/structure/bed/pod,
+/obj/item/weapon/bedsheet/black,
+/obj/structure/tubes,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"n" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"o" = (
+/obj/effect/decal/cleanable/blood,
+/mob/living/simple_animal/hostile/asteroid/goliath/beast{
+ health = 0
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"p" = (
+/obj/structure/table/survival_pod,
+/obj/item/weapon/kitchen/knife/combat/survival,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"q" = (
+/obj/effect/mob_spawn/human/miner/explorer{
+ brute_damage = 150;
+ oxy_damage = 50
+ },
+/obj/effect/decal/cleanable/blood,
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/decal/cleanable/blood/footprints{
+ tag = "icon-blood1 (NORTH)";
+ icon_state = "blood1";
+ dir = 1
+ },
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"r" = (
+/obj/structure/tubes,
+/obj/item/weapon/crowbar,
+/obj/effect/decal/cleanable/blood/drip,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"s" = (
+/obj/effect/decal/cleanable/blood/footprints{
+ icon_state = "blood1"
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"t" = (
+/obj/effect/decal/cleanable/blood/footprints{
+ tag = "icon-blood1 (NORTH)";
+ icon_state = "blood1";
+ dir = 1
+ },
+/obj/machinery/door/airlock/survival_pod,
+/turf/open/floor/pod/dark{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"u" = (
+/obj/effect/decal/cleanable/blood/footprints{
+ tag = "icon-blood1 (WEST)";
+ icon_state = "blood1";
+ dir = 8
+ },
+/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{
+ tag = "icon-blood1 (WEST)";
+ icon_state = "blood1";
+ dir = 8
+ },
+/obj/effect/decal/cleanable/blood/footprints{
+ icon_state = "blood1"
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"w" = (
+/obj/structure/sign/mining/survival{
+ pixel_y = 32
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"x" = (
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/decal/cleanable/blood/footprints{
+ tag = "icon-blood1 (NORTH)";
+ icon_state = "blood1";
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"y" = (
+/obj/structure/sign/mining{
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/blood/footprints{
+ tag = "icon-blood1 (WEST)";
+ icon_state = "blood1";
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"z" = (
+/obj/effect/decal/cleanable/blood/footprints{
+ tag = "icon-blood1 (WEST)";
+ icon_state = "blood1";
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"A" = (
+/obj/effect/decal/cleanable/blood/footprints{
+ icon_state = "blood1"
+ },
+/obj/effect/decal/cleanable/blood/drip,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+b
+b
+b
+b
+b
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+b
+b
+e
+b
+e
+b
+b
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+b
+d
+d
+d
+d
+d
+b
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+b
+c
+d
+f
+k
+p
+d
+w
+b
+b
+"}
+(6,1,1) = {"
+a
+a
+b
+b
+d
+g
+l
+q
+t
+x
+b
+b
+"}
+(7,1,1) = {"
+a
+b
+b
+c
+d
+h
+m
+r
+d
+y
+b
+b
+"}
+(8,1,1) = {"
+a
+a
+b
+b
+d
+d
+d
+d
+d
+z
+j
+j
+"}
+(9,1,1) = {"
+a
+a
+a
+b
+b
+i
+b
+i
+u
+A
+b
+b
+"}
+(10,1,1) = {"
+a
+a
+a
+b
+b
+j
+n
+s
+v
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+o
+j
+b
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm
new file mode 100644
index 00000000000..dc5f71c3e89
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm
@@ -0,0 +1,877 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/closed/mineral/volcanic/lava_land_surface,
+/area/lavaland/underground)
+"c" = (
+/turf/template_noop,
+/area/lavaland/underground)
+"d" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/underground)
+"e" = (
+/obj/effect/decal/remains/human,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/underground)
+"f" = (
+/turf/open/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/underground)
+"g" = (
+/turf/closed/indestructible/riveted{
+ icon = 'icons/turf/walls/iron_wall.dmi';
+ icon_state = "iron";
+ name = "dense wall"
+ },
+/area/ruin/powered)
+"h" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"i" = (
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"j" = (
+/mob/living/simple_animal/hostile/skeleton,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"k" = (
+/obj/structure/bodycontainer/morgue{
+ desc = "An oddly modernized tomb, at least compared to where it currently is.";
+ name = "tomb"
+ },
+/obj/effect/mob_spawn/human/skeleton,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"l" = (
+/obj/structure/bodycontainer/morgue{
+ desc = "An oddly modernized tomb, at least compared to where it currently is.";
+ name = "tomb"
+ },
+/obj/effect/mob_spawn/human/skeleton,
+/obj/item/weapon/shovel/cursed,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"m" = (
+/obj/item/weapon/grown/bananapeel,
+/obj/structure/mineral_door/transparent/diamond,
+/turf/open/floor/vault{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"n" = (
+/obj/item/weapon/ore/diamond,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"o" = (
+/turf/open/floor/vault{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"p" = (
+/obj/item/weapon/ore/gold,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"q" = (
+/turf/open/floor/plating/lava/smooth/lava_land_surface,
+/area/ruin/powered)
+"r" = (
+/obj/structure/bodycontainer/morgue{
+ desc = "An oddly modernized tomb, at least compared to where it currently is.";
+ name = "tomb"
+ },
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"s" = (
+/obj/structure/table,
+/obj/item/weapon/tome,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"t" = (
+/obj/item/weapon/grown/bananapeel,
+/obj/structure/mineral_door/silver,
+/turf/open/floor/vault{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"u" = (
+/obj/item/weapon/ore/bananium,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"v" = (
+/obj/item/weapon/grown/bananapeel,
+/obj/structure/mineral_door/gold,
+/turf/open/floor/vault{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"w" = (
+/obj/structure/table/optable/abductor{
+ desc = "A strange, alien-like table for cutting up things, like people.";
+ name = "strange alien slab"
+ },
+/obj/effect/gibspawner/human,
+/obj/effect/mob_spawn/human/skeleton,
+/obj/item/weapon/veilrender/honkrender,
+/obj/item/clothing/mask/gas/clown_hat,
+/turf/open/floor/vault{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"x" = (
+/obj/structure/table,
+/obj/item/weapon/spellbook/oneuse/charge,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"y" = (
+/obj/structure/bodycontainer/morgue{
+ desc = "An oddly modernized tomb, at least compared to where it currently is.";
+ name = "tomb"
+ },
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"z" = (
+/obj/item/weapon/ore/uranium,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"A" = (
+/obj/item/weapon/ore/plasma,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"B" = (
+/obj/item/weapon/grown/bananapeel,
+/obj/structure/mineral_door/iron,
+/turf/open/floor/vault{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"C" = (
+/obj/structure/table,
+/obj/item/weapon/twohanded/spear,
+/obj/item/weapon/shield/riot/buckler,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"D" = (
+/obj/item/weapon/grown/bananapeel,
+/obj/structure/mineral_door/iron,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+d
+d
+e
+d
+b
+b
+d
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+d
+b
+b
+b
+e
+b
+b
+b
+b
+b
+e
+d
+d
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+b
+a
+e
+d
+d
+b
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+f
+f
+d
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+b
+b
+d
+d
+e
+b
+g
+k
+h
+j
+k
+j
+x
+y
+g
+b
+b
+f
+d
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+b
+b
+b
+d
+f
+b
+g
+g
+j
+i
+i
+i
+i
+i
+j
+g
+b
+f
+f
+e
+d
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+b
+b
+b
+e
+b
+g
+g
+g
+g
+g
+t
+g
+t
+g
+g
+g
+g
+e
+b
+b
+b
+a
+a
+"}
+(8,1,1) = {"
+a
+b
+b
+b
+g
+g
+g
+g
+g
+n
+o
+o
+o
+i
+o
+o
+o
+z
+g
+g
+b
+b
+b
+b
+b
+"}
+(9,1,1) = {"
+a
+b
+b
+b
+g
+h
+i
+j
+g
+o
+n
+o
+o
+i
+o
+o
+z
+o
+g
+g
+g
+g
+g
+b
+b
+"}
+(10,1,1) = {"
+a
+a
+b
+b
+g
+i
+k
+i
+g
+o
+i
+q
+q
+i
+q
+q
+i
+o
+g
+C
+C
+C
+g
+b
+b
+"}
+(11,1,1) = {"
+a
+a
+c
+d
+g
+i
+i
+i
+g
+o
+q
+i
+q
+i
+q
+i
+q
+o
+g
+i
+i
+i
+g
+b
+b
+"}
+(12,1,1) = {"
+a
+a
+b
+e
+g
+j
+i
+i
+m
+o
+q
+q
+o
+u
+o
+q
+q
+o
+B
+i
+j
+i
+D
+b
+b
+"}
+(13,1,1) = {"
+a
+a
+b
+b
+g
+i
+l
+i
+g
+i
+i
+i
+u
+w
+u
+i
+i
+i
+g
+i
+i
+i
+g
+d
+d
+"}
+(14,1,1) = {"
+a
+a
+b
+b
+g
+j
+i
+i
+m
+o
+q
+q
+o
+u
+o
+q
+q
+o
+B
+i
+j
+i
+D
+b
+b
+"}
+(15,1,1) = {"
+a
+a
+b
+b
+g
+i
+i
+i
+g
+o
+q
+i
+q
+i
+q
+i
+q
+o
+g
+i
+i
+i
+g
+b
+b
+"}
+(16,1,1) = {"
+a
+a
+b
+e
+g
+i
+k
+i
+g
+o
+i
+q
+q
+i
+q
+q
+i
+o
+g
+C
+C
+C
+g
+b
+b
+"}
+(17,1,1) = {"
+a
+a
+b
+d
+g
+h
+i
+j
+g
+o
+p
+o
+o
+i
+o
+o
+A
+o
+g
+g
+g
+g
+g
+b
+b
+"}
+(18,1,1) = {"
+a
+a
+b
+f
+g
+g
+g
+g
+g
+p
+o
+o
+o
+i
+o
+o
+o
+A
+g
+g
+b
+e
+b
+b
+b
+"}
+(19,1,1) = {"
+a
+a
+b
+d
+b
+b
+d
+g
+g
+g
+g
+g
+v
+g
+v
+g
+g
+g
+g
+b
+e
+d
+d
+d
+d
+"}
+(20,1,1) = {"
+a
+a
+a
+a
+b
+b
+e
+d
+g
+g
+r
+s
+i
+k
+i
+h
+k
+g
+b
+b
+d
+f
+d
+a
+a
+"}
+(21,1,1) = {"
+a
+a
+a
+a
+a
+b
+b
+e
+d
+g
+j
+i
+j
+i
+j
+i
+j
+g
+b
+e
+d
+a
+a
+a
+a
+"}
+(22,1,1) = {"
+a
+a
+a
+a
+a
+b
+b
+b
+d
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+b
+b
+a
+a
+a
+a
+"}
+(23,1,1) = {"
+a
+a
+a
+a
+a
+d
+b
+b
+f
+b
+b
+b
+b
+b
+e
+f
+b
+b
+b
+b
+b
+a
+a
+a
+a
+"}
+(24,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+d
+e
+b
+b
+d
+d
+b
+b
+a
+a
+a
+a
+a
+a
+"}
+(25,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm
new file mode 100644
index 00000000000..5e745c1c7d8
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm
@@ -0,0 +1,2489 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ac" = (
+/obj/item/stack/rods,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ad" = (
+/obj/item/stack/sheet/metal,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ae" = (
+/turf/open/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"af" = (
+/obj/item/stack/rods,
+/turf/open/floor/plating{
+ baseturf = /turf/open/chasm/straight_down/lava_land_surface
+ },
+/area/lavaland/surface/outdoors)
+"ag" = (
+/turf/open/floor/plating{
+ baseturf = /turf/open/chasm/straight_down/lava_land_surface
+ },
+/area/lavaland/surface/outdoors)
+"ah" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/obj/item/weapon/gun/projectile/revolver/nagant,
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/ammo_casing/a357,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ai" = (
+/obj/item/weapon/c4,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"aj" = (
+/turf/closed/wall/r_wall{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"ak" = (
+/obj/item/stack/sheet/plasteel,
+/obj/item/ammo_casing/a357,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"al" = (
+/obj/item/stack/sheet/plasteel,
+/obj/item/stack/rods,
+/obj/item/ammo_casing/a357,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"am" = (
+/obj/item/stack/rods,
+/obj/item/ammo_casing/a357,
+/obj/item/ammo_casing/mm556x45,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"an" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/obj/item/stack/sheet/plasteel,
+/obj/item/weapon/gun/projectile/shotgun/boltaction,
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/ammo_casing/mm556x45,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"ao" = (
+/obj/structure/filingcabinet,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"ap" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 4
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aq" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"ar" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/item/weapon/gun/projectile/automatic/pistol/APS,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"as" = (
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"at" = (
+/obj/item/ammo_casing/mm556x45,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"au" = (
+/obj/item/ammo_casing/a357,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"av" = (
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aw" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 8
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"ax" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 4
+ },
+/obj/item/weapon/shard,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"ay" = (
+/obj/effect/gibspawner/human,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"az" = (
+/obj/machinery/constructable_frame/machine_frame{
+ desc = "A specialized hypersleep chamber meant to keep its occupent in suspended animation for long periods of time. The initials 'A.D' are marked on a specialized plaque. The hypersleeper is empty. ";
+ dir = 2;
+ icon = 'icons/obj/Cryogenic2.dmi';
+ icon_state = "sleeper-o";
+ name = "broken hypersleep chamber";
+ pixel_y = 3
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aA" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aB" = (
+/obj/structure/filingcabinet,
+/obj/item/weapon/paper/pamphlet{
+ icon = 'icons/obj/items.dmi';
+ icon_state = "blueprints";
+ info = "A strange looking set of blueprints with the actual schematics for whatever was once on it ripped out in what appears to be in a haste. The top of what remains of the blueprints spells out 'aus der Asche'.";
+ name = "ripped blueprints"
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aC" = (
+/obj/item/weapon/shard,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aD" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aE" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aF" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/structure/table_frame,
+/obj/effect/decal/cleanable/blood/old,
+/obj/machinery/light,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aG" = (
+/obj/item/stack/sheet/metal,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aH" = (
+/obj/structure/table,
+/obj/machinery/light,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aI" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "lavagerman"
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aJ" = (
+/turf/open/floor/plasteel/stairs{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aK" = (
+/mob/living/simple_animal/hostile/wwii/bomber,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aL" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aM" = (
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aN" = (
+/obj/item/ammo_casing/c9mm,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aO" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aP" = (
+/obj/structure/table,
+/obj/item/device/flashlight/lamp,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aQ" = (
+/mob/living/simple_animal/hostile/wwii/melee,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aR" = (
+/obj/effect/spawner/lootdrop/crate_spawner,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aS" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aT" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/ammo_casing/c9mm,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aU" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aV" = (
+/obj/effect/gibspawner/human,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aW" = (
+/obj/structure/closet/crate,
+/obj/item/weapon/dnainjector/dwarf,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aX" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/item/weapon/storage/firstaid/regular{
+ empty = 1;
+ name = "first-aid kit"
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aY" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"aZ" = (
+/obj/structure/closet/crate,
+/obj/item/weapon/dnainjector/timed/hulk,
+/obj/item/weapon/dnainjector/wackymut,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"ba" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bb" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bc" = (
+/obj/structure/table,
+/obj/item/weapon/paper_bin,
+/obj/item/weapon/pen,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bd" = (
+/obj/item/weapon/c4,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"be" = (
+/obj/item/stack/sheet/plasteel,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bf" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bg" = (
+/obj/structure/closet/crate,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bh" = (
+/obj/structure/table,
+/obj/item/weapon/paper_bin,
+/obj/item/weapon/pen/edagger,
+/obj/item/weapon/storage/firstaid/regular,
+/turf/open/floor/plasteel/black{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bi" = (
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bj" = (
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bk" = (
+/turf/closed/wall{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bl" = (
+/obj/machinery/door/poddoor{
+ id = "lavagerman"
+ },
+/turf/open/floor/plasteel{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bm" = (
+/obj/item/stack/rods,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"bn" = (
+/obj/item/ammo_casing/c9mm,
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bo" = (
+/obj/item/ammo_casing/c9mm,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bp" = (
+/obj/machinery/door/poddoor{
+ id = "lavagerman1";
+ name = "secure storage a"
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bq" = (
+/obj/item/stack/sheet/plasteel,
+/turf/open/floor/plasteel/stairs{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"br" = (
+/obj/item/stack/sheet/metal,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ icon_plating = "platingdmg1";
+ icon_state = "platingdmg1"
+ },
+/area/ruin/powered)
+"bs" = (
+/obj/machinery/door/poddoor{
+ id = "lavagerman2";
+ name = "secure storage b"
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bt" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bu" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/item/weapon/gun/projectile/automatic/pistol/APS,
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/ammo_casing/c9mm,
+/obj/item/ammo_casing/c9mm,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bv" = (
+/obj/effect/gibspawner/human,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bw" = (
+/obj/machinery/button/door{
+ id = "lavagerman1";
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bx" = (
+/obj/machinery/door/airlock/highsecurity,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"by" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bz" = (
+/obj/machinery/button/door{
+ id = "lavagerman2";
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bA" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bB" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bC" = (
+/obj/item/ammo_casing/a357,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bD" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bE" = (
+/obj/item/stack/sheet/metal,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bF" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bG" = (
+/obj/structure/table_frame,
+/obj/item/stack/sheet/metal,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bH" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/ammo_casing/c9mm,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bI" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bJ" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/ushanka;
+ name = "russian remains";
+ uniform = /obj/item/clothing/under/soviet
+ },
+/obj/item/weapon/gun/projectile/shotgun/boltaction,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bK" = (
+/obj/structure/table,
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bL" = (
+/obj/effect/mob_spawn/human/skeleton{
+ helmet = /obj/item/clothing/head/helmet/stahlhelm;
+ name = "german remains";
+ uniform = /obj/item/clothing/under/wwii
+ },
+/obj/item/weapon/gun/projectile/automatic/pistol/APS,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bM" = (
+/obj/machinery/door/poddoor{
+ id = "lavagerman"
+ },
+/turf/open/floor/plasteel/neutral{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bN" = (
+/obj/machinery/door/airlock/glass_external,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bO" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 8
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bP" = (
+/obj/machinery/porta_turret/stationary,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bQ" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 4
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bR" = (
+/obj/structure/sign/xeno_warning_mining{
+ pixel_y = -32
+ },
+/obj/structure/closet/emcloset,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bS" = (
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bT" = (
+/obj/structure/sign/xeno_warning_mining{
+ pixel_y = -32
+ },
+/obj/item/weapon/rcd/loaded,
+/obj/structure/closet/emcloset,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bU" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 8
+ },
+/obj/structure/window{
+ tag = "icon-rwindow";
+ icon_state = "rwindow";
+ dir = 2
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bV" = (
+/obj/structure/window{
+ tag = "icon-rwindow";
+ icon_state = "rwindow";
+ dir = 2
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+"bW" = (
+/obj/structure/window{
+ icon_state = "rwindow";
+ dir = 4
+ },
+/obj/structure/window{
+ tag = "icon-rwindow";
+ icon_state = "rwindow";
+ dir = 2
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ },
+/area/ruin/powered)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+aa
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+aj
+bi
+bn
+bi
+bA
+bA
+bA
+bi
+aj
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+aj
+bi
+bo
+bu
+bi
+bi
+bi
+bi
+aj
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(9,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+bj
+bi
+bv
+bo
+bi
+bi
+bi
+aj
+ab
+ae
+ae
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+bk
+bk
+bw
+bi
+bi
+bF
+bi
+aj
+ab
+ae
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aj
+ao
+av
+aP
+aX
+bc
+av
+bp
+bi
+bA
+bA
+bI
+bi
+aj
+ab
+ae
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aj
+ao
+av
+aQ
+aY
+av
+av
+bk
+as
+bk
+bk
+bk
+bM
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+ao
+aK
+aR
+aZ
+aR
+aR
+bk
+bi
+bi
+bD
+bi
+bi
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+bk
+bi
+bB
+bC
+bi
+bi
+aj
+bO
+bU
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(15,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+bi
+bC
+bi
+bF
+bi
+aj
+bP
+bV
+ae
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ab
+aj
+aj
+ao
+ao
+aB
+ao
+aj
+aj
+aL
+aM
+aM
+aL
+aj
+aj
+bi
+bi
+bi
+bi
+bi
+aj
+bQ
+bW
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ae
+ab
+aj
+aj
+ap
+ax
+av
+ap
+aj
+aj
+aM
+aM
+aM
+aM
+aj
+aj
+bx
+bk
+bk
+bk
+bk
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ae
+ab
+aj
+aj
+aq
+av
+aC
+aF
+aj
+aj
+aM
+aM
+aS
+aM
+aj
+aj
+bi
+bD
+bi
+bi
+bi
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(19,1,1) = {"
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ab
+ab
+aj
+aj
+ar
+ay
+av
+aG
+aj
+aj
+aM
+aS
+aN
+aM
+aj
+aj
+bi
+bi
+bi
+by
+bi
+bk
+aj
+aj
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(20,1,1) = {"
+aa
+aa
+ac
+ab
+ae
+ae
+ae
+ab
+ad
+ak
+aj
+as
+av
+au
+aD
+aI
+aJ
+aM
+aM
+aM
+bd
+bl
+bq
+by
+bB
+bi
+bi
+bi
+bk
+bR
+aj
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(21,1,1) = {"
+aa
+aa
+ad
+ab
+af
+ae
+ag
+ab
+ah
+al
+am
+at
+az
+aD
+av
+aj
+aj
+aM
+aT
+aM
+be
+bm
+br
+bi
+bi
+bi
+bi
+bi
+bN
+bS
+bN
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ab
+ai
+aj
+an
+au
+aA
+av
+av
+aI
+aJ
+aM
+aU
+aM
+aN
+bl
+bq
+bi
+bi
+bi
+bJ
+bi
+bk
+bT
+aj
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(23,1,1) = {"
+aa
+aa
+aa
+ad
+ae
+ae
+ae
+ab
+ab
+aj
+aj
+av
+av
+av
+av
+aj
+aj
+aM
+aM
+aM
+bf
+aj
+aj
+bi
+by
+bi
+bi
+bi
+bk
+aj
+aj
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(24,1,1) = {"
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ab
+ab
+aj
+aj
+aq
+av
+aE
+aH
+aj
+aj
+aN
+aM
+aM
+aM
+aj
+aj
+bi
+bt
+bi
+bi
+bi
+aj
+ab
+ab
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(25,1,1) = {"
+aa
+aa
+aa
+ab
+ae
+ae
+ae
+ae
+ab
+aj
+aj
+aw
+aw
+aw
+aw
+aj
+aj
+aM
+aV
+aM
+aM
+aj
+aj
+bx
+bk
+bk
+bk
+bk
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(26,1,1) = {"
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ab
+aj
+aj
+ao
+ao
+ao
+ao
+aj
+aj
+aO
+aM
+aM
+aO
+aj
+aj
+bi
+bi
+bi
+bi
+bi
+aj
+bO
+bU
+ae
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(27,1,1) = {"
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+bi
+bi
+bi
+bi
+bi
+aj
+bP
+bV
+ae
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(28,1,1) = {"
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+bk
+bi
+bB
+bi
+by
+bi
+aj
+bQ
+bW
+ae
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(29,1,1) = {"
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+ao
+aK
+aW
+aR
+bg
+aR
+bk
+bi
+bE
+bi
+bt
+bi
+aj
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(30,1,1) = {"
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+ao
+av
+aQ
+ba
+av
+av
+bk
+bk
+bk
+br
+bk
+bM
+aj
+ab
+ae
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+ao
+av
+aP
+bb
+bh
+av
+bs
+bi
+bA
+bG
+bK
+bi
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+bk
+bk
+bz
+bi
+bi
+bi
+bi
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+bj
+bi
+bi
+bF
+bo
+bL
+bo
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aj
+bi
+bi
+bi
+bi
+bH
+bi
+bo
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aj
+bi
+bt
+bi
+bA
+bA
+bA
+bi
+aj
+ab
+ab
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+aj
+ab
+ab
+ae
+ae
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/birdstation.dm b/_maps/birdstation.dm
index e35fa7106cf..b1f4350ed1e 100644
--- a/_maps/birdstation.dm
+++ b/_maps/birdstation.dm
@@ -31,7 +31,6 @@ A small map intended for lowpop(40 players and less).
#if !defined(MAP_OVERRIDE_FILES)
#define MAP_OVERRIDE_FILES
#include "map_files\BirdStation\telecomms.dm"
- #include "map_files\BirdStation\misc.dm"
#include "map_files\BirdStation\job\job_changes.dm"
#include "map_files\BirdStation\job\removed_jobs.dm"
#endif
@@ -40,4 +39,4 @@ A small map intended for lowpop(40 players and less).
#warn a map has already been included, ignoring birdstation.
-#endif
\ No newline at end of file
+#endif
diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm
index b08b7ff7e43..23fe48b8871 100644
--- a/_maps/map_files/BirdStation/BirdStation.dmm
+++ b/_maps/map_files/BirdStation/BirdStation.dmm
@@ -1469,7 +1469,7 @@
"aCm" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk,/turf/open/floor/plating,/area/maintenance/disposal)
"aCn" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/light,/turf/open/floor/plating,/area/maintenance/disposal)
"aCo" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/door/poddoor{id = "crusherdoor"; layer = 3.1; name = "crusher safety blast door"},/turf/open/floor/plating,/area/maintenance/disposal)
-"aCp" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler/birdstation{emagged = 1; name = "dangerous old crusher"},/turf/open/floor/plating,/area/maintenance/disposal)
+"aCp" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler/deathtrap,/turf/open/floor/plating,/area/maintenance/disposal)
"aCq" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/turf/open/floor/plating,/area/maintenance/disposal)
"aCr" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/open/floor/plating,/area/maintenance/disposal)
"aCs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/maintenance/disposal)
diff --git a/_maps/map_files/BirdStation/job/job_changes.dm b/_maps/map_files/BirdStation/job/job_changes.dm
index 679c212c7ee..cca341cc117 100644
--- a/_maps/map_files/BirdStation/job/job_changes.dm
+++ b/_maps/map_files/BirdStation/job/job_changes.dm
@@ -6,7 +6,7 @@
supervisors = "the captain and the head of personnel"
/datum/outfit/job/New()
- box = /obj/item/weapon/storage/box/birdsurv
+ box = /obj/item/weapon/storage/box/survival/radio
/datum/job/assistant // Here so assistant appears on the top of the select job list.
@@ -29,7 +29,7 @@
..()
/datum/outfit/job/hos/New()
- box = /obj/item/weapon/storage/box/birdsec
+ box = /obj/item/weapon/storage/box/security/radio
/datum/job/officer/New()
..()
@@ -39,7 +39,7 @@
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
/datum/outfit/job/officer/New()
- box = /obj/item/weapon/storage/box/birdsec
+ box = /obj/item/weapon/storage/box/security/radio
/datum/job/detective/New()
..()
@@ -47,7 +47,7 @@
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
/datum/outfit/job/detective/New()
- box = /obj/item/weapon/storage/box/birdsec
+ box = /obj/item/weapon/storage/box/security/radio
//Medbay
@@ -69,7 +69,7 @@
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat)
/datum/outfit/job/engineer/New()
- box = /obj/item/weapon/storage/box/birdeng
+ box = /obj/item/weapon/storage/box/engineer/radio
//Science
@@ -93,7 +93,7 @@
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
/datum/outfit/job/mining/New()
- box = /obj/item/weapon/storage/box/birdeng
+ box = /obj/item/weapon/storage/box/engineer/radio
//Service
@@ -123,4 +123,4 @@
/datum/job/clown/New()
..()
- supervisors = "nobody but yourself" //Honk
\ No newline at end of file
+ supervisors = "nobody but yourself" //Honk
diff --git a/_maps/map_files/BirdStation/misc.dm b/_maps/map_files/BirdStation/misc.dm
deleted file mode 100644
index b86c9247888..00000000000
--- a/_maps/map_files/BirdStation/misc.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-
-// modified crusher
-// only does 120 brute damage and won't eat the victims items
-
-
-/obj/machinery/recycler/birdstation/eat(mob/living/L)
-
- L.loc = src.loc
-
- if(istype(L,/mob/living/silicon))
- playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- else
- playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
-
- var/gib = 1
- if(istype(L,/mob/living/carbon))
- gib = 0
- add_blood(L)
-
- if(!blood && !istype(L,/mob/living/silicon))
- blood = 1
- update_icon()
- L.Paralyse(5)
- if(gib || emagged == 2)
- L.gib()
- else if(emagged == 1)
- L.adjustBruteLoss(120)
-
-// we don't want anyone to dismantle or disable the crusher easily
-
-/obj/machinery/recycler/birdstation/attackby(obj/item/I, mob/user, params)
- if (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/screwdriver))
- return
-
-
-//special birdstation survival boxes
-
-/obj/item/weapon/storage/box/birdsurv/New()
- ..()
- contents = list()
- new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/internals/emergency_oxygen(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
- new /obj/item/device/radio/off(src)
- return
-
-/obj/item/weapon/storage/box/birdeng/New()
- ..()
- contents = list()
- new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
- new /obj/item/device/radio/off(src)
- return
-
-/obj/item/weapon/storage/box/birdsec/New()
- ..()
- contents = list()
- new /obj/item/clothing/mask/gas/sechailer(src)
- new /obj/item/weapon/tank/internals/emergency_oxygen(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
- new /obj/item/device/radio/off(src)
- return
diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm
index 801662b4f4d..edc3968db14 100644
--- a/_maps/map_files/DreamStation/dreamstation04.dmm
+++ b/_maps/map_files/DreamStation/dreamstation04.dmm
@@ -13394,6 +13394,7 @@
pixel_x = 0;
pixel_y = 0
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
tag = "icon-escape (NORTH)";
icon_state = "escape";
@@ -70349,6 +70350,7 @@
dir = 4;
network = list("SS13","Sci")
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -70931,6 +70933,7 @@
icon_state = "tube1";
dir = 8
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
index f030f88a39d..217c291374e 100644
--- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
+++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
@@ -26523,6 +26523,7 @@
/obj/machinery/camera{
c_tag = "Atmospherics Monitoring"
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "cautioncorner";
dir = 1
@@ -61750,6 +61751,12 @@
icon_state = "diagonalWall3"
},
/area/shuttle/syndicate)
+"ckj" = (
+/obj/machinery/portable_atmospherics/canister/bz,
+/turf/open/floor/plasteel{
+ icon_state = "floorgrime"
+ },
+/area/toxins/storage)
(1,1,1) = {"
aaa
@@ -89101,7 +89108,7 @@ aze
aAw
aBE
aCO
-aFp
+ckj
aFn
aGo
aCO
diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
similarity index 99%
rename from _maps/map_files/MetaStation/MetaStation.v41I.dmm
rename to _maps/map_files/MetaStation/MetaStation.dmm
index f7fb1af28c9..f75d12eaf7b 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -3422,9 +3422,7 @@
name = "\improper Recreation Area"
})
"afB" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
+/obj/structure/easel,
/turf/open/floor/plasteel{
icon_state = "dark"
},
@@ -3752,7 +3750,6 @@
},
/area/ai_monitored/security/armory)
"agf" = (
-/obj/machinery/flasher/portable,
/obj/item/device/radio/intercom{
freerange = 0;
frequency = 1459;
@@ -3760,6 +3757,20 @@
pixel_x = 0;
pixel_y = 24
},
+/obj/structure/rack,
+/obj/item/weapon/grenade/barrier{
+ pixel_x = -3;
+ pixel_y = 1
+ },
+/obj/item/weapon/grenade/barrier,
+/obj/item/weapon/grenade/barrier{
+ pixel_x = 3;
+ pixel_y = -1
+ },
+/obj/item/weapon/grenade/barrier{
+ pixel_x = 6;
+ pixel_y = -2
+ },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 1
@@ -3767,9 +3778,13 @@
/area/ai_monitored/security/armory)
"agg" = (
/mob/living/simple_animal/bot/secbot{
- health = 35;
- name = "Securitron #359";
- on = 0
+ arrest_type = 1;
+ health = 45;
+ icon_state = "secbot1";
+ idcheck = 1;
+ name = "Sergeant-at-Armsky";
+ on = 1;
+ weaponscheck = 1
},
/turf/open/floor/plasteel{
icon_state = "vault";
@@ -4263,13 +4278,14 @@
},
/area/ai_monitored/security/armory)
"agX" = (
-/obj/machinery/flasher/portable,
/obj/machinery/airalarm{
dir = 4;
locked = 0;
pixel_x = -23;
pixel_y = 0
},
+/obj/structure/rack,
+/obj/item/weapon/storage/fancy,
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 1
@@ -4666,7 +4682,14 @@
d2 = 4;
icon_state = "2-4"
},
-/obj/machinery/flasher/portable,
+/obj/structure/rack,
+/obj/item/weapon/storage/box/flashes{
+ pixel_x = 3
+ },
+/obj/item/weapon/storage/box/teargas{
+ pixel_x = 1;
+ pixel_y = -2
+ },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 1
@@ -4728,7 +4751,6 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/item/weapon/storage/box/teargas,
/obj/machinery/button/door{
id = "armory";
name = "Armory Shutters";
@@ -5042,6 +5064,7 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"aio" = (
+/obj/structure/easel,
/turf/open/floor/plating,
/area/maintenance/disposal)
"aip" = (
@@ -5594,7 +5617,7 @@
name = "HIGH VOLTAGE";
pixel_y = 0
},
-/turf/closed/wall/r_wall,
+/turf/closed/wall,
/area/maintenance/auxsolarport)
"ajp" = (
/obj/structure/table,
@@ -5736,6 +5759,10 @@
lootcount = 2;
name = "2maintenance loot spawner"
},
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 28
+ },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 4
@@ -6455,7 +6482,6 @@
},
/area/security/warden)
"akI" = (
-/obj/item/weapon/grenade/barrier,
/obj/structure/extinguisher_cabinet{
pixel_x = -27;
pixel_y = 0
@@ -6465,12 +6491,13 @@
dir = 4;
network = list("SS13")
},
+/obj/machinery/flasher/portable,
/turf/open/floor/plasteel{
icon_state = "bot"
},
/area/security/warden)
"akJ" = (
-/obj/item/weapon/grenade/barrier,
+/obj/machinery/flasher/portable,
/turf/open/floor/plasteel{
icon_state = "bot"
},
@@ -8159,10 +8186,6 @@
/obj/structure/filingcabinet/security{
pixel_x = 4
},
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 28
- },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 10
@@ -8178,6 +8201,11 @@
/obj/item/weapon/storage/lockbox/loyalty,
/obj/item/weapon/reagent_containers/glass/bottle/morphine,
/obj/machinery/light/small,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -26;
+ pixel_y = 0
+ },
/turf/open/floor/plasteel{
icon_state = "bot"
},
@@ -9297,7 +9325,7 @@
},
/obj/item/weapon/storage/belt{
desc = "Can hold quite a lot of stuff.";
- name = "mutli-belt"
+ name = "multi-belt"
},
/obj/item/clothing/gloves/color/fyellow,
/obj/effect/spawner/lootdrop/maintenance,
@@ -9379,7 +9407,7 @@
/turf/open/floor/plating,
/area/engine/gravity_generator)
"apu" = (
-/turf/closed/wall/r_wall,
+/turf/closed/wall,
/area/maintenance/auxsolarstarboard)
"apv" = (
/obj/machinery/power/solar_control{
@@ -10349,11 +10377,11 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"arf" = (
-/obj/effect/decal/cleanable/blood,
/obj/structure/chair,
/obj/item/weapon/restraints/handcuffs,
/obj/effect/decal/remains/human,
/obj/item/clothing/under/soviet,
+/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating,
/area/maintenance/fore)
"arg" = (
@@ -11957,7 +11985,7 @@
name = "HIGH VOLTAGE";
pixel_y = 0
},
-/turf/closed/wall/r_wall,
+/turf/closed/wall,
/area/maintenance/auxsolarstarboard)
"atw" = (
/turf/closed/wall/r_wall,
@@ -12735,8 +12763,8 @@
icon_state = "space";
layer = 4;
name = "EXTERNAL AIRLOCK";
- pixel_x = 0;
- pixel_y = 32
+ pixel_x = 32;
+ pixel_y = 0
},
/turf/open/floor/plating,
/area/maintenance/starboard)
@@ -13987,8 +14015,8 @@
/obj/machinery/door/airlock/security{
name = "Interrogation";
req_access = null;
- req_access_txt = "0";
- req_one_access_txt = "1;4"
+ req_access_txt = "63";
+ req_one_access_txt = "0"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -14949,7 +14977,11 @@
/turf/closed/wall/r_wall,
/area/engine/engineering)
"ayp" = (
-/obj/structure/closet/emcloset,
+/obj/structure/closet/emcloset{
+ anchored = 1;
+ desc = "It's a storage unit for emergency breath masks and O2 tanks, and is securely bolted in place.";
+ name = "anchored emergency closet"
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"ayq" = (
@@ -17411,6 +17443,7 @@
dir = 4;
network = list("Singulo")
},
+/obj/structure/lattice,
/turf/open/space,
/area/space)
"aCi" = (
@@ -20832,13 +20865,13 @@
amount = 50
},
/obj/item/stack/sheet/glass{
- amount = 12
+ amount = 50
},
/obj/item/stack/sheet/glass{
- amount = 12
+ amount = 50
},
/obj/item/stack/sheet/glass{
- amount = 12
+ amount = 50
},
/obj/item/weapon/crowbar,
/obj/item/weapon/grenade/chem_grenade/metalfoam,
@@ -24449,12 +24482,12 @@
/turf/open/floor/wood,
/area/lawoffice)
"aNP" = (
+/obj/structure/filingcabinet/chestdrawer,
/obj/machinery/airalarm{
dir = 8;
icon_state = "alarm0";
pixel_x = 24
},
-/obj/structure/filingcabinet/employment,
/turf/open/floor/wood,
/area/lawoffice)
"aNQ" = (
@@ -24749,8 +24782,11 @@
},
/area/engine/engineering)
"aOo" = (
-/turf/open/floor/plating,
-/area/maintenance/starboard)
+/obj/machinery/portable_atmospherics/canister/air,
+/turf/open/floor/plasteel{
+ icon_state = "bot"
+ },
+/area/atmos)
"aOp" = (
/turf/open/floor/plating{
icon_plating = "warnplate";
@@ -25058,10 +25094,7 @@
/area/quartermaster/qm)
"aOT" = (
/obj/structure/table,
-/obj/item/weapon/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
+/obj/machinery/computer/stockexchange,
/turf/open/floor/plasteel{
dir = 1;
icon_state = "brown"
@@ -26649,7 +26682,18 @@
pixel_y = 0;
supply_display = 1
},
-/obj/machinery/computer/stockexchange,
+/obj/item/weapon/cartridge/quartermaster{
+ pixel_x = 6;
+ pixel_y = 5
+ },
+/obj/item/weapon/cartridge/quartermaster,
+/obj/item/weapon/cartridge/quartermaster{
+ pixel_x = -4;
+ pixel_y = 7
+ },
+/obj/item/device/gps{
+ gpstag = "QM0"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/qm)
"aRC" = (
@@ -27565,18 +27609,10 @@
/area/quartermaster/qm)
"aSY" = (
/obj/structure/table,
-/obj/item/weapon/cartridge/quartermaster{
- pixel_x = 6;
- pixel_y = 5
- },
-/obj/item/weapon/cartridge/quartermaster,
-/obj/item/weapon/cartridge/quartermaster{
- pixel_x = -4;
+/obj/item/weapon/paper_bin{
+ pixel_x = -3;
pixel_y = 7
},
-/obj/item/device/gps{
- gpstag = "QM0"
- },
/turf/open/floor/plasteel{
dir = 2;
icon_state = "brown"
@@ -29711,11 +29747,7 @@
/turf/open/floor/plating/airless,
/area/engine/engineering)
"aWD" = (
-/obj/machinery/camera/emp_proof{
- c_tag = "Aft Arm - Far";
- dir = 8;
- network = list("Singulo")
- },
+/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating/airless,
/area/engine/engineering)
"aWE" = (
@@ -30089,6 +30121,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
req_access_txt = 1
},
+/obj/item/weapon/storage/firstaid/regular{
+ pixel_x = 0;
+ pixel_y = 0
+ },
/turf/open/floor/plasteel{
icon_state = "delivery";
name = "floor"
@@ -31654,18 +31690,21 @@
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/powermonitor{
- pixel_x = -2;
- pixel_y = 2
+/obj/item/weapon/circuitboard/computer/pandemic{
+ pixel_x = -3;
+ pixel_y = 3
},
-/obj/item/weapon/circuitboard/computer/stationalert{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/weapon/circuitboard/computer/atmos_alert{
+/obj/item/weapon/circuitboard/computer/rdconsole,
+/obj/item/weapon/circuitboard/machine/rdserver{
pixel_x = 3;
pixel_y = -3
},
+/obj/item/weapon/circuitboard/machine/destructive_analyzer,
+/obj/item/weapon/circuitboard/machine/protolathe,
+/obj/item/weapon/circuitboard/computer/aifixer,
+/obj/item/weapon/circuitboard/computer/teleporter,
+/obj/item/weapon/circuitboard/machine/circuit_imprinter,
+/obj/item/weapon/circuitboard/machine/mechfab,
/turf/open/floor/plasteel{
icon_state = "dark"
},
@@ -31675,14 +31714,12 @@
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/secure_data{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/weapon/circuitboard/computer/security{
- pixel_x = 1;
- pixel_y = -1
+/obj/item/weapon/circuitboard/computer/mining,
+/obj/item/weapon/circuitboard/machine/autolathe{
+ pixel_x = 3;
+ pixel_y = -3
},
+/obj/item/weapon/circuitboard/computer/arcade/battle,
/obj/machinery/ai_status_display{
pixel_x = 0;
pixel_y = 31
@@ -31692,20 +31729,10 @@
},
/area/storage/tech)
"aZI" = (
-/obj/structure/rack{
- dir = 8;
- layer = 2.9
- },
-/obj/item/weapon/circuitboard/computer/cloning{
- pixel_x = 0
- },
-/obj/item/weapon/circuitboard/computer/med_data{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/weapon/circuitboard/machine/clonescanner,
-/obj/item/weapon/circuitboard/machine/clonepod,
-/obj/item/weapon/circuitboard/computer/scan_consolenew,
+/obj/structure/rack,
+/obj/item/weapon/circuitboard/machine/telecomms/processor,
+/obj/item/weapon/circuitboard/machine/telecomms/receiver,
+/obj/machinery/computer/telecomms/server,
/turf/open/floor/plasteel{
icon_state = "dark"
},
@@ -31838,6 +31865,14 @@
/turf/closed/wall,
/area/security/checkpoint/engineering)
"aZS" = (
+/obj/structure/sign/securearea{
+ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";
+ icon_state = "space";
+ layer = 4;
+ name = "EXTERNAL AIRLOCK";
+ pixel_x = 32;
+ pixel_y = 0
+ },
/turf/open/floor/plating{
dir = 2;
icon_state = "warnplate"
@@ -32749,13 +32784,14 @@
},
/area/security/checkpoint/engineering)
"bbn" = (
-/obj/machinery/door/airlock/external{
- name = "South Containment Arm Access"
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plasteel{
+ icon_state = "bot"
},
-/turf/open/floor/plating,
-/area/engine/engineering)
+/area/atmos)
"bbo" = (
/obj/machinery/space_heater,
+/obj/effect/decal/cleanable/cobweb2,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -33263,6 +33299,7 @@
pixel_x = 0;
pixel_y = 30
},
+/obj/item/weapon/pen/red,
/turf/open/floor/plasteel{
dir = 9;
icon_state = "brown"
@@ -33271,11 +33308,6 @@
name = "\improper Cargo Office"
})
"bbW" = (
-/obj/item/weapon/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/weapon/pen/red,
/obj/structure/table/reinforced,
/obj/machinery/computer/stockexchange,
/turf/open/floor/plasteel{
@@ -33760,14 +33792,6 @@
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/borgupload{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/weapon/circuitboard/computer/aiupload{
- pixel_x = 2;
- pixel_y = -2
- },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 4
@@ -33804,50 +33828,18 @@
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/message_monitor{
- pixel_y = -5
- },
-/obj/item/weapon/circuitboard/computer/arcade/battle{
- pixel_x = -4;
- pixel_y = 2
- },
-/obj/item/weapon/circuitboard/computer/arcade/orion_trail{
- pixel_x = 4
- },
/turf/open/floor/plasteel{
icon_state = "dark"
},
/area/storage/tech)
"bcN" = (
-/obj/structure/rack{
- dir = 8;
- layer = 2.9
- },
-/obj/item/weapon/circuitboard/computer/mining,
-/obj/item/weapon/circuitboard/machine/autolathe{
- pixel_x = 3;
- pixel_y = -3
- },
-/turf/open/floor/plasteel{
- icon_state = "dark"
- },
-/area/storage/tech)
+/turf/closed/wall,
+/area/maintenance/auxsolarport)
"bcO" = (
/obj/structure/rack{
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/pandemic{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/weapon/circuitboard/computer/rdconsole,
-/obj/item/weapon/circuitboard/machine/rdserver{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/weapon/circuitboard/machine/destructive_analyzer,
-/obj/item/weapon/circuitboard/machine/protolathe,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel{
icon_state = "dark"
@@ -34078,8 +34070,8 @@
icon_state = "space";
layer = 4;
name = "EXTERNAL AIRLOCK";
- pixel_x = 0;
- pixel_y = 32
+ pixel_x = 32;
+ pixel_y = -32
},
/turf/open/floor/plating{
icon_state = "warnplate";
@@ -34227,10 +34219,16 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
req_access_txt = 1
},
-/obj/machinery/light_switch{
- pixel_x = -25;
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Cargo Office APC";
+ pixel_x = -24;
pixel_y = 0
},
+/obj/structure/cable/yellow{
+ d2 = 4;
+ icon_state = "0-4"
+ },
/turf/open/floor/plasteel{
dir = 9;
icon_state = "brown"
@@ -34245,6 +34243,12 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8";
+ tag = ""
+ },
/turf/open/floor/plasteel{
dir = 1;
icon_state = "brown"
@@ -34296,13 +34300,17 @@
})
"bdz" = (
/obj/structure/table/reinforced,
-/obj/item/weapon/folder/yellow,
/obj/machinery/door/firedoor,
/obj/machinery/door/window/westleft{
dir = 8;
name = "Cargo Desk";
req_access_txt = "50"
},
+/obj/item/weapon/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/weapon/pen,
/turf/open/floor/plasteel,
/area/quartermaster/office{
name = "\improper Cargo Office"
@@ -34518,18 +34526,6 @@
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/crew{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/weapon/circuitboard/computer/card{
- pixel_x = 2;
- pixel_y = -2
- },
-/obj/item/weapon/circuitboard/computer/communications{
- pixel_x = 5;
- pixel_y = -5
- },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 8
@@ -34757,11 +34753,11 @@
},
/area/security/checkpoint/engineering)
"bes" = (
-/obj/structure/closet/emcloset,
+/obj/structure/easel,
/turf/open/floor/plating{
- icon_state = "platingdmg2"
+ icon_state = "platingdmg3"
},
-/area/engine/engineering)
+/area/maintenance/starboard)
"bet" = (
/obj/machinery/light{
dir = 8
@@ -35451,14 +35447,6 @@
dir = 8;
layer = 2.9
},
-/obj/item/weapon/circuitboard/computer/robotics{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/weapon/circuitboard/computer/mecha_control{
- pixel_x = 1;
- pixel_y = -1
- },
/turf/open/floor/plasteel{
icon_state = "vault";
dir = 1
@@ -37123,18 +37111,41 @@
name = "Customs"
})
"bin" = (
-/obj/item/weapon/grenade/barrier,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26;
- pixel_y = 0
- },
/obj/machinery/light/small{
dir = 1
},
/obj/machinery/airalarm{
pixel_y = 28
},
+/obj/structure/closet/crate/secure/weapon{
+ desc = "A secure clothing crate.";
+ name = "formal uniform crate";
+ req_access_txt = "3"
+ },
+/obj/item/clothing/under/rank/security/navyblue,
+/obj/item/clothing/under/rank/security/navyblue,
+/obj/item/clothing/under/rank/security/navyblue,
+/obj/item/clothing/under/rank/security/navyblue,
+/obj/item/clothing/under/rank/security/navyblue,
+/obj/item/clothing/under/rank/security/navyblue,
+/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/under/rank/warden/navyblue,
+/obj/item/clothing/suit/security/warden,
+/obj/item/clothing/under/rank/head_of_security/navyblue,
+/obj/item/clothing/suit/security/hos,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navywarden,
+/obj/item/clothing/head/beret/sec/navyhos,
/turf/open/floor/plasteel{
icon_state = "bot"
},
@@ -37290,11 +37301,6 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 2
},
-/obj/structure/cable/yellow{
- d1 = 2;
- d2 = 4;
- icon_state = "2-4"
- },
/turf/open/floor/plasteel{
dir = 8;
icon_state = "brown"
@@ -37311,11 +37317,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/structure/cable/yellow{
- d1 = 1;
- d2 = 8;
- icon_state = "1-8"
- },
/turf/open/floor/plasteel,
/area/quartermaster/office{
name = "\improper Cargo Office"
@@ -38487,18 +38488,9 @@
/obj/structure/table,
/obj/item/weapon/clipboard,
/obj/item/weapon/folder/yellow,
+/obj/item/weapon/folder/yellow,
/obj/item/device/multitool,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26;
- pixel_y = 0
- },
-/obj/structure/cable/yellow{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/machinery/computer/stockexchange,
+/obj/item/weapon/pen/red,
/turf/open/floor/plasteel{
dir = 8;
icon_state = "brown"
@@ -39532,23 +39524,12 @@
})
"bmb" = (
/obj/structure/table,
-/obj/item/device/radio/intercom{
- freerange = 0;
- frequency = 1459;
- name = "Station Intercom (General)";
- pixel_x = -29
- },
-/obj/item/weapon/storage/firstaid/regular{
- pixel_x = 0;
+/obj/machinery/computer/stockexchange,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -26;
pixel_y = 0
},
-/obj/machinery/power/apc{
- dir = 2;
- name = "Cargo Office APC";
- pixel_x = 1;
- pixel_y = -24
- },
-/obj/structure/cable/yellow,
/turf/open/floor/plasteel{
dir = 10;
icon_state = "brown"
@@ -39589,6 +39570,13 @@
pixel_x = 28;
pixel_y = 0
},
+/obj/item/device/radio/intercom{
+ freerange = 0;
+ frequency = 1459;
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = -28
+ },
/turf/open/floor/plasteel{
dir = 6;
icon_state = "brown"
@@ -40241,7 +40229,7 @@
/area/engine/break_room)
"bng" = (
/obj/structure/sign/pods,
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/engine/break_room)
"bnh" = (
/obj/structure/grille,
@@ -40857,10 +40845,6 @@
/area/crew_quarters/heads)
"boh" = (
/obj/machinery/recharger,
-/obj/machinery/keycard_auth{
- pixel_x = 0;
- pixel_y = 24
- },
/obj/item/weapon/storage/secure/safe{
pixel_x = 34;
pixel_y = 0
@@ -44053,8 +44037,6 @@
/area/hallway/primary/central)
"btc" = (
/obj/structure/table,
-/obj/item/weapon/storage/crayons,
-/obj/item/weapon/storage/crayons,
/obj/machinery/power/apc{
cell_type = 2500;
dir = 8;
@@ -44066,6 +44048,11 @@
d2 = 4;
icon_state = "0-4"
},
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
/turf/open/floor/plasteel,
/area/storage/art)
"btd" = (
@@ -45597,10 +45584,15 @@
/area/hallway/primary/central)
"bvn" = (
/obj/structure/table,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil/random,
+/obj/item/weapon/canvas/twentythreeXtwentythree,
+/obj/item/weapon/canvas/twentythreeXtwentythree,
+/obj/item/weapon/canvas/twentythreeXnineteen,
+/obj/item/weapon/canvas/twentythreeXnineteen,
+/obj/item/weapon/canvas/nineteenXnineteen,
+/obj/item/weapon/canvas/nineteenXnineteen,
+/obj/item/weapon/storage/crayons,
+/obj/item/weapon/storage/crayons,
+/obj/item/weapon/storage/crayons,
/turf/open/floor/plasteel,
/area/storage/art)
"bvo" = (
@@ -45643,7 +45635,14 @@
},
/obj/structure/closet/gmcloset,
/obj/item/weapon/wrench,
-/obj/item/stack/cable_coil/white,
+/obj/item/stack/sheet/glass{
+ amount = 30
+ },
+/obj/item/stack/sheet/metal{
+ amount = 30
+ },
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
/turf/open/floor/wood,
/area/crew_quarters/bar)
"bvt" = (
@@ -49939,7 +49938,10 @@
/area/crew_quarters/bar)
"bCu" = (
/obj/structure/table/wood/poker,
-/obj/effect/spawner/lootdrop/gambling,
+/obj/effect/spawner/lootdrop{
+ loot = list(/obj/item/weapon/gun/projectile/revolver/russian = 5, /obj/item/weapon/storage/box/syndie_kit/throwing_weapons, /obj/item/toy/cards/deck/syndicate = 2);
+ name = "gambling valuables spawner"
+ },
/turf/open/floor/wood,
/area/crew_quarters/bar)
"bCv" = (
@@ -50677,7 +50679,7 @@
dir = 4
},
/turf/open/floor/goonplaque{
- desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MSv41I:151101"
+ desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MS-160511"
},
/area/hallway/primary/port)
"bDM" = (
@@ -50973,15 +50975,7 @@
pixel_x = 24
},
/obj/structure/table/wood,
-/obj/item/weapon/reagent_containers/food/snacks/pie/cream{
- pixel_x = 3;
- pixel_y = 3
- },
/obj/item/weapon/reagent_containers/food/snacks/pie/cream,
-/obj/item/weapon/reagent_containers/food/snacks/pie/cream{
- pixel_x = -3;
- pixel_y = -3
- },
/turf/open/floor/wood,
/area/crew_quarters/theatre)
"bEj" = (
@@ -54497,12 +54491,12 @@
icon_state = "shower";
dir = 4
},
-/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/blood/gibs/limb,
/obj/machinery/light/small,
/obj/effect/landmark{
name = "revenantspawn"
},
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/blood/gibs/old,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -56450,7 +56444,9 @@
name = "Port Maintenance"
})
"bNo" = (
-/obj/machinery/vending/autodrobe,
+/obj/machinery/vending/autodrobe{
+ req_access_txt = "0"
+ },
/turf/open/floor/plating,
/area/maintenance/fpmaint2{
name = "Port Maintenance"
@@ -56971,13 +56967,7 @@
/area/bridge)
"bOg" = (
/obj/structure/rack,
-/obj/item/weapon/circuitboard/machine/telecomms/processor,
-/obj/item/weapon/circuitboard/machine/telecomms/processor,
-/obj/item/weapon/circuitboard/machine/telecomms/receiver,
-/obj/item/weapon/circuitboard/machine/telecomms/server,
-/obj/item/weapon/circuitboard/machine/telecomms/server,
-/obj/item/weapon/circuitboard/machine/telecomms/bus,
-/obj/item/weapon/circuitboard/machine/telecomms/bus,
+/obj/machinery/telecomms/bus,
/obj/item/weapon/circuitboard/machine/telecomms/broadcaster,
/obj/machinery/atmospherics/components/unary/vent_pump{
dir = 1;
@@ -57024,16 +57014,21 @@
name = "Telecoms Storage"
})
"bOj" = (
-/obj/structure/closet/wardrobe/grey,
-/turf/open/floor/plating,
-/area/maintenance/starboard)
+/obj/machinery/portable_atmospherics/canister/bz,
+/turf/open/floor/plasteel{
+ icon_state = "bot"
+ },
+/area/atmos)
"bOk" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plating,
/area/maintenance/starboard)
"bOl" = (
+/obj/structure/closet,
/obj/item/weapon/storage/box/lights/mixed,
-/turf/open/floor/plating,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
/area/maintenance/starboard)
"bOm" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -58860,10 +58855,19 @@
},
/area/crew_quarters/kitchen)
"bRk" = (
-/turf/open/floor/plasteel{
- icon_state = "showroomfloor"
+/obj/structure/sign/securearea{
+ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";
+ icon_state = "space";
+ layer = 4;
+ name = "EXTERNAL AIRLOCK";
+ pixel_x = 32;
+ pixel_y = 0
},
-/area/crew_quarters/kitchen)
+/turf/open/floor/plating{
+ icon_state = "warnplate";
+ dir = 1
+ },
+/area/maintenance/starboard)
"bRl" = (
/obj/machinery/chem_master/condimaster{
name = "CondiMaster Neo";
@@ -59357,7 +59361,6 @@
pixel_y = 0
},
/obj/item/clothing/under/suit_jacket/red,
-/obj/item/weapon/book/codex_gigas,
/turf/open/floor/plasteel{
icon_state = "cult";
dir = 2
@@ -60475,7 +60478,7 @@
pixel_y = 6
},
/obj/structure/table/wood,
-/obj/item/toy/AI{
+/obj/item/toy/talking/AI{
name = "NanoTrasen-brand toy AI";
pixel_y = 6
},
@@ -61610,11 +61613,12 @@
name = "HIGH VOLTAGE";
pixel_y = 0
},
-/turf/closed/wall/r_wall,
+/turf/closed/wall,
/area/maintenance/portsolar)
"bVC" = (
-/turf/closed/wall/r_wall,
-/area/maintenance/portsolar)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"bVD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/airlock/maintenance{
@@ -65369,6 +65373,10 @@
pixel_x = -2;
pixel_y = 8
},
+/obj/structure/window/reinforced{
+ dir = 1;
+ pixel_y = 1
+ },
/turf/open/floor/plasteel{
dir = 4;
icon_state = "caution"
@@ -69921,7 +69929,11 @@
},
/area/crew_quarters/kitchen)
"ciS" = (
-/obj/structure/closet/emcloset,
+/obj/structure/closet/emcloset{
+ anchored = 1;
+ desc = "It's a storage unit for emergency breath masks and O2 tanks, and is securely bolted in place.";
+ name = "anchored emergency closet"
+ },
/turf/open/floor/plating{
icon_state = "warnplate";
dir = 1
@@ -72356,8 +72368,8 @@
name = "old sink";
pixel_y = 28
},
-/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/blood/gibs/limb,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/blood/gibs/old,
/turf/open/floor/plating,
/area/maintenance/starboard)
"cmL" = (
@@ -73286,8 +73298,6 @@
name = "Aft Maintenance"
})
"col" = (
-/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/blood/gibs/limb,
/obj/effect/landmark{
name = "xeno_spawn";
pixel_x = -1
@@ -73295,6 +73305,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/blood/gibs/old,
/turf/open/floor/plating,
/area/maintenance/aft{
name = "Aft Maintenance"
@@ -73449,14 +73461,14 @@
name = "Sleepers"
})
"coC" = (
-/obj/structure/grille,
-/obj/structure/window/fulltile{
- layer = 2.9
+/obj/structure/lattice,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Fore Arm - Far";
+ dir = 8;
+ network = list("Singulo")
},
-/turf/open/floor/plating,
-/area/medical/sleeper{
- name = "Sleepers"
- })
+/turf/open/space,
+/area/space)
"coD" = (
/obj/machinery/door/firedoor,
/obj/structure/extinguisher_cabinet{
@@ -74768,7 +74780,7 @@
name = "Aft Maintenance"
})
"cqG" = (
-/obj/effect/decal/cleanable/blood,
+/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating,
/area/maintenance/aft{
name = "Aft Maintenance"
@@ -76567,9 +76579,9 @@
},
/area/toxins/explab)
"ctj" = (
-/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/blood/gibs/limb,
/obj/structure/bed/roller,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/blood/gibs/old,
/turf/open/floor/plating{
icon_state = "warnplate";
dir = 4
@@ -76610,8 +76622,8 @@
})
"ctn" = (
/obj/structure/bed,
-/obj/effect/decal/cleanable/blood/gibs/limb,
-/obj/effect/decal/cleanable/blood,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/blood/gibs/old,
/turf/open/floor/plating,
/area/maintenance/aft{
name = "Aft Maintenance"
@@ -79107,7 +79119,6 @@
pixel_x = -2;
pixel_y = 4
},
-/obj/item/weapon/circuitboard/computer/teleporter,
/turf/open/floor/plasteel{
icon_state = "cafeteria";
dir = 5
@@ -81497,7 +81508,7 @@
pixel_y = 25
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel{
dir = 2;
icon_state = "warning"
@@ -81781,6 +81792,7 @@
},
/obj/machinery/power/apc{
dir = 4;
+ locked = 0;
name = "Cloning Lab APC";
pixel_x = 24;
pixel_y = 0
@@ -83896,8 +83908,14 @@
},
/area/medical/morgue)
"cEt" = (
-/turf/open/floor/plating,
-/area/construction)
+/obj/structure/sign/securearea{
+ desc = "A warning sign which reads 'HIGH VOLTAGE'";
+ icon_state = "shock";
+ name = "HIGH VOLTAGE";
+ pixel_y = 0
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"cEu" = (
/obj/machinery/firealarm{
dir = 2;
@@ -95017,6 +95035,11 @@
/obj/machinery/light/small{
dir = 8
},
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Pen #1";
+ dir = 4;
+ network = list("SS13","RD","Xeno")
+ },
/turf/open/floor/engine,
/area/toxins/xenobiology)
"cVE" = (
@@ -95114,6 +95137,11 @@
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Pen #2";
+ dir = 8;
+ network = list("SS13","RD","Xeno")
+ },
/turf/open/floor/engine,
/area/toxins/xenobiology)
"cVN" = (
@@ -96188,9 +96216,7 @@
/area/shuttle/syndicate)
"cXn" = (
/obj/structure/closet/cardboard,
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
- },
+/turf/open/floor/plating,
/area/maintenance/starboard)
"cXo" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -97786,8 +97812,6 @@
},
/area/shuttle/abandoned)
"daw" = (
-/obj/structure/frame/machine,
-/obj/item/weapon/circuitboard/machine/cyborgrecharger,
/obj/effect/decal/cleanable/oil,
/obj/effect/decal/cleanable/dirt{
desc = "A thin layer of dust coating the floor.";
@@ -97955,7 +97979,6 @@
},
/area/shuttle/abandoned)
"daO" = (
-/obj/structure/frame/computer,
/obj/effect/decal/cleanable/cobweb,
/obj/effect/decal/cleanable/dirt{
desc = "A thin layer of dust coating the floor.";
@@ -98043,43 +98066,21 @@
},
/area/shuttle/abandoned)
"daW" = (
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
- },
-/obj/structure/frame/machine{
- desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench.";
- dir = 1;
- icon = 'icons/obj/Cryogenic2.dmi';
- icon_state = "sleeper-o";
- name = "broken hypersleep chamber";
- pixel_y = 0
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/obj/structure/easel,
+/turf/open/floor/plating,
+/area/maintenance/starboard)
"daX" = (
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
+/obj/structure/lattice,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Aft Arm - Far";
+ dir = 8;
+ network = list("Singulo")
},
-/obj/structure/frame/machine{
- desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench.";
- dir = 1;
- icon = 'icons/obj/Cryogenic2.dmi';
- icon_state = "sleeper-o";
- name = "broken hypersleep chamber";
- pixel_y = 0
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/turf/open/space,
+/area/space)
"daY" = (
/obj/structure/chair/office/light{
dir = 4
@@ -98355,43 +98356,17 @@
},
/area/shuttle/abandoned)
"dbt" = (
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
+/obj/machinery/camera/emp_proof{
+ c_tag = "Aft Arm - Near";
+ dir = 4;
+ network = list("Singulo")
},
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
- },
-/obj/structure/frame/machine{
- desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench.";
- dir = 2;
- icon = 'icons/obj/Cryogenic2.dmi';
- icon_state = "sleeper-o";
- name = "broken hypersleep chamber";
- pixel_y = 3
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
"dbu" = (
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
- },
-/obj/structure/frame/machine{
- desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench.";
- dir = 2;
- icon = 'icons/obj/Cryogenic2.dmi';
- icon_state = "sleeper-o";
- name = "broken hypersleep chamber";
- pixel_y = 3
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/turf/closed/wall/r_wall,
+/area/security/checkpoint/engineering)
"dbv" = (
/obj/structure/chair/office/light,
/obj/effect/decal/cleanable/dirt{
@@ -98476,15 +98451,9 @@
},
/area/shuttle/abandoned)
"dbC" = (
-/obj/structure/frame/computer,
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/engine/engineering)
"dbD" = (
/obj/structure/table,
/obj/item/device/radio/off{
@@ -98654,7 +98623,6 @@
},
/area/shuttle/abandoned)
"dbS" = (
-/obj/structure/frame/machine,
/obj/effect/decal/cleanable/oil,
/obj/effect/decal/cleanable/dirt{
desc = "A thin layer of dust coating the floor.";
@@ -98665,16 +98633,13 @@
},
/area/shuttle/abandoned)
"dbT" = (
-/obj/structure/frame/machine,
-/obj/item/weapon/circuitboard/machine/autolathe,
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
+/obj/structure/reagent_dispensers/watertank,
+/obj/structure/window/reinforced{
+ dir = 8
},
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/engine/engineering)
"dbU" = (
/obj/machinery/sleeper{
dir = 4;
@@ -98798,26 +98763,15 @@
/turf/open/floor/plasteel/shuttle,
/area/shuttle/abandoned)
"dcd" = (
-/obj/structure/frame/machine,
-/obj/item/weapon/circuitboard/machine/chem_dispenser,
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/obj/structure/closet/firecloset,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/engine/engineering)
"dce" = (
-/obj/structure/frame/machine,
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
- },
-/turf/open/floor/plasteel/shuttle{
- icon_state = "shuttlefloor3"
- },
-/area/shuttle/abandoned)
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/engine/engineering)
"dcf" = (
/obj/structure/chair/office/light,
/obj/effect/decal/cleanable/dirt{
@@ -99285,12 +99239,11 @@
},
/area/shuttle/escape)
"dcR" = (
-/obj/machinery/door/airlock/shuttle{
- name = "Emergency Shuttle Airlock";
- req_access_txt = "2"
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
},
-/turf/open/floor/plasteel/shuttle,
-/area/shuttle/escape)
+/turf/open/floor/plating,
+/area/engine/break_room)
"dcS" = (
/obj/structure/closet/crate/medical{
name = "medical crate"
@@ -99372,9 +99325,6 @@
},
/area/shuttle/escape)
"dcY" = (
-/obj/machinery/door/airlock/shuttle{
- name = "Emergency Shuttle Cargo Bay Airlock"
- },
/obj/docking_port/stationary{
dheight = 0;
dir = 4;
@@ -99391,6 +99341,9 @@
height = 14;
width = 25
},
+/obj/machinery/door/airlock/shuttle{
+ name = "Emergency Shuttle Airlock"
+ },
/turf/open/floor/plasteel/shuttle,
/area/shuttle/escape)
"dcZ" = (
@@ -100417,13 +100370,12 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"dfi" = (
-/obj/machinery/camera/emp_proof{
- c_tag = "Aft Arm - Near";
- dir = 4;
- network = list("Singulo")
+/obj/machinery/keycard_auth{
+ pixel_x = 26;
+ pixel_y = 0
},
-/turf/open/floor/plating/airless,
-/area/space)
+/turf/open/floor/carpet,
+/area/crew_quarters/heads)
"dfj" = (
/obj/structure/cable{
icon_state = "0-2";
@@ -100467,14 +100419,18 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"dfo" = (
-/turf/open/floor/wood,
-/area/security/vacantoffice)
+/obj/item/hand_labeler_refill,
+/obj/structure/easel,
+/turf/open/floor/plating,
+/area/maintenance/fpmaint2{
+ name = "Port Maintenance"
+ })
"dfp" = (
-/turf/open/floor/plasteel{
- icon_state = "cafeteria";
- dir = 5
- },
-/area/crew_quarters/kitchen)
+/obj/structure/easel,
+/turf/open/floor/plating,
+/area/maintenance/aft{
+ name = "Aft Maintenance"
+ })
"dfq" = (
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva{
@@ -100486,13 +100442,27 @@
},
/area/crew_quarters/kitchen)
"dfs" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/open/floor/plasteel,
-/area/atmos)
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Pen #3";
+ dir = 4;
+ network = list("SS13","RD","Xeno")
+ },
+/turf/open/floor/engine,
+/area/toxins/xenobiology)
"dft" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/open/floor/plasteel,
-/area/atmos)
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Pen #4";
+ dir = 8;
+ network = list("SS13","RD","Xeno")
+ },
+/turf/open/floor/engine,
+/area/toxins/xenobiology)
"dfu" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
@@ -100511,22 +100481,27 @@
},
/area/medical/morgue)
"dfw" = (
-/obj/machinery/portable_atmospherics/canister/bz,
-/turf/open/floor/plasteel,
-/area/atmos)
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Pen #5";
+ dir = 4;
+ network = list("SS13","RD","Xeno")
+ },
+/turf/open/floor/engine,
+/area/toxins/xenobiology)
"dfx" = (
-/obj/structure/window/reinforced{
+/obj/machinery/light/small{
dir = 4
},
-/obj/structure/table/wood,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/turf/open/floor/plating,
-/area/chapel/main)
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Pen #6";
+ dir = 8;
+ network = list("SS13","RD","Xeno")
+ },
+/turf/open/floor/engine,
+/area/toxins/xenobiology)
"dfy" = (
/turf/open/floor/engine/vacuum,
/area/atmos)
@@ -109776,9 +109751,9 @@ dai
dav
daE
dai
-daX
+daU
dbi
-dbu
+daU
dai
cZz
cZK
@@ -110033,13 +110008,13 @@ dah
dau
daD
dai
-daW
+daV
dbh
-dbt
+daV
dbA
daa
dbS
-dcd
+daU
dcr
cZy
aaa
@@ -110552,8 +110527,8 @@ dbj
cZS
dai
daE
-dbT
-dce
+daU
+daU
dcs
cZy
aaa
@@ -110804,9 +110779,9 @@ dal
dau
daG
dai
-daX
+daU
dbm
-dbu
+daU
dai
cZz
cZK
@@ -111061,9 +111036,9 @@ dak
daw
daa
dai
-daX
+daU
dbl
-dbt
+daV
dai
dbJ
dbU
@@ -111835,7 +111810,7 @@ daO
daY
dai
dbv
-dbC
+daU
cZy
cLU
dcj
@@ -113884,10 +113859,10 @@ bRQ
asj
alQ
bVz
-bVC
-bVC
-bVC
-bVC
+bVz
+bVz
+bVz
+bVz
aaa
aaf
aaa
@@ -114911,11 +114886,11 @@ aLU
bRT
aLU
bUA
-bVC
-bVC
-bVC
-bVC
-bVC
+bVz
+bVz
+bVz
+bVz
+bVz
aaa
aaf
aaa
@@ -118511,7 +118486,7 @@ alQ
bQr
bQH
alI
-avZ
+dfo
bVE
caW
ccb
@@ -118960,10 +118935,10 @@ aaf
aaf
aaf
aek
-agG
-agG
-agG
-agG
+bcN
+bcN
+bcN
+bcN
akr
ahv
ahv
@@ -119220,7 +119195,7 @@ aek
agH
ahx
air
-agG
+bcN
aks
alI
amY
@@ -119988,8 +119963,8 @@ aaf
aaf
aaf
aek
-agG
-agG
+bcN
+bcN
agG
agG
aiu
@@ -120871,7 +120846,7 @@ cOU
cRS
cRS
cSP
-dfx
+cRS
cOU
cUb
cOU
@@ -124989,7 +124964,7 @@ cOU
dcy
dcF
dcF
-dcR
+dcB
dcz
dcY
dcF
@@ -124999,7 +124974,7 @@ dcz
dcK
dcB
dcz
-dcR
+dcB
dcF
dcz
dcF
@@ -125688,7 +125663,7 @@ bdK
bol
bfm
bsF
-buS
+dfi
bww
bys
bmn
@@ -129623,7 +129598,7 @@ cTC
cTC
cTC
cVt
-cVD
+dfw
cVB
cTC
cTC
@@ -129876,7 +129851,7 @@ cVD
cVN
cVo
cVt
-cVD
+dfs
cVN
cVo
cVs
@@ -132960,7 +132935,7 @@ cVM
cVY
cVo
cVN
-cVM
+dft
cVY
cVo
cVB
@@ -133221,7 +133196,7 @@ cTC
cTC
cTC
cVB
-cVM
+dfx
cVY
cTC
cTC
@@ -133966,7 +133941,7 @@ cIx
cJs
cKt
chP
-bZQ
+dfp
cgG
ciY
bVE
@@ -138271,7 +138246,7 @@ avN
aXR
aZH
baX
-bcN
+bcM
bee
bfH
aXR
@@ -138778,7 +138753,7 @@ aMR
aOg
apj
aQW
-asL
+daW
aTz
alw
avN
@@ -140604,9 +140579,9 @@ bFT
bHN
bJw
bKQ
-dfs
+aOo
atw
-atn
+bOl
bRw
bTc
bUq
@@ -140861,9 +140836,9 @@ bEn
bHO
bJx
bKR
-dft
+bbn
atw
-apk
+bOk
bRx
apk
aqy
@@ -141118,9 +141093,9 @@ bFU
bHP
bJy
bKS
-dfw
+bOj
atw
-apk
+cXn
bRy
apk
bUr
@@ -141375,7 +141350,7 @@ bEn
bHQ
bJz
bKT
-dfw
+bOj
atw
bQa
bRz
@@ -141840,7 +141815,7 @@ aaf
aaf
acn
alx
-apn
+bes
apk
apk
apk
@@ -143153,15 +143128,15 @@ aCf
ayo
azn
aZR
-aZR
-aZR
-aZR
-aZR
-aZR
+dbu
+dbu
+dbu
+dbu
+dbu
bjQ
bly
bng
-bfV
+bjF
brj
bjF
bjF
@@ -143409,12 +143384,12 @@ aDp
aVe
ayo
aYd
-aZS
-bbn
+ayp
+ayo
bdd
-bes
-bfV
-bhH
+bdf
+dcR
+bjR
bjR
bjR
bjF
@@ -143669,11 +143644,11 @@ azn
ayo
ayo
aKe
-ayo
-bfV
+dbT
+bjF
bhI
bjR
-bjR
+bhH
bjF
bsD
brm
@@ -143907,8 +143882,8 @@ ayq
azp
aaf
aCh
+aaf
aIK
-aoa
aDq
aDq
aDq
@@ -143918,16 +143893,16 @@ aDq
aDq
aDq
aDq
-dfi
aIK
-aaa
+aaf
+dbt
aaf
aYe
aZT
ayo
-aKe
-ayo
-bfV
+dbC
+dcd
+bjF
bhJ
bjS
blz
@@ -144162,7 +144137,7 @@ avP
atw
ayr
azq
-aaf
+aoa
aaf
aIM
aLy
@@ -144178,13 +144153,13 @@ aLy
aLy
dfk
aaf
-aaf
+aoa
azq
ayr
ayo
bde
-ayo
-bnn
+dce
+brr
bhK
cXk
bhK
@@ -144440,8 +144415,8 @@ aYf
aZU
ayo
aKe
-ayo
-bnn
+aBZ
+brr
bhK
cWO
bhK
@@ -144675,7 +144650,7 @@ apk
avN
atw
ayr
-azq
+bVC
aAO
aaa
aIN
@@ -144693,11 +144668,11 @@ dfj
dfl
aaa
aWC
-azq
+bVC
ayr
ayo
bdf
-ayo
+aBZ
aaf
bhL
bjV
@@ -144953,8 +144928,8 @@ azq
ayq
azu
ayo
-aKe
-ayo
+dbC
+aBZ
aaf
aaa
cYF
@@ -145211,7 +145186,7 @@ ayr
ayo
ayo
aKe
-ayo
+aBZ
aaf
aaf
aaf
@@ -145442,7 +145417,7 @@ apu
apu
apu
apu
-atw
+alw
apk
anU
atw
@@ -145468,7 +145443,7 @@ aYg
ayo
bbo
aKe
-ayo
+aBZ
aaf
aaa
aaa
@@ -145698,7 +145673,7 @@ aaf
aaa
aaa
aaa
-atw
+alw
auL
avD
atw
@@ -145725,7 +145700,7 @@ ayr
ayo
ayo
bdg
-ayo
+aBZ
aaf
aaa
aaa
@@ -145981,7 +145956,7 @@ azq
ayt
aZT
ayo
-aKe
+dbC
aDq
aaf
aaa
@@ -146212,12 +146187,12 @@ aaa
aaa
aaf
aaa
-atw
+alw
auN
avS
atw
ayr
-azq
+bVC
aAP
aaa
aIN
@@ -146235,11 +146210,11 @@ dfj
dfl
aaa
azq
-azq
+bVC
ayr
ayo
bdh
-ayo
+aBZ
aaf
aaf
aaa
@@ -146469,8 +146444,8 @@ aaa
aaa
aaf
aaa
-atw
-atw
+alw
+alw
atx
atw
ayt
@@ -146496,8 +146471,8 @@ aYf
azu
ayo
bdi
-ayo
-ayo
+aBZ
+aBZ
aaf
aaa
aaa
@@ -146727,13 +146702,13 @@ aaa
acn
acn
atx
-anV
-avT
+bRk
+avS
atw
ayu
azq
azq
-aaa
+aaf
aIL
aoa
aoa
@@ -146752,7 +146727,7 @@ azq
azq
ayu
ayo
-bdh
+aKg
aZS
bdi
acn
@@ -146983,14 +146958,14 @@ aaf
aaf
aaf
aaf
-atw
-atw
+alw
+alw
atx
-awY
+atw
ayu
ayu
-aAQ
-aoa
+azq
+aaa
aLw
aSG
aSG
@@ -147004,14 +146979,14 @@ aTN
aSG
aSG
dfm
-aoa
+aaf
aWD
ayu
ayu
-aHA
+ayo
bdi
-ayo
-ayo
+aBZ
+aBZ
aaf
aaa
aaa
@@ -147245,25 +147220,25 @@ aaf
acn
atw
ayo
-azv
ayo
-azq
-aoa
-aoa
-aaf
-aaf
-aoa
-apy
-aoa
-aaf
-aaf
-aaf
-aaf
-aaf
-aaf
-azq
ayo
-azv
+aaa
+coC
+aIK
+aaf
+aaa
+aaa
+aaf
+aIK
+aaf
+aaa
+aaa
+aaf
+aIK
+daX
+aaa
+ayo
+ayo
ayo
ayo
acn
@@ -147502,7 +147477,7 @@ aaf
acn
aaf
aaf
-azw
+aaf
ayo
ayo
ayo
@@ -147758,25 +147733,25 @@ aaa
aaa
aaa
aaa
+aaa
aaf
-aaf
+ayo
azw
azw
azw
-azw
-aGc
+aHA
azw
azw
azw
+cEt
azw
azw
azw
-azw
-aGc
-azw
+aHA
azw
azw
azw
+ayo
aaf
aaa
aaf
@@ -148277,17 +148252,17 @@ aaa
aaa
aaa
aaa
-aaa
+aaf
aaf
aaa
aaa
aaf
-aaa
+aaf
aaa
aaa
aaa
aaf
-aaa
+aaf
aaa
aaa
aaa
@@ -148539,7 +148514,7 @@ aaf
aaa
aaa
aaa
-aaa
+aaf
aaa
aaa
aaa
@@ -149057,7 +149032,7 @@ aaa
aaa
aaa
aaa
-aaf
+aaa
aaa
aaa
aaa
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index 1f25a28a73b..f3edb7bcab8 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -2792,6 +2792,15 @@
possible_destinations = "pod_asteroid3";
shuttleId = "pod3"
},
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/machinery/status_display{
+ density = 0;
+ layer = 3;
+ pixel_x = 0;
+ pixel_y = 32
+ },
/turf/open/floor/plasteel/shuttle,
/area/shuttle/pod_3)
"afr" = (
@@ -2802,6 +2811,9 @@
pixel_x = 6;
pixel_y = -32
},
+/obj/structure/chair{
+ dir = 4
+ },
/turf/open/floor/plasteel/shuttle,
/area/shuttle/pod_3)
"afs" = (
@@ -6369,9 +6381,12 @@
/turf/open/floor/plating,
/area/maintenance/fpmaint2)
"alX" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/maintenance/fpmaint2)
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/bz,
+/turf/open/floor/plasteel,
+/area/atmos)
"alY" = (
/obj/machinery/door/airlock/shuttle{
name = "Labor Shuttle Airlock";
@@ -6661,8 +6676,11 @@
/turf/open/floor/plating,
/area/maintenance/auxsolarport)
"amB" = (
-/turf/open/floor/plating,
-/area/security/prison)
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel/shuttle,
+/area/shuttle/escape)
"amC" = (
/turf/open/floor/plating,
/area/maintenance/fpmaint2)
@@ -7060,12 +7078,13 @@
},
/area/maintenance/fpmaint2)
"anq" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/chair{
dir = 4
},
-/obj/machinery/portable_atmospherics/canister/bz,
-/turf/open/floor/plasteel,
-/area/atmos)
+/turf/open/floor/plasteel/shuttle{
+ icon_state = "shuttlefloor3"
+ },
+/area/shuttle/escape)
"anr" = (
/obj/structure/chair{
dir = 8
@@ -62814,6 +62833,9 @@
},
/area/shuttle/escape)
"cxr" = (
+/obj/structure/chair{
+ dir = 4
+ },
/obj/structure/window/reinforced{
dir = 8
},
@@ -63710,6 +63732,15 @@
possible_destinations = "pod_asteroid4";
shuttleId = "pod4"
},
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/machinery/status_display{
+ density = 0;
+ layer = 3;
+ pixel_x = 0;
+ pixel_y = 32
+ },
/turf/open/floor/plasteel/shuttle,
/area/shuttle/pod_4)
"czM" = (
@@ -63720,6 +63751,9 @@
pixel_x = 6;
pixel_y = -32
},
+/obj/structure/chair{
+ dir = 4
+ },
/turf/open/floor/plasteel/shuttle,
/area/shuttle/pod_4)
"czN" = (
@@ -95066,7 +95100,7 @@ bJs
bKy
bLM
bLM
-anq
+alX
bOV
bQk
bRt
@@ -115848,11 +115882,11 @@ cxd
cxe
cwU
cwL
-cxa
-cxa
-cxa
-cxa
-cxa
+anq
+anq
+anq
+anq
+anq
cwL
cwU
cxQ
@@ -117130,7 +117164,7 @@ cwL
cwX
cwL
cwL
-cxa
+anq
cxj
cwL
cxq
@@ -117382,8 +117416,8 @@ aaa
aaa
crx
cwG
-cwL
-cwL
+amB
+amB
cwW
cxa
cwL
diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm
index fda763709db..83ac1904f6a 100644
--- a/_maps/map_files/generic/z2.dmm
+++ b/_maps/map_files/generic/z2.dmm
@@ -2716,7 +2716,7 @@
/area/centcom/evac)
"io" = (
/obj/structure/table/reinforced,
-/obj/item/toy/AI,
+/obj/item/toy/talking/AI,
/obj/structure/window/reinforced{
dir = 4
},
diff --git a/_maps/metastation.dm b/_maps/metastation.dm
index d574427fca1..a75489a671d 100644
--- a/_maps/metastation.dm
+++ b/_maps/metastation.dm
@@ -19,7 +19,7 @@ z7 = empty space
#define MINETYPE "lavaland"
- #include "map_files\MetaStation\MetaStation.v41I.dmm"
+ #include "map_files\MetaStation\MetaStation.dmm"
#include "map_files\generic\z2.dmm"
#include "map_files\generic\z3.dmm"
#include "map_files\generic\z4.dmm"
@@ -30,7 +30,7 @@ z7 = empty space
#include "map_files\generic\z9.dmm"
#define MAP_PATH "map_files/MetaStation"
- #define MAP_FILE "MetaStation.v41I.dmm"
+ #define MAP_FILE "MetaStation.dmm"
#define MAP_NAME "MetaStation"
#define MAP_TRANSITION_CONFIG list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, ABANDONED_SATELLITE = CROSSLINKED, DERELICT = CROSSLINKED, MINING = SELFLOOPING, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED, EMPTY_AREA_3 = CROSSLINKED, EMPTY_AREA_4 = CROSSLINKED)
diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm
index 3846904216b..387ebe9f888 100644
--- a/_maps/shuttles/emergency_bar.dmm
+++ b/_maps/shuttles/emergency_bar.dmm
@@ -34,7 +34,7 @@
"aH" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{name = "The Emergency Escape Bar"},/turf/open/floor/plasteel/bar,/area/shuttle/escape)
"aI" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
"aJ" = (/obj/structure/chair,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
-"aK" = (/mob/living/simple_animal/drone/snowflake{desc = "A barkeeping drone, an indestructible robot built to tend bars."; dir = 8; health = 3000; languages = 127; laws = "1. Serve drinks. 2. Talk to patrons. 3. Don't get messed up in their affairs."; maxHealth = 3000; name = "Bardrone"; seeStatic = 0},/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"aK" = (/mob/living/simple_animal/drone/snowflake/bardrone,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
"aL" = (/obj/machinery/vending/boozeomat,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
"aM" = (/obj/structure/table,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
"aN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 6; pixel_y = 4},/turf/open/floor/plasteel/bar,/area/shuttle/escape)
diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm
new file mode 100644
index 00000000000..3d8ebf08142
--- /dev/null
+++ b/_maps/shuttles/emergency_goon.dmm
@@ -0,0 +1,56 @@
+"a" = (/turf/open/space,/area/space)
+"b" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/open/floor/plating,/area/shuttle/escape)
+"c" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/open/floor/plating,/area/shuttle/escape)
+"d" = (/turf/closed/wall/shuttle{tag = "icon-swall0"; icon_state = "swall0"},/area/shuttle/escape)
+"e" = (/turf/closed/wall/shuttle{tag = "icon-wall_space (NORTH)"; icon_state = "wall_space"; dir = 1},/area/shuttle/escape)
+"f" = (/turf/closed/wall/shuttle{tag = "icon-swall2"; icon_state = "swall2"},/area/shuttle/escape)
+"g" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
+"h" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dir = 2; dwidth = 9; name = "NES Port"; width = 19},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
+"i" = (/turf/closed/wall/shuttle{tag = "icon-wall_space (WEST)"; icon_state = "wall_space"; dir = 8},/area/shuttle/escape)
+"j" = (/turf/closed/wall/shuttle{tag = "icon-swall4"; icon_state = "swall4"},/area/shuttle/escape)
+"k" = (/turf/closed/wall/shuttle{tag = "icon-swall12"; icon_state = "swall12"},/area/shuttle/escape)
+"l" = (/obj/machinery/vending/wallmed,/turf/closed/wall/shuttle{tag = "icon-swall8"; icon_state = "swall8"},/area/shuttle/escape)
+"m" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
+"n" = (/turf/closed/wall/shuttle{tag = "icon-swall1"; icon_state = "swall1"},/area/shuttle/escape)
+"o" = (/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
+"p" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plating,/area/shuttle/escape)
+"q" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
+"r" = (/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
+"s" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
+"t" = (/turf/closed/wall/shuttle{tag = "icon-wall_floor"; icon_state = "wall_floor"},/area/shuttle/escape)
+"u" = (/turf/open/space,/area/shuttle/escape)
+"v" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
+"w" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Infirmary"},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
+"x" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"y" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/emergency,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"z" = (/obj/structure/table/reinforced,/obj/item/device/radio,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"A" = (/obj/structure/chair/comfy/brown{dir = 4},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"B" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"C" = (/turf/closed/wall/shuttle{tag = "icon-swall8"; icon_state = "swall8"},/area/shuttle/escape)
+"D" = (/turf/closed/wall/shuttle{tag = "icon-swall3"; icon_state = "swall3"},/area/shuttle/escape)
+"E" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"F" = (/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"G" = (/obj/machinery/computer/emergency_shuttle,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"H" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
+"I" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"J" = (/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
+"K" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
+"L" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"M" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape)
+"N" = (/turf/closed/wall/shuttle{tag = "icon-wall_space (EAST)"; icon_state = "wall_space"; dir = 4},/area/shuttle/escape)
+"O" = (/turf/closed/wall/shuttle{tag = "icon-wall_floor (WEST)"; icon_state = "wall_floor"; dir = 8},/area/shuttle/escape)
+"P" = (/turf/closed/wall/shuttle{tag = "icon-wall_space"; icon_state = "wall_space"},/area/shuttle/escape)
+
+(1,1,1) = {"
+abcdeaafghfaaaaaaaa
+ijklfdmnoonmmdeaaaa
+bpqrnsssoossstddeua
+bpvrwooooossssxyzxe
+bpqrfssdooosssdAABx
+jkkCDssmooooooEFAGx
+bpHHnssdooosssdAAIx
+bpHJKooooossssxLMxN
+bpHHfsssoosssOddNua
+PjkCndmfoofmmdNaaaa
+abcdNaanggnaaaaaaaa
+"}
diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm
new file mode 100644
index 00000000000..4ecb0e8fd64
--- /dev/null
+++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm
@@ -0,0 +1,42 @@
+"a" = (/turf/closed/wall/mineral/wood,/area/shuttle/escape)
+"b" = (/obj/machinery/light_switch,/turf/closed/wall/mineral/wood,/area/shuttle/escape)
+"c" = (/obj/machinery/door/unpowered/shuttle,/obj/docking_port/mobile/emergency{dheight = 0; dir = 4; dwidth = 1; height = 10; name = "Oh Hi Mark"; width = 12},/turf/open/floor/wood,/area/shuttle/escape)
+"d" = (/turf/open/floor/wood,/area/shuttle/escape)
+"e" = (/obj/machinery/light{dir = 1},/turf/open/floor/carpet,/area/shuttle/escape)
+"f" = (/obj/structure/chair/comfy/teal,/turf/open/floor/carpet,/area/shuttle/escape)
+"g" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp,/turf/open/floor/carpet,/area/shuttle/escape)
+"h" = (/turf/open/floor/carpet,/area/shuttle/escape)
+"i" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife,/turf/open/floor/carpet,/area/shuttle/escape)
+"j" = (/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"k" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/vending/boozeomat,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"l" = (/obj/machinery/computer/security/wooden_tv,/turf/open/floor/carpet,/area/shuttle/escape)
+"m" = (/obj/structure/table/glass,/turf/open/floor/carpet,/area/shuttle/escape)
+"n" = (/obj/structure/chair/comfy/teal{tag = "icon-comfychair (WEST)"; icon_state = "comfychair"; dir = 8},/turf/open/floor/carpet,/area/shuttle/escape)
+"o" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/store/cake/birthday,/turf/open/floor/carpet,/area/shuttle/escape)
+"p" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"q" = (/obj/structure/table/reinforced,/turf/open/floor/carpet,/area/shuttle/escape)
+"r" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"s" = (/obj/machinery/door/window{dir = 8},/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"t" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/bar,/area/shuttle/escape)
+"u" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/wood,/area/shuttle/escape)
+"v" = (/obj/structure/chair/office/dark,/turf/open/floor/wood,/area/shuttle/escape)
+"w" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/mob_spawn/human/corpse,/obj/item/weapon/gun/projectile/automatic/pistol/m1911,/obj/machinery/light/small{dir = 8},/obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday,/turf/open/floor/carpet,/area/shuttle/escape)
+"x" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/obj/item/weapon/paper{info = "i love daniel
daniel is my best friend
you are tearing me apart elise"},/turf/open/floor/carpet,/area/shuttle/escape)
+"y" = (/obj/structure/flora/kirbyplants,/turf/open/floor/wood,/area/shuttle/escape)
+"z" = (/obj/structure/table/wood,/obj/item/weapon/papercutter,/turf/open/floor/wood,/area/shuttle/escape)
+"A" = (/obj/structure/table/wood,/obj/machinery/computer/libraryconsole/bookmanagement,/turf/open/floor/wood,/area/shuttle/escape)
+"B" = (/obj/machinery/light,/obj/structure/table/wood,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/wood,/area/shuttle/escape)
+"C" = (/obj/structure/mineral_door/wood,/turf/open/floor/wood,/area/shuttle/escape)
+"D" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/carpet,/area/shuttle/escape)
+
+(1,1,1) = {"
+abaaaaaaaa
+cdefghijka
+adlmnhojpa
+adhmnhqjra
+adhhhhsjta
+auddddaaaa
+addvddawxa
+ayzABdChDa
+aaaaaaaaaa
+"}
diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm
index c85ddedd921..d4cf6ff501d 100644
--- a/_maps/shuttles/emergency_narnar.dmm
+++ b/_maps/shuttles/emergency_narnar.dmm
@@ -15,20 +15,20 @@
"o" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"p" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"q" = (/obj/item/stack/sheet/metal,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
-"r" = (/obj/machinery/door/airlock/cult/unruned/glass,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
+"r" = (/obj/machinery/door/airlock/cult/unruned/glass/friendly,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"s" = (/obj/machinery/status_display,/turf/closed/wall/cult,/area/shuttle/escape)
"t" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"u" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"v" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"w" = (/mob/living/simple_animal/hostile/construct/builder,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
-"x" = (/obj/machinery/door/airlock/cult,/turf/open/floor/plating,/area/shuttle/escape)
+"x" = (/obj/machinery/door/airlock/cult/friendly,/turf/open/floor/plating,/area/shuttle/escape)
"y" = (/obj/effect/decal/cleanable/blood/gibs/up,/obj/item/candle/infinite,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"z" = (/obj/effect/rune/raise_dead,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"A" = (/obj/item/candle/infinite,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"B" = (/obj/effect/rune/true_sight,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/core,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"C" = (/mob/living/simple_animal/hostile/construct/armored,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"D" = (/obj/effect/rune/true_sight,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
-"E" = (/obj/machinery/door/airlock/cult,/obj/docking_port/mobile/emergency{name = "shuttle 667"},/turf/open/floor/plating,/area/shuttle/escape)
+"E" = (/obj/machinery/door/airlock/cult/friendly,/obj/docking_port/mobile/emergency{name = "shuttle 667"},/turf/open/floor/plating,/area/shuttle/escape)
"F" = (/obj/effect/decal/cleanable/blood/gibs/down,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"G" = (/obj/structure/extinguisher_cabinet{has_extinguisher = null; icon_state = "extinguisher_empty"; opened = 1; pixel_x = 27; pixel_y = 0},/obj/item/weapon/extinguisher{safety = 0},/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"H" = (/mob/living/simple_animal/hostile/construct/wraith,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
@@ -37,7 +37,7 @@
"K" = (/mob/living/simple_animal/hostile/carp/eyeball{faction = list("cult"); name = "right eyeball"},/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"L" = (/obj/effect/decal/cleanable/blood/drip,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"M" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/open/floor/plasteel/cult,/area/shuttle/escape)
-"N" = (/obj/machinery/door/airlock/cult/glass,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
+"N" = (/obj/machinery/door/airlock/cult/glass/friendly,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"O" = (/obj/structure/dresser,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"P" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
"Q" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/item/stack/sheet/metal,/turf/open/floor/plasteel/cult,/area/shuttle/escape)
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 0cbd606660e..04e5a8fbf0d 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -70,3 +70,13 @@
#define UNARMED_ATTACK 2
#define PROJECTILE_ATTACK 3
#define THROWN_PROJECTILE_ATTACK 4
+
+
+//Gun Stuff
+ #define SAWN_INTACT 0
+ #define SAWN_OFF 1
+ #define SAWN_SAWING -1
+
+ #define WEAPON_LIGHT 0
+ #define WEAPON_MEDIUM 1
+ #define WEAPON_HEAVY 2
\ No newline at end of file
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index d5c37b89886..8685d41921c 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -18,6 +18,7 @@
#define NODECONSTRUCT 128 // For machines and structures that should not break into parts, eg, holodeck stuff
#define FPRINT 256 // takes a fingerprint
#define ON_BORDER 512 // item has priority to check when entering or leaving
+#define HOLOGRAM 32768 // HOlodeck shit should not be used in any fucking things
#define HEADBANGPROTECT 4096
@@ -52,21 +53,20 @@
#define MUTCOLORS 1
#define HAIR 2
-#define FACEHAIR 4
-#define EYECOLOR 8
-#define LIPS 16
-#define RESISTCOLD 32
-#define RESISTHEAT 64
-#define RADIMMUNE 128
-#define NOBREATH 256
-#define NOGUNS 512
-#define NOBLOOD 1024
-#define NOFIRE 2048
-#define VIRUSIMMUNE 4096
-#define PIERCEIMMUNE 8192
-#define NOTRANSSTING 16384
-
-#define MUTCOLORS_PARTSONLY 32768 //Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless.
+#define FACEHAIR 3
+#define EYECOLOR 4
+#define LIPS 5
+#define RESISTTEMP 6
+#define RADIMMUNE 7
+#define NOBREATH 8
+#define NOGUNS 9
+#define NOBLOOD 10
+#define NOFIRE 11
+#define VIRUSIMMUNE 12
+#define PIERCEIMMUNE 13
+#define NOTRANSSTING 14
+#define MUTCOLORS_PARTSONLY 15 //Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless.
+#define NODISMEMBER 16
/*
These defines are used specifically with the atom/movable/languages bitmask.
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index f05b74117d9..7daf7eeaf3c 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -8,6 +8,14 @@
#define ishuman(A) (istype(A, /mob/living/carbon/human))
+// Human sub-species
+#define isabductor(A) (is_species(A, /datum/species/abductor))
+#define isgolem(A) (is_species(A, /datum/species/golem))
+#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/podperson))
+#define isflyperson(A) (is_species(A, /datum/species/fly))
+
#define ismonkey(A) (istype(A, /mob/living/carbon/monkey))
#define isbrain(A) (istype(A, /mob/living/carbon/brain))
@@ -32,6 +40,8 @@
#define ismouse(A) (istype(A, /mob/living/simple_animal/mouse))
+#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct))
+
#define isbear(A) (istype(A, /mob/living/simple_animal/hostile/bear))
#define iscarp(A) (istype(A, /mob/living/simple_animal/hostile/carp))
@@ -78,4 +88,4 @@
#define issignaler(O) (istype(O, /obj/item/device/assembly/signaler))
-#define istimer(O) (istype(O, /obj/item/device/assembly/timer))
\ No newline at end of file
+#define istimer(O) (istype(O, /obj/item/device/assembly/timer))
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 39c68439420..5fc6b1400d6 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -317,4 +317,11 @@ Proc for attack log creation, because really why not
. = 0
break mainloop
if(progbar)
- qdel(progbar)
\ No newline at end of file
+ qdel(progbar)
+
+/proc/is_species(A, species_datum)
+ . = FALSE
+ if(ishuman(A))
+ var/mob/living/carbon/human/H = A
+ if(H.dna && istype(H.dna.species, species_datum))
+ . = TRUE
diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm
index d7c5c307bc5..21752e31bd6 100644
--- a/code/datums/material_container.dm
+++ b/code/datums/material_container.dm
@@ -120,8 +120,7 @@
/datum/material_container/proc/use_amount_type(amt, material_type)
- var/datum/material/M
- M = materials[material_type]
+ var/datum/material/M = materials[material_type]
if(M)
if(M.amount >= amt)
M.amount -= amt
@@ -129,6 +128,20 @@
return amt
return 0
+/datum/material_container/proc/can_use_amount(amt, material_type, list/mats)
+ if(amt && material_type)
+ var/datum/material/M = materials[material_type]
+ if(M && M.amount >= amt)
+ return TRUE
+ else if(istype(mats))
+ for(var/M in mats)
+ if(materials[M] && mats[M] <= materials[M])
+ continue
+ else
+ return FALSE
+ return TRUE
+ return FALSE
+
//For spawning mineral sheets; internal use only
/datum/material_container/proc/retrieve(sheet_amt, datum/material/M)
if(sheet_amt > 0)
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index 9409e9b3b6f..5591c02439b 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -174,3 +174,28 @@
making sure people work on their cardio."
suffix = "lavaland_gym.dmm"
cost = 10
+
+/datum/map_template/ruin/lavaland/survivalcapsule
+ name = "Survival Capsule Ruins"
+ id = "survivalcapsule"
+ description = "What was once sanctuary to the common miner, \
+ is now their tomb."
+ suffix = "lavaland_surface_survivalpod.dmm"
+ cost = 5
+
+/datum/map_template/ruin/lavaland/wwiioutpost
+ name = "Strange Outpost"
+ id = "nazi"
+ description = "The ruins of an outpost, skeletons and empty shell casings litter the interior of \
+ the structure. Some of these uniforms look awfully strange.."
+ suffix = "lavaland_surface_wwiioutpost.dmm"
+ cost = 20
+ allow_duplicates = FALSE
+
+/datum/map_template/ruin/lavaland/tomb
+ name = "Strange Outpost"
+ id = "tomb"
+ description = "A strange tomb, housing the dead of whatever strange civilization \
+ lived here before. You swear you hear rattling coming from the inside."
+ suffix = "lavaland_surface_tomb.dmm"
+ cost = 10
diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm
index d7497bbe415..f34e49e96a0 100644
--- a/code/datums/shuttles.dm
+++ b/code/datums/shuttles.dm
@@ -112,6 +112,24 @@
without protective goggles. Emitters spawn powered on, expect \
admin notices, they are harmless."
+/datum/map_template/shuttle/emergency/imfedupwiththisworld
+ suffix = "imfedupwiththisworld"
+ name = "Oh, Hi Daniel"
+ description = "How was space work today? \
+ Oh, pretty good. We got a new space station and the company will make a lot of money. \
+ What space station? \
+ I cannot tell you; it's space confidential. \
+ Aw, come space on. Why not? \
+ No, I can't. Anyway, how is your space roleplay life?"
+
+/datum/map_template/shuttle/emergency/goon
+ suffix = "goon"
+ name = "NES Port"
+ description = "The Nanotrasen Emergency Shuttle Port(NES Port for short) \
+ is a shuttle used at other less known nanotrasen facilities \
+ and has a more open inside for larger crowds."
+
+
/datum/map_template/shuttle/ferry/base
suffix = "base"
name = "transport ferry"
diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm
index f5a415985fe..e1ade57fe22 100644
--- a/code/game/gamemodes/blob/blob_finish.dm
+++ b/code/game/gamemodes/blob/blob_finish.dm
@@ -1,9 +1,9 @@
/datum/game_mode/blob/check_finished()
- if(blob_overminds.len > cores_to_spawn && cores_to_spawn > blob_cores.len)//Some blobs have yet to burst
+ if(overminds.len)
return 0
if(blobwincount <= blobs_legit.len)//Blob took over
return 1
- if(!overminds.len && !blob_cores.len) //blob is dead
+ if(!blob_cores.len) //blob is dead
if(config.continuous["blob"])
continuous_sanity_checked = 1 //Nonstandard definition of "alive" gets past the check otherwise
SSshuttle.emergencyNoEscape = 0
diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm
index e4c68a8537c..1331788dc4e 100644
--- a/code/game/gamemodes/changeling/powers/fleshmend.dm
+++ b/code/game/gamemodes/changeling/powers/fleshmend.dm
@@ -1,13 +1,17 @@
/obj/effect/proc_holder/changeling/fleshmend
name = "Fleshmend"
- desc = "Our flesh rapidly regenerates, healing our wounds. Effectiveness decreases with quick, repeated use."
- helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious, and will alert nearby crew."
+ desc = "Our flesh rapidly regenerates, healing our wounds, and growing \
+ back missing limbs. Effectiveness decreases with quick, repeated use."
+ helptext = "Heals a moderate amount of damage over a short period of \
+ time. Can be used while unconscious. Will alert nearby crew if \
+ any limbs are regenerated."
chemical_cost = 25
dna_cost = 2
req_stat = UNCONSCIOUS
var/recent_uses = 1 //The factor of which the healing should be divided by
var/healing_ticks = 10
- // The ideal total healing amount, divided by healing_ticks to get heal/tick
+ // The ideal total healing amount,
+ // divided by healing_ticks to get heal/tick
var/total_healing = 100
/obj/effect/proc_holder/changeling/fleshmend/New()
@@ -22,25 +26,29 @@
if(recent_uses > 1)
recent_uses = max(1, recent_uses - (1 / healing_ticks))
-//Starts healing you every second for 10 seconds. Can be used whilst unconscious.
+//Starts healing you every second for 10 seconds.
+//Can be used whilst unconscious.
/obj/effect/proc_holder/changeling/fleshmend/sting_action(mob/living/user)
user << "We begin to heal rapidly."
if(recent_uses > 1)
- user << "Our healing's effectiveness is reduced by quickly repeated use!"
+ user << "Our healing's effectiveness is reduced \
+ by quick repeated use!"
spawn(0)
recent_uses++
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.restore_blood()
H.remove_all_embedded_objects()
- if(H.get_missing_limbs())
+ var/list/missing = H.get_missing_limbs()
+ if(missing.len)
playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1)
H.visible_message("[user]'s missing limbs reform, making a loud, grotesque sound!", "Your limbs regrow, making a loud, crunchy sound and giving you great pain!", "You hear organic matter ripping and tearing!")
H.emote("scream")
H.regenerate_limbs(1)
- // The healing itself - doesn't heal toxin damage (that's anatomic panacea) and
- // effectiveness decreases with each use in a short timespan
+ // The healing itself - doesn't heal toxin damage
+ // (that's anatomic panacea) and the effectiveness decreases with
+ // each use in a short timespan
for(var/i in 1 to healing_ticks)
if(user)
var/healpertick = -(total_healing / healing_ticks)
diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm
index 2d906e37ed0..861ded33da2 100644
--- a/code/game/gamemodes/changeling/traitor_chan.dm
+++ b/code/game/gamemodes/changeling/traitor_chan.dm
@@ -43,6 +43,7 @@
for(var/j = 0, j < num_changelings, j++)
if(!possible_changelings.len) break
var/datum/mind/changeling = pick(possible_changelings)
+ antag_candidates -= changeling
possible_changelings -= changeling
changelings += changeling
modePlayer += changelings
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index dc706d3934f..e5cc534da09 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -21,8 +21,14 @@
return 0
if(isloyal(mind.current))
return 0
- if (ticker.mode.name == "cult") //redundant?
- if(is_sacrifice_target(mind)) return 0
+ if(issilicon(mind.current) || isbot(mind.current) || isdrone(mind.current))
+ return 0 //can't convert machines, that's ratvar's thing
+ if(isguardian(mind.current))
+ var/mob/living/simple_animal/hostile/guardian/G = mind.current
+ if(!iscultist(G.summoner))
+ return 0 //can't convert it unless the owner is converted
+ if(is_sacrifice_target(mind))
+ return 0
return 1
/datum/game_mode/cult
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index a4648b5fac6..a5a299d068c 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -8,9 +8,21 @@
/obj/structure/cult/examine(mob/user)
..()
+ user << "\The [src] is [anchored ? "":"not "]secured to the floor."
if(iscultist(user) && cooldowntime > world.time)
user << "The magic in [src] is weak, it will be ready to use again in [getETA()]."
+/obj/structure/cult/attackby(obj/I, mob/user, params)
+ if(istype(I, /obj/item/weapon/tome) && iscultist(user))
+ anchored = !anchored
+ user << "You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor."
+ if(!anchored)
+ icon_state = "[initial(icon_state)]_off"
+ else
+ icon_state = initial(icon_state)
+ else
+ return ..()
+
/obj/structure/cult/proc/getETA()
var/time = (cooldowntime - world.time)/600
var/eta = "[round(time, 1)] minutes"
@@ -28,6 +40,9 @@
if(!iscultist(user))
user << "You're pretty sure you know exactly what this is used for and you can't seem to touch it."
return
+ if(!anchored)
+ user << "You need to anchor [src] to the floor with a tome first."
+ return
if(cooldowntime > world.time)
user << "The magic in [src] is weak, it will be ready to use again in [getETA()]."
return
@@ -40,7 +55,7 @@
pickedtype = /obj/item/clothing/glasses/night/cultblind
if("Flask of Unholy Water")
pickedtype = /obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater
- if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time)
+ if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
var/obj/item/N = new pickedtype(get_turf(src))
user << "You kneel before the altar and your faith is rewarded with an [N]!"
@@ -56,6 +71,9 @@
if(!iscultist(user))
user << "The heat radiating from [src] pushes you back."
return
+ if(!anchored)
+ user << "You need to anchor [src] to the floor with a tome first."
+ return
if(cooldowntime > world.time)
user << "The magic in [src] is weak, it will be ready to use again in [getETA()]."
return
@@ -68,7 +86,7 @@
pickedtype = /obj/item/clothing/suit/hooded/cultrobes/berserker
if("Nar-Sien Hardsuit")
pickedtype = /obj/item/clothing/suit/space/hardsuit/cult
- if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time)
+ if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
var/obj/item/N = new pickedtype(get_turf(src))
user << "You work the forge as dark knowledge guides your hands, creating [N]!"
@@ -79,44 +97,49 @@
desc = "A floating crystal that slowly heals those faithful to Nar'Sie."
icon_state = "pylon"
luminosity = 5
- var/heal_delay = 50
- var/last_shot = 0
- var/list/corruption = list()
+ var/heal_delay = 25
+ var/last_heal = 0
+ var/corrupt_delay = 50
+ var/last_corrupt = 0
/obj/structure/cult/pylon/New()
- SSobj.processing |= src
- corruption += get_turf(src)
- for(var/i in 1 to 5)
- for(var/t in corruption)
- var/turf/T = t
- corruption |= T.GetAtmosAdjacentTurfs()
+ SSfastprocess.processing |= src
..()
/obj/structure/cult/pylon/Destroy()
- SSobj.processing.Remove(src)
+ SSfastprocess.processing.Remove(src)
return ..()
/obj/structure/cult/pylon/process()
- if((last_shot + heal_delay) <= world.time)
- last_shot = world.time
+ if(!anchored)
+ return
+ if(last_heal <= world.time)
+ last_heal = world.time + heal_delay
for(var/mob/living/L in range(5, src))
- if(iscultist(L))
- var/mob/living/carbon/human/H = L
- if(istype(H))
- L.adjustBruteLoss(-1, 0)
- L.adjustFireLoss(-1, 0)
- L.updatehealth()
- if(istype(L, /mob/living/simple_animal/hostile/construct))
- var/mob/living/simple_animal/M = L
- if(M.health < M.maxHealth)
- M.adjustHealth(-2)
- if(corruption.len)
- var/turf/T = pick_n_take(corruption)
- corruption -= T
- if(istype(T, /turf/open/floor/engine/cult) || istype(T, /turf/open/space) || istype(T, /turf/open/floor/plating/lava))
- return
+ if(iscultist(L) || istype(L, /mob/living/simple_animal/shade) || istype(L, /mob/living/simple_animal/hostile/construct))
+ if(L.health != L.maxHealth)
+ PoolOrNew(/obj/effect/overlay/temp/heal, list(get_turf(src), "#960000"))
+ if(ishuman(L))
+ L.adjustBruteLoss(-1, 0)
+ L.adjustFireLoss(-1, 0)
+ L.updatehealth()
+ if(istype(L, /mob/living/simple_animal/shade) || istype(L, /mob/living/simple_animal/hostile/construct))
+ var/mob/living/simple_animal/M = L
+ if(M.health < M.maxHealth)
+ M.adjustHealth(-1)
+ CHECK_TICK
+ if(last_corrupt <= world.time)
+ var/list/validturfs = list()
+ for(var/T in circleviewturfs(src, 5))
+ if(istype(T, /turf/closed) || istype(T, /turf/open/floor/engine/cult) || istype(T, /turf/open/space) || istype(T, /turf/open/floor/plating/lava))
+ continue
+ validturfs |= T
+ var/turf/T = safepick(validturfs)
+ if(T)
T.ChangeTurf(/turf/open/floor/engine/cult)
-
+ last_corrupt = world.time + corrupt_delay
+ else
+ last_corrupt = world.time + corrupt_delay*2
/obj/structure/cult/tome
name = "archives"
@@ -128,6 +151,9 @@
if(!iscultist(user))
user << "All of these books seem to be gibberish."
return
+ if(!anchored)
+ user << "You need to anchor [src] to the floor with a tome first."
+ return
if(cooldowntime > world.time)
user << "The magic in [src] is weak, it will be ready to use again in [getETA()]."
return
@@ -140,7 +166,7 @@
pickedtype = /obj/item/device/shuttle_curse
if("Veil Shifter")
pickedtype = /obj/item/device/cult_shift
- if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time)
+ if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
var/obj/item/N = new pickedtype(get_turf(src))
user << "You summon [N] from the archives!"
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index ecd8c75aa6e..de7f5cb0a92 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -17,6 +17,7 @@ This file contains the arcane tome files.
..()
if(iscultist(user) || user.stat == DEAD)
user << "The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar-Sie."
+ user << "Striking a cult structure will unanchor or reanchor it."
user << "Striking another cultist with it will purge holy water from them."
user << "Striking a noncultist, however, will sear their flesh."
@@ -154,7 +155,7 @@ This file contains the arcane tome files.
text += "Juggernaut
The Juggernaut is a slow, but durable, melee attacker which can produce temporary forcewalls. It will also reflect most lethal energy weapons.
"
- text += "Artificer
The Artificer is a weak and fragile construct, able to heal other constructs, produce more soulstones and construct shells, \
+ text += "Artificer
The Artificer is a weak and fragile construct, able to heal other constructs, shades, or itself, produce more soulstones and construct shells, \
construct fortifying cult walls and flooring, and finally, it can release a few indiscriminate stunning missiles.
"
text += "Harvester
If you see one, know that you have done all you can and your life is void.
"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 44e546a9f76..fd97b4f73a8 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -24,7 +24,6 @@ To draw a rune, use an arcane tome.
unacidable = 1
layer = TURF_LAYER + 0.08
color = rgb(255,0,0)
- mouse_opacity = 2
var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked.
var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it.
@@ -203,7 +202,7 @@ structure_check() searches for nearby cultist structures required for the invoca
log_game("Talisman Creation rune failed - already in use")
return
var/obj/item/weapon/paper/paper_to_imbue = pick(papers_on_rune)
- for(var/I in subtypesof(/obj/item/weapon/paper/talisman) - /obj/item/weapon/paper/talisman/malformed - /obj/item/weapon/paper/talisman/supply)
+ for(var/I in subtypesof(/obj/item/weapon/paper/talisman) - /obj/item/weapon/paper/talisman/malformed - /obj/item/weapon/paper/talisman/supply - /obj/item/weapon/paper/talisman/supply/weak)
var/obj/item/weapon/paper/talisman/J = I
var/talisman_cult_name = initial(J.cultist_name)
if(talisman_cult_name)
@@ -300,7 +299,7 @@ var/list/teleport_runes = list()
fail_invoke()
-//Rite of Enlightenment: Converts a normal crewmember to the cult. Faster for every cultist nearby.
+//Rite of Enlightenment: Converts a normal crewmember to the cult.
/obj/effect/rune/convert
cultist_name = "Convert"
cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on loyalty-implanted crew."
@@ -312,21 +311,22 @@ var/list/teleport_runes = list()
/obj/effect/rune/convert/invoke(var/list/invokers)
var/list/convertees = list()
var/turf/T = get_turf(src)
- for(var/mob/living/M in T.contents)
- if(!iscultist(M) && !isloyal(M))
- convertees.Add(M)
+ for(var/mob/living/M in T)
+ if(M.stat != DEAD && !iscultist(M) && is_convertable_to_cult(M.mind))
+ convertees |= M
+ else if(is_sacrifice_target(M.mind))
+ for(var/C in invokers)
+ C << "\"I desire this one for myself. SACRIFICE THEM!\""
if(!convertees.len)
fail_invoke()
log_game("Convert rune failed - no eligible convertees")
return
var/mob/living/new_cultist = pick(convertees)
- if(!is_convertable_to_cult(new_cultist.mind) || new_cultist.null_rod_check())
+ if(new_cultist.null_rod_check())
for(var/M in invokers)
M << "Something is shielding [new_cultist]'s mind!"
- if(is_sacrifice_target(new_cultist.mind))
- M << "\"I desire this one for myself. SACRIFICE THEM!\""
fail_invoke()
- log_game("Convert rune failed - convertee could not be converted")
+ log_game("Convert rune failed - convertee had null rod")
return
..()
new_cultist.visible_message("[new_cultist] writhes in pain as the markings below them glow a bloody red!", \
@@ -448,7 +448,6 @@ var/list/teleport_runes = list()
icon_state = "rune_large"
pixel_x = -32 //So the big ol' 96x96 sprite shows up right
pixel_y = -32
- mouse_opacity = 1 //we're huge and easy to click
scribe_delay = 450 //how long the rune takes to create
scribe_damage = 40.1 //how much damage you take doing it
var/used
@@ -534,40 +533,29 @@ var/list/teleport_runes = list()
var/mob/living/user = invokers[1]
if(rune_in_use)
return
- for(var/mob/living/M in orange(1,src))
- if(M.stat == DEAD)
- potential_sacrifice_mobs.Add(M)
+ for(var/mob/living/M in orange(1,T))
+ if(M.stat == DEAD && !iscultist(M))
+ potential_sacrifice_mobs |= M
if(!potential_sacrifice_mobs.len)
user << "There are no eligible sacrifices nearby!"
- log_game("Raise Dead rune failed - no catalyst corpse")
- return
- mob_to_sacrifice = input(user, "Choose a corpse to sacrifice.", "Corpse to Sacrifice") as null|anything in potential_sacrifice_mobs
- if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated() || !mob_to_revive || !mob_to_sacrifice || rune_in_use)
+ log_game("Raise Dead rune failed - no catalyst corpses")
+ fail_invoke()
return
for(var/mob/living/M in T.contents)
if(M.stat == DEAD)
- potential_revive_mobs.Add(M)
+ potential_revive_mobs |= M
if(!potential_revive_mobs.len)
user << "There is no eligible revival target on the rune!"
- log_game("Raise Dead rune failed - no corpse to revived")
+ log_game("Raise Dead rune failed - no corpses to revive")
+ fail_invoke()
+ return
+ mob_to_sacrifice = input(user, "Choose a corpse to sacrifice.", "Corpse to Sacrifice") as null|anything in potential_sacrifice_mobs
+ if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, 1))
return
mob_to_revive = input(user, "Choose a corpse to revive.", "Corpse to Revive") as null|anything in potential_revive_mobs
- if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated() || rune_in_use)
+ if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, 1))
return
- if(!in_range(mob_to_sacrifice,src))
- user << "The sacrificial target has been moved!"
- fail_invoke()
- log_game("Raise Dead rune failed - catalyst corpse moved")
- return
- if(!(mob_to_revive in T.contents))
- user << "The corpse to revive has been moved!"
- fail_invoke()
- log_game("Raise Dead rune failed - revival target moved")
- return
- if(mob_to_sacrifice.stat != DEAD)
- user << "The sacrificial target must be dead!"
- fail_invoke()
- log_game("Raise Dead rune failed - catalyst corpse is not dead")
+ if(!validness_checks(mob_to_revive, user, 0))
return
rune_in_use = 1
if(user.name == "Herbert West")
@@ -579,19 +567,47 @@ var/list/teleport_runes = list()
mob_to_revive.Beam(mob_to_sacrifice,icon_state="sendbeam",icon='icons/effects/effects.dmi',time=20)
sleep(20)
if(!mob_to_sacrifice || !in_range(mob_to_sacrifice, src))
- mob_to_sacrifice.visible_message("[mob_to_sacrifice] disintegrates into a pile of bones")
+ rune_in_use = 0
return
- mob_to_sacrifice.dust()
if(!mob_to_revive || mob_to_revive.stat != DEAD)
visible_message("The glowing tendril snaps against the rune with a shocking crack.")
rune_in_use = 0
+ fail_invoke()
return
- mob_to_revive.revive() //This does remove disabilities and such, but the rune might actually see some use because of it!
+ mob_to_sacrifice.visible_message("[mob_to_sacrifice] disintegrates into a pile of bones.")
+ mob_to_sacrifice.dust()
+ mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it!
mob_to_revive << "\"PASNAR SAVRAE YAM'TOTH. Arise.\""
mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from their eyes.", \
"You awaken suddenly from the void. You're alive!")
rune_in_use = 0
+/obj/effect/rune/raise_dead/proc/validness_checks(mob/living/target_mob, mob/living/user, saccing)
+ var/turf/T = get_turf(src)
+ if(!user)
+ return 0
+ if(!Adjacent(user) || user.incapacitated())
+ return 0
+ if(!target_mob)
+ fail_invoke()
+ return 0
+ if(saccing)
+ if(!in_range(target_mob, src))
+ user << "The sacrificial target has been moved!"
+ fail_invoke()
+ log_game("Raise Dead rune failed - catalyst corpse moved")
+ return 0
+ if(target_mob.stat != DEAD)
+ user << "The sacrificial target must be dead!"
+ fail_invoke()
+ log_game("Raise Dead rune failed - catalyst corpse is not dead")
+ return 0
+ else if(!(target_mob in T.contents))
+ user << "The corpse to revive has been moved!"
+ fail_invoke()
+ log_game("Raise Dead rune failed - revival target moved")
+ return 0
+ return 1
/obj/effect/rune/raise_dead/fail_invoke()
..()
@@ -783,8 +799,9 @@ var/list/teleport_runes = list()
/obj/effect/rune/blood_boil/invoke(var/list/invokers)
..()
+ var/turf/T = get_turf(src)
visible_message("[src] briefly bubbles before exploding!")
- for(var/mob/living/carbon/C in viewers(src))
+ for(var/mob/living/carbon/C in viewers(T))
if(!iscultist(C))
var/obj/item/weapon/nullrod/N = C.null_rod_check()
if(N)
@@ -797,8 +814,8 @@ var/list/teleport_runes = list()
var/mob/living/L = M
L.apply_damage(15, BRUTE, pick("l_arm", "r_arm"))
L << "[src] saps your strength!"
- explosion(get_turf(src), -1, 0, 1, 5)
qdel(src)
+ explosion(T, -1, 0, 1, 5)
//Rite of Spectral Manifestation: Summons a ghost on top of the rune as a cultist human with no items. User must stand on the rune at all times, and takes damage for each summoned ghost.
diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm
index b43ee71186c..8628b91fb87 100644
--- a/code/game/gamemodes/gang/gang.dm
+++ b/code/game/gamemodes/gang/gang.dm
@@ -263,8 +263,10 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
if(gangs.len)
if(!winner)
world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]
"
+ feedback_set_details("round_end_result","win - gang domination complete")
else
world << "The [winner.name] Gang successfully performed a hostile takeover of the station!
"
+ feedback_set_details("round_end_result","loss - gangs failed takeover")
for(var/datum/gang/G in gangs)
var/text = "The [G.name] Gang was [winner==G ? "victorious" : "defeated"] with [round((G.territory.len/start_state.num_territories)*100, 1)]% control of the station!"
diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm
index 3e602b824e4..c5f3dfa2a70 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction.dm
@@ -236,8 +236,8 @@
console.vest = V
V.flags |= NODROP
agent.equip_to_slot_or_del(V, slot_wear_suit)
- agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack)
- agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_belt)
+ agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_belt)
+ agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_in_backpack)
agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack)
agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head)
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
index 914dfa1c9d0..989c076a27f 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
@@ -112,19 +112,11 @@
if(combat_cooldown==initial(combat_cooldown))
SSobj.processing.Remove(src)
-/obj/item/device/abductor/proc/IsAbductor(user)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.dna.species.id != "abductor")
- return 0
- return 1
- return 0
-
/obj/item/device/abductor/proc/AbductorCheck(user)
- if(IsAbductor(user))
- return 1
+ if(isabductor(user))
+ return TRUE
user << "You can't figure how this works!"
- return 0
+ return FALSE
/obj/item/device/abductor/proc/ScientistCheck(user)
var/mob/living/carbon/human/H = user
@@ -194,7 +186,7 @@
user << "This specimen is already marked!"
return
if(istype(target,/mob/living/carbon/human))
- if(IsAbductor(target))
+ if(isabductor(target))
marked = target
user << "You mark [target] for future retrieval."
else
@@ -304,27 +296,26 @@
break
return console
-
-/obj/item/device/firing_pin/alien
+/obj/item/device/firing_pin/abductor
name = "alien firing pin"
- desc = "An odd device that resembles a firing pin."
- fail_message = "UNAUTHORIZED -- UNAUTHORIZED"
+ icon_state = "firing_pin_ayy"
+ desc = "This firing pin is slimy and warm; you can swear you feel it \
+ constantly trying to mentally probe you."
+ fail_message = "\
+ Firing error, please contact Command."
-/obj/item/device/firing_pin/alien/pin_auth(mob/living/user)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.dna.species.id != "abductor")
- return 0
- return 1
+/obj/item/device/firing_pin/abductor/pin_auth(mob/living/user)
+ . = isabductor(user)
/obj/item/weapon/gun/energy/alien
name = "alien pistol"
desc = "A complicated gun that fires bursts of high-intensity radiation."
ammo_type = list(/obj/item/ammo_casing/energy/declone)
- pin = /obj/item/device/firing_pin/alien
+ pin = /obj/item/device/firing_pin/abductor
icon_state = "alienpistol"
item_state = "alienpistol"
origin_tech = "combat=5;materials=4;powerstorage=3;abductor=3"
+ trigger_guard = TRIGGER_GUARD_ALLOW_ALL
/obj/item/weapon/paper/abductor
name = "Dissection Guide"
@@ -402,16 +393,8 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "wonderprodProbe"
item_state = "wonderprodProbe"
-/obj/item/weapon/abductor_baton/proc/IsAbductor(mob/living/user)
- if(!ishuman(user))
- return 0
- var/mob/living/carbon/human/H = user
- if(H.dna.species.id != "abductor")
- return 0
- return 1
-
/obj/item/weapon/abductor_baton/attack(mob/target, mob/living/user)
- if(!IsAbductor(user))
+ if(!isabductor(user))
return
if(isrobot(target))
@@ -689,4 +672,4 @@ Congratulations! You are now trained for xenobiology research!"}
else if(istype(W, /obj/item/stack/sheet))
return // no material modding
else
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
index 2a69da0950a..9c06517bd95 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
@@ -45,15 +45,12 @@
set_droppoint_action.target = console
set_droppoint_action.Grant(user)
-/obj/machinery/computer/camera_advanced/abductor/proc/IsAbductor(mob/living/carbon/human/H)
- return H.dna.species.id == "abductor"
-
/obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H)
var/datum/species/abductor/S = H.dna.species
return S.scientist
/obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user)
- if(!iscarbon(user) || !IsAbductor(user))
+ if(!isabductor(user))
return
return ..()
@@ -154,4 +151,4 @@
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
var/obj/machinery/abductor/console/console = target
- console.SetDroppoint(remote_eye.loc,owner)
\ No newline at end of file
+ console.SetDroppoint(remote_eye.loc,owner)
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm
index a2f029725a3..de3a3b468ea 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm
@@ -3,9 +3,6 @@
/obj/machinery/abductor
var/team = 0
-/obj/machinery/abductor/proc/IsAbductor(mob/living/carbon/human/H)
- return H.dna.species.id == "abductor"
-
/obj/machinery/abductor/proc/IsAgent(mob/living/carbon/human/H)
if(H.dna.species.id == "abductor")
var/datum/species/abductor/S = H.dna.species
@@ -37,7 +34,7 @@
/obj/machinery/abductor/console/attack_hand(mob/user)
if(..())
return
- if(!IsAbductor(user))
+ if(!isabductor(user))
user << "You start mashing alien buttons at random!"
if(do_after(user,100, target = src))
TeleporterSend()
@@ -208,4 +205,4 @@
new item(src.loc)
else
say("Insufficent data!")
- return
\ No newline at end of file
+ return
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm
index dc1a5ec85f7..09f63616766 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm
@@ -25,7 +25,7 @@
/obj/machinery/abductor/gland_dispenser/attack_hand(mob/user)
if(..())
return
- if(!IsAbductor(user))
+ if(!isabductor(user))
return
user.set_machine(src)
var/box_css = {"
@@ -82,4 +82,4 @@
if(amounts[count]>0)
amounts[count]--
var/T = gland_types[count]
- new T(get_turf(src))
\ No newline at end of file
+ new T(get_turf(src))
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
index 19fbe24f92d..7b32758a6dd 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
@@ -15,7 +15,7 @@
/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
return
- if(IsAbductor(target))
+ if(isabductor(target))
return
close_machine(target)
@@ -30,8 +30,8 @@
..()
/obj/machinery/abductor/experiment/close_machine(mob/target)
- for(var/mob/living/carbon/C in loc)
- if(IsAbductor(C))
+ for(var/A in loc)
+ if(isabductor(A))
return
if(state_open && !panel_open)
..(target)
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index 9ea427013e0..5ef9970bb3c 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -254,10 +254,10 @@ Made by Xhuis
name = "Shadowling"
id = "shadowling"
say_mod = "chitters"
- specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,NOGUNS) //Can't use guns due to muzzle flash
+ specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,NOGUNS,NODISMEMBER) //Can't use guns due to muzzle flash
burnmod = 1.5 //1.5x burn damage, 2x is excessive
heatmod = 1.5
- has_dismemberment = 0
+
/datum/species/shadow/ling/spec_life(mob/living/carbon/human/H)
if(!H.weakeyes) H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 4014ad407ec..a26857fd63b 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -133,6 +133,9 @@
busy = 0
return 1
+ if(O.flags & HOLOGRAM)
+ return 1
+
var/material_amount = materials.get_item_material_amount(O)
if(!material_amount)
user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe."
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 253a3c1c8d7..7f80531c354 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -1,1115 +1,1111 @@
-/obj/machinery/computer/arcade/
- name = "random arcade"
- desc = "random arcade machine"
- icon_state = "arcade"
- icon_keyboard = null
- icon_screen = "invaders"
- var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
- /obj/item/toy/AI = 2,
- /obj/item/toy/codex_gigas = 2,
- /obj/item/clothing/under/syndicate/tacticool = 2,
- /obj/item/toy/sword = 2,
- /obj/item/toy/gun = 2,
- /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2,
- /obj/item/weapon/storage/box/fakesyndiesuit = 2,
- /obj/item/weapon/storage/crayons = 2,
- /obj/item/toy/spinningtoy = 2,
- /obj/item/toy/prize/ripley = 1,
- /obj/item/toy/prize/fireripley = 1,
- /obj/item/toy/prize/deathripley = 1,
- /obj/item/toy/prize/gygax = 1,
- /obj/item/toy/prize/durand = 1,
- /obj/item/toy/prize/honk = 1,
- /obj/item/toy/prize/marauder = 1,
- /obj/item/toy/prize/seraph = 1,
- /obj/item/toy/prize/mauler = 1,
- /obj/item/toy/prize/odysseus = 1,
- /obj/item/toy/prize/phazon = 1,
- /obj/item/toy/prize/reticence = 1,
- /obj/item/toy/cards/deck = 2,
- /obj/item/toy/nuke = 2,
- /obj/item/toy/minimeteor = 2,
- /obj/item/toy/carpplushie = 2,
- /obj/item/toy/foamblade = 2,
- /obj/item/toy/redbutton = 2,
- /obj/item/toy/talking/owl = 2,
- /obj/item/toy/talking/griffin = 2,
- /obj/item/weapon/coin/antagtoken = 2,
- /obj/item/stack/tile/fakespace/loaded = 2,
- /obj/item/toy/toy_xeno = 2,
- /obj/item/weapon/restraints/handcuffs/fake = 2
- )
-
-/obj/machinery/computer/arcade/New()
- ..()
- // If it's a generic arcade machine, pick a random arcade
- // circuit board for it and make the new machine
- if(!circuit)
- var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade))
- var/obj/item/weapon/circuitboard/CB = new choice()
- new CB.build_path(loc, CB)
- qdel(src)
-
-/obj/machinery/computer/arcade/proc/prizevend()
- if(prob(0.0001)) //1 in a million
- new /obj/item/weapon/gun/energy/pulse(src)
-
- if(!contents.len)
- var/prizeselect = pickweight(prizes)
- new prizeselect(src.loc)
-
- if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun
- new /obj/item/toy/ammo/gun(src.loc)
-
- else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit
- new /obj/item/clothing/head/syndicatefake(src.loc)
-
- else
- var/atom/movable/prize = pick(contents)
- prize.loc = src.loc
-
-/obj/machinery/computer/arcade/emp_act(severity)
- ..(severity)
-
- if(stat & (NOPOWER|BROKEN))
- return
-
- var/empprize = null
- var/num_of_prizes = 0
- switch(severity)
- if(1)
- num_of_prizes = rand(1,4)
- if(2)
- num_of_prizes = rand(0,2)
- for(var/i = num_of_prizes; i > 0; i--)
- empprize = pickweight(prizes)
- new empprize(src.loc)
- explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes)
-
-
-// ** BATTLE ** //
-
-
-/obj/machinery/computer/arcade/battle
- name = "arcade machine"
- desc = "Does not support Pinball."
- icon_state = "arcade"
- circuit = /obj/item/weapon/circuitboard/computer/arcade/battle
- var/enemy_name = "Space Villian"
- var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc
- var/player_hp = 30 //Player health/attack points
- var/player_mp = 10
- var/enemy_hp = 45 //Enemy health/attack points
- var/enemy_mp = 20
- var/gameover = 0
- var/blocked = 0 //Player cannot attack/heal while set
- var/turtle = 0
-
-/obj/machinery/computer/arcade/battle/New()
- ..()
- var/name_action
- var/name_part1
- var/name_part2
-
- name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ")
-
- name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ")
- name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers")
-
- src.enemy_name = replacetext((name_part1 + name_part2), "the ", "")
- src.name = (name_action + name_part1 + name_part2)
-
-/obj/machinery/computer/arcade/battle/attack_hand(mob/user)
- if(..())
- return
- user.set_machine(src)
- var/dat = "Close"
- dat += "
Crew Management:
" - - //Buy crew - if(food >= 10 && fuel >= 10) - eventdat += "Hire a new Crewmember (-10FU,-10FO)
" - else - eventdat += "Cant afford a new Crewmember
" - - //Sell crew - if(settlers.len > 1) - eventdat += "Sell crew for Fuel and Food (+7FU,+7FO)
" - else - eventdat += "Cant afford to sell a Crewmember
" - - //BUY/SELL STUFF - eventdat += "Spare Parts:
" - - //Engine parts - if(fuel > 5) - eventdat += "" - else - eventdat += "Cant afford to buy Engine Parts" - - //Hull plates - if(fuel > 5) - eventdat += "
" - else - eventdat += "Cant afford to buy Hull Plates" - - //Electronics - if(fuel > 5) - eventdat += "
" - else - eventdat += "Cant afford to buy Spare Electronics" - - //Trade - if(fuel > 5) - eventdat += "
Trade Fuel for Food (-5FU,+5FO)
" - else - eventdat += "Cant afford to Trade Fuel for Food
5) - eventdat += "Trade Food for Fuel (+5FU,-5FO)
" - else - eventdat += "Cant afford to Trade Food for Fuel
!! Raid Spaceport !!" - - eventdat += "" - - -//Add Random/Specific crewmember -/obj/machinery/computer/arcade/orion_trail/proc/add_crewmember(var/specific = "") - var/newcrew = "" - if(specific) - newcrew = specific - else - if(prob(50)) - newcrew = pick(first_names_male) - else - newcrew = pick(first_names_female) - if(newcrew) - settlers += newcrew - alive++ - return newcrew - - -//Remove Random/Specific crewmember -/obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(var/specific = "", var/dont_remove = "") - var/list/safe2remove = settlers - var/removed = "" - if(dont_remove) - safe2remove -= dont_remove - if(specific && specific != dont_remove) - safe2remove = list(specific) - else - removed = pick(safe2remove) - - if(removed) - if(lings_aboard && prob(40*lings_aboard)) //if there are 2 lings you're twice as likely to get one, obviously - lings_aboard = max(0,--lings_aboard) - settlers -= removed - alive-- - return removed - - -/obj/machinery/computer/arcade/orion_trail/proc/win() - gameStatus = ORION_STATUS_START - say("Congratulations, you made it to Orion!") - if(emagged) - new /obj/item/weapon/orion_ship(src.loc) - message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") - log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") - else - prizevend() - emagged = 0 - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - -/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) - if(!emagged) - user << "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." - name = "The Orion Trail: Realism Edition" - desc = "Learn how our ancestors got to Orion, and try not to die in the process!" - newgame() - emagged = 1 - -/mob/living/simple_animal/hostile/syndicate/ranged/orion - name = "Spaceport Security" - desc = "The Premier security forces for all spaceports found along the Orion Trail." - faction = list("orion") - loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity, - /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted, - /obj/item/weapon/shield/energy) - -/obj/effect/mob_spawn/human/corpse/orionsecurity - name = "Spaceport Security" - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - radio = /obj/item/device/radio/headset - mask = /obj/item/clothing/mask/gas - helmet = /obj/item/clothing/head/helmet/swat - back = /obj/item/weapon/storage/backpack - has_id = 1 - id_job = "Officer" - id_access = "Syndicate" - -/obj/item/weapon/orion_ship - name = "model settler ship" - desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - w_class = 2 - var/active = 0 //if the ship is on - -/obj/item/weapon/orion_ship/examine(mob/user) - ..() - if(!(in_range(user, src))) - return - if(!active) - user << "There's a little switch on the bottom. It's flipped down." - else - user << "There's a little switch on the bottom. It's flipped up." - -/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse - if(active) - return - - message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") - log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") - - user << "You flip the switch on the underside of [src]." - active = 1 - src.visible_message("[src] softly beeps and whirs to life!") - playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) - say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") - sleep(20) - src.visible_message("[src] begins to vibrate...") - say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") - sleep(30) - say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) - sleep(3.6) - src.visible_message("[src] explodes!") - explosion(src.loc, 2,4,8, flame_range = 16) - qdel(src) - - -#undef ORION_TRAIL_WINTURN -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_LING -#undef ORION_TRAIL_LING_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_BLACKHOLE - -#undef ORION_STATUS_START -#undef ORION_STATUS_NORMAL -#undef ORION_STATUS_GAMEOVER -#undef ORION_STATUS_MARKET +/obj/machinery/computer/arcade/ + name = "random arcade" + desc = "random arcade machine" + icon_state = "arcade" + icon_keyboard = null + icon_screen = "invaders" + var/list/prizes = list( + /obj/item/weapon/storage/box/snappops = 2, + /obj/item/toy/talking/AI = 2, + /obj/item/toy/talking/codex_gigas = 2, + /obj/item/clothing/under/syndicate/tacticool = 2, + /obj/item/toy/sword = 2, + /obj/item/toy/gun = 2, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, + /obj/item/weapon/storage/box/fakesyndiesuit = 2, + /obj/item/weapon/storage/crayons = 2, + /obj/item/toy/spinningtoy = 2, + /obj/item/toy/prize/ripley = 1, + /obj/item/toy/prize/fireripley = 1, + /obj/item/toy/prize/deathripley = 1, + /obj/item/toy/prize/gygax = 1, + /obj/item/toy/prize/durand = 1, + /obj/item/toy/prize/honk = 1, + /obj/item/toy/prize/marauder = 1, + /obj/item/toy/prize/seraph = 1, + /obj/item/toy/prize/mauler = 1, + /obj/item/toy/prize/odysseus = 1, + /obj/item/toy/prize/phazon = 1, + /obj/item/toy/prize/reticence = 1, + /obj/item/toy/cards/deck = 2, + /obj/item/toy/nuke = 2, + /obj/item/toy/minimeteor = 2, + /obj/item/toy/redbutton = 2, + /obj/item/toy/talking/owl = 2, + /obj/item/toy/talking/griffin = 2, + /obj/item/toy/talking/skeleton = 2, + /obj/item/weapon/coin/antagtoken = 2, + /obj/item/stack/tile/fakespace/loaded = 2, + /obj/item/toy/toy_xeno = 2, + /obj/item/weapon/restraints/handcuffs/fake = 2) + +/obj/machinery/computer/arcade/New() + ..() + // If it's a generic arcade machine, pick a random arcade + // circuit board for it and make the new machine + if(!circuit) + var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade)) + var/obj/item/weapon/circuitboard/CB = new choice() + new CB.build_path(loc, CB) + qdel(src) + +/obj/machinery/computer/arcade/proc/prizevend() + if(prob(0.0001)) //1 in a million + new /obj/item/weapon/gun/energy/pulse(src) + + if(!contents.len) + var/prizeselect = pickweight(prizes) + new prizeselect(src) + + var/atom/movable/prize = pick(contents) + visible_message( + "[src] dispenses a [prize]!", + "You hear a chime and a clunk.") + + prize.loc = src.loc + +/obj/machinery/computer/arcade/emp_act(severity) + ..(severity) + + if(stat & (NOPOWER|BROKEN)) + return + + var/empprize = null + var/num_of_prizes = 0 + switch(severity) + if(1) + num_of_prizes = rand(1,4) + if(2) + num_of_prizes = rand(0,2) + for(var/i = num_of_prizes; i > 0; i--) + empprize = pickweight(prizes) + new empprize(src.loc) + explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) + + +// ** BATTLE ** // + + +/obj/machinery/computer/arcade/battle + name = "arcade machine" + desc = "Does not support Pinball." + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/computer/arcade/battle + var/enemy_name = "Space Villian" + var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc + var/player_hp = 30 //Player health/attack points + var/player_mp = 10 + var/enemy_hp = 45 //Enemy health/attack points + var/enemy_mp = 20 + var/gameover = 0 + var/blocked = 0 //Player cannot attack/heal while set + var/turtle = 0 + +/obj/machinery/computer/arcade/battle/New() + ..() + var/name_action + var/name_part1 + var/name_part2 + + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") + + name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") + + src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") + src.name = (name_action + name_part1 + name_part2) + +/obj/machinery/computer/arcade/battle/attack_hand(mob/user) + if(..()) + return + user.set_machine(src) + var/dat = "Close" + dat += "Crew Management:
" + + //Buy crew + if(food >= 10 && fuel >= 10) + eventdat += "Hire a new Crewmember (-10FU,-10FO)
" + else + eventdat += "Cant afford a new Crewmember
" + + //Sell crew + if(settlers.len > 1) + eventdat += "Sell crew for Fuel and Food (+7FU,+7FO)
" + else + eventdat += "Cant afford to sell a Crewmember
" + + //BUY/SELL STUFF + eventdat += "Spare Parts:
" + + //Engine parts + if(fuel > 5) + eventdat += "" + else + eventdat += "Cant afford to buy Engine Parts" + + //Hull plates + if(fuel > 5) + eventdat += "
" + else + eventdat += "Cant afford to buy Hull Plates" + + //Electronics + if(fuel > 5) + eventdat += "
" + else + eventdat += "Cant afford to buy Spare Electronics" + + //Trade + if(fuel > 5) + eventdat += "
Trade Fuel for Food (-5FU,+5FO)
" + else + eventdat += "Cant afford to Trade Fuel for Food
5) + eventdat += "Trade Food for Fuel (+5FU,-5FO)
" + else + eventdat += "Cant afford to Trade Food for Fuel
!! Raid Spaceport !!" + + eventdat += "" + + +//Add Random/Specific crewmember +/obj/machinery/computer/arcade/orion_trail/proc/add_crewmember(var/specific = "") + var/newcrew = "" + if(specific) + newcrew = specific + else + if(prob(50)) + newcrew = pick(first_names_male) + else + newcrew = pick(first_names_female) + if(newcrew) + settlers += newcrew + alive++ + return newcrew + + +//Remove Random/Specific crewmember +/obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(var/specific = "", var/dont_remove = "") + var/list/safe2remove = settlers + var/removed = "" + if(dont_remove) + safe2remove -= dont_remove + if(specific && specific != dont_remove) + safe2remove = list(specific) + else + removed = pick(safe2remove) + + if(removed) + if(lings_aboard && prob(40*lings_aboard)) //if there are 2 lings you're twice as likely to get one, obviously + lings_aboard = max(0,--lings_aboard) + settlers -= removed + alive-- + return removed + + +/obj/machinery/computer/arcade/orion_trail/proc/win() + gameStatus = ORION_STATUS_START + say("Congratulations, you made it to Orion!") + if(emagged) + new /obj/item/weapon/orion_ship(src.loc) + message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") + log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") + else + prizevend() + emagged = 0 + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + +/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) + if(!emagged) + user << "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." + name = "The Orion Trail: Realism Edition" + desc = "Learn how our ancestors got to Orion, and try not to die in the process!" + newgame() + emagged = 1 + +/mob/living/simple_animal/hostile/syndicate/ranged/orion + name = "Spaceport Security" + desc = "The Premier security forces for all spaceports found along the Orion Trail." + faction = list("orion") + loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity, + /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted, + /obj/item/weapon/shield/energy) + +/obj/effect/mob_spawn/human/corpse/orionsecurity + name = "Spaceport Security" + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/armor/vest + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + radio = /obj/item/device/radio/headset + mask = /obj/item/clothing/mask/gas + helmet = /obj/item/clothing/head/helmet/swat + back = /obj/item/weapon/storage/backpack + has_id = 1 + id_job = "Officer" + id_access = "Syndicate" + +/obj/item/weapon/orion_ship + name = "model settler ship" + desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." + icon = 'icons/obj/toy.dmi' + icon_state = "ship" + w_class = 2 + var/active = 0 //if the ship is on + +/obj/item/weapon/orion_ship/examine(mob/user) + ..() + if(!(in_range(user, src))) + return + if(!active) + user << "There's a little switch on the bottom. It's flipped down." + else + user << "There's a little switch on the bottom. It's flipped up." + +/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse + if(active) + return + + message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") + log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") + + user << "You flip the switch on the underside of [src]." + active = 1 + src.visible_message("[src] softly beeps and whirs to life!") + playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) + say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") + sleep(20) + src.visible_message("[src] begins to vibrate...") + say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") + sleep(30) + say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) + sleep(3.6) + src.visible_message("[src] explodes!") + explosion(src.loc, 2,4,8, flame_range = 16) + qdel(src) + + +#undef ORION_TRAIL_WINTURN +#undef ORION_TRAIL_RAIDERS +#undef ORION_TRAIL_FLUX +#undef ORION_TRAIL_ILLNESS +#undef ORION_TRAIL_BREAKDOWN +#undef ORION_TRAIL_LING +#undef ORION_TRAIL_LING_ATTACK +#undef ORION_TRAIL_MALFUNCTION +#undef ORION_TRAIL_COLLISION +#undef ORION_TRAIL_SPACEPORT +#undef ORION_TRAIL_BLACKHOLE + +#undef ORION_STATUS_START +#undef ORION_STATUS_NORMAL +#undef ORION_STATUS_GAMEOVER +#undef ORION_STATUS_MARKET diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 836b1fc81d0..04fe6350d4c 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -321,11 +321,15 @@ hackProof = 1 aiControlDisabled = 1 var/openingoverlaytype = /obj/effect/overlay/temp/cult/door + var/friendly = FALSE /obj/machinery/door/airlock/cult/allowed(mob/M) if(!density) return 1 - if(iscultist(M) || istype(M, /mob/living/simple_animal/shade) || istype(M, /mob/living/simple_animal/hostile/construct)) + if(friendly || \ + iscultist(M) || \ + istype(M, /mob/living/simple_animal/shade) || \ + istype(M, /mob/living/simple_animal/hostile/construct)) PoolOrNew(openingoverlaytype, src.loc) return 1 else @@ -345,22 +349,34 @@ /obj/machinery/door/airlock/cult/narsie_act() return +/obj/machinery/door/airlock/cult/friendly + friendly = TRUE + /obj/machinery/door/airlock/cult/glass doortype = /obj/structure/door_assembly/door_assembly_cult/glass glass = 1 opacity = 0 +/obj/machinery/door/airlock/cult/glass/friendly + friendly = TRUE + /obj/machinery/door/airlock/cult/unruned icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' doortype = /obj/structure/door_assembly/door_assembly_cult/unruned openingoverlaytype = /obj/effect/overlay/temp/cult/door/unruned +/obj/machinery/door/airlock/cult/unruned/friendly + friendly = TRUE + /obj/machinery/door/airlock/cult/unruned/glass doortype = /obj/structure/door_assembly/door_assembly_cult/unruned/glass glass = 1 opacity = 0 +/obj/machinery/door/airlock/cult/unruned/glass/friendly + friendly = TRUE + ////////////////////////////////// /* Misc Airlocks diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index dc9bf8e0115..c9836d94f24 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -14,8 +14,8 @@ var/icon_recharging = "recharge" var/icon_creating = "make" - var/metal = 0 - var/glass = 0 + var/datum/material_container/materials + var/list/using_materials var/metal_cost = 1000 var/glass_cost = 1000 var/power_used = 1000 @@ -39,25 +39,31 @@ /obj/machinery/droneDispenser/New() ..() health = max_health + materials = new(src, list(MAT_METAL=1, MAT_GLASS=1), MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2) + using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost) SSmachine.processing |= src /obj/machinery/droneDispenser/Destroy() SSmachine.processing -= src + qdel(materials) + materials = null return ..() -/obj/machinery/droneDispenser/preloaded - metal = 5000 - glass = 5000 +/obj/machinery/droneDispenser/preloaded/New() + ..() + materials.insert_amount(5000) /obj/machinery/droneDispenser/syndrone //Please forgive me name = "syndrone shell dispenser" desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting." - metal = 25000 - glass = 25000 dispense_type = /obj/item/drone_shell/syndrone cooldownTime = 100 //If we're gonna be a jackass, go the full mile - 10 second recharge timer end_create_message = "dispenses a suspicious drone shell." +/obj/machinery/droneDispenser/syndrone/New() + ..() + materials.insert_amount(25000) + /obj/machinery/droneDispenser/syndrone/badass //Please forgive me name = "badass syndrone shell dispenser" desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting. This one seems ominous." @@ -74,9 +80,9 @@ glass_cost = 2000 power_used = 2000 -/obj/machinery/droneDispenser/snowflake/preloaded - metal = 10000 - glass = 10000 +/obj/machinery/droneDispenser/snowflake/preloaded/New() + ..() + materials.insert_amount(10000) /obj/machinery/droneDispenser/hivebot //An example of a custom drone dispenser. This one requires no materials and creates basic hivebots name = "hivebot fabricator" @@ -125,9 +131,9 @@ if(stat & BROKEN) user << "[src] is smoking and steadily buzzing. It seems to be broken." if(metal_cost) - user << "It has [metal] units of metal stored." + user << "It has [materials.amount(MAT_METAL)] units of metal stored." if(glass_cost) - user << "It has [glass] units of glass stored." + user << "It has [materials.amount(MAT_GLASS)] units of glass stored." /obj/machinery/droneDispenser/power_change() ..() @@ -144,7 +150,7 @@ ..() if(stat & (NOPOWER|BROKEN) || !anchored) return - if((metal_cost && glass_cost) && (metal < metal_cost || glass < glass_cost)) + if((metal_cost && glass_cost) && materials.can_use_amount(mats=using_materials)) return if(droneMadeRecently) icon_state = icon_recharging @@ -157,12 +163,7 @@ icon_state = icon_creating sleep(30) icon_state = icon_on - metal -= metal_cost - glass -= glass_cost - if(metal < 0) - metal = 0 - if(glass < 0) - glass = 0 + materials.use_amount(using_materials) if(power_used) use_power(power_used) new dispense_type(loc) @@ -197,19 +198,16 @@ return if(!user.canUseTopic(src)) return - stack = Clamp(stack, 0, sheets.max_amount) - sheets.use(stack) - if(!stack) - if(!user.unEquip(O)) - user << "[O] is stuck to your hand, you can't get it off!" - return - user.drop_item() - O.loc = src - metal += O.materials[MAT_METAL] * stack - glass += O.materials[MAT_GLASS] * stack - user << "You insert [stack] sheet[stack > 1 ? "s" : ""] to [src]." - if((O && O.loc == src) || !stack) - qdel(O) + if(!user.canUnEquip(sheets)) + user << "[O] is stuck to your hand, you can't get it off!" + return + stack = Clamp(stack, 1, sheets.max_amount) + stack = materials.insert_stack(sheets, stack) + if(stack) + user << "You insert [stack] sheet[stack > 1 ? "s" : ""] into [src]." + else + user << "The [src] can't use [sheets]." + else if(istype(O, /obj/item/weapon/weldingtool)) if(stat & BROKEN) var/obj/item/weapon/weldingtool/WT = O diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index a37a0e4d14e..319ce51d949 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -8,13 +8,15 @@ var/const/SAFETY_COOLDOWN = 100 layer = MOB_LAYER+1 // Overhead anchored = 1 density = 1 - var/safety_mode = 0 // Temporality stops the machine if it detects a mob - var/grinding = 0 + var/safety_mode = FALSE // Temporarily stops machine if it detects a mob var/icon_name = "grinder-o" var/blood = 0 var/eat_dir = WEST var/amount_produced = 1 var/datum/material_container/materials + var/crush_damage = 1000 + var/eat_victim_items = TRUE + var/item_recycle_sound = 'sound/items/Welder.ogg' /obj/machinery/recycler/New() ..() @@ -72,9 +74,9 @@ var/const/SAFETY_COOLDOWN = 100 /obj/machinery/recycler/emag_act(mob/user) if(!emagged) - emagged = 1 + emagged = TRUE if(safety_mode) - safety_mode = 0 + safety_mode = FALSE update_icon() playsound(src.loc, "sparks", 75, 1, -1) user << "You use the cryptographic sequencer on the [src.name]." @@ -83,7 +85,7 @@ var/const/SAFETY_COOLDOWN = 100 ..() var/is_powered = !(stat & (BROKEN|NOPOWER)) if(safety_mode) - is_powered = 0 + is_powered = FALSE icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end // This is purely for admin possession !FUN!. @@ -104,24 +106,34 @@ var/const/SAFETY_COOLDOWN = 100 var/move_dir = get_dir(loc, AM.loc) if(move_dir == eat_dir) + eat(AM) + +/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) + var/list/to_eat = list(AM0) + if(istype(AM0, /obj/item)) + to_eat += AM0.GetAllContents() + var/items_recycled = 0 + + for(var/i in to_eat) + var/atom/movable/AM = i if(isliving(AM)) if(emagged) - eat(AM) + crush_living(AM) else - stop(AM) + emergency_stop(AM) else if(istype(AM, /obj/item)) - recycle(AM) - else // Can't recycle + recycle_item(AM) + items_recycled++ + else playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) AM.loc = src.loc -/obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1) - I.loc = src.loc - if(!istype(I)) - return + if(items_recycled && sound) + playsound(src.loc, item_recycle_sound, 50, 1) + +/obj/machinery/recycler/proc/recycle_item(obj/item/I) + I.loc = src.loc - if(sound) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) var/material_amount = materials.get_item_material_amount(I) if(!material_amount) qdel(I) @@ -131,18 +143,18 @@ var/const/SAFETY_COOLDOWN = 100 materials.retrieve_all() -/obj/machinery/recycler/proc/stop(mob/living/L) +/obj/machinery/recycler/proc/emergency_stop(mob/living/L) playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - safety_mode = 1 + safety_mode = TRUE update_icon() L.loc = src.loc spawn(SAFETY_COOLDOWN) playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - safety_mode = 0 + safety_mode = FALSE update_icon() -/obj/machinery/recycler/proc/eat(mob/living/L) +/obj/machinery/recycler/proc/crush_living(mob/living/L) L.loc = src.loc @@ -151,22 +163,23 @@ var/const/SAFETY_COOLDOWN = 100 else playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - var/gib = 1 + var/gib = TRUE // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) if(iscarbon(L)) - gib = 0 + gib = FALSE if(L.stat == CONSCIOUS) L.say("ARRRRRRRRRRRGH!!!") add_blood(L) if(!blood && !issilicon(L)) - blood = 1 + blood = TRUE update_icon() - // Remove and recycle the equipped items. - for(var/obj/item/I in L.get_equipped_items()) - if(L.unEquip(I)) - recycle(I, 0) + // Remove and recycle the equipped items + if(eat_victim_items) + for(var/obj/item/I in L.get_equipped_items()) + if(L.unEquip(I)) + eat(I, sound=FALSE) // Instantly lie down, also go unconscious from the pain, before you die. L.Paralyse(5) @@ -175,9 +188,13 @@ var/const/SAFETY_COOLDOWN = 100 if(gib || emagged == 2) L.gib() else if(emagged == 1) - L.adjustBruteLoss(1000) - + L.adjustBruteLoss(crush_damage) +/obj/machinery/recycler/deathtrap + name = "dangerous old crusher" + emagged = TRUE + crush_damage = 120 + flags = NODECONSTRUCT /obj/item/weapon/paper/recycler name = "paper - 'garbage duty instructions'" diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index ed76ccd8768..1ee601cc453 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -224,6 +224,7 @@ if(target == "input") target = input("New target temperature:", name, round(targetTemperature - T0C, 1)) as num|null if(!isnull(target) && !..()) + target += T0C . = TRUE else if(adjust) target = targetTemperature + adjust diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index f7335295aef..eb062334719 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -2,21 +2,15 @@ name = "washing machine" desc = "Gets rid of those pesky bloodstains, or your money back!" icon = 'icons/obj/machines/washing_machine.dmi' - icon_state = "wm_10" + icon_state = "wm_1_0" density = 1 anchored = 1 - var/state = 1 - //1 = empty, open door - //2 = empty, closed door - //3 = full, open door - //4 = full, closed door - //5 = running - //6 = blood, open door - //7 = blood, closed door - //8 = blood, running - var/gibs_ready = 0 - var/obj/crayon - var/obj/paper + state_open = 1 + var/busy = 0 + var/bloody_mess = 0 + var/has_corgi = 0 + var/obj/item/color_source + var/max_wash_capacity = 5 /obj/machinery/washing_machine/examine(mob/user) ..() @@ -26,286 +20,227 @@ if(!user.canUseTopic(src)) return - if( state != 4 ) - usr << "The washing machine cannot run in this state." + if(busy) return - if( locate(/mob,contents) ) - state = 8 - else - state = 5 + if(state_open) + user << "Close the door first" + return + + if(bloody_mess) + user << "[src] must be cleaned up first." + return + + if(has_corgi) + bloody_mess = 1 + + busy = 1 update_icon() sleep(200) - for(var/atom/A in contents) - A.clean_blood() + wash_cycle() - //Tanning! - for(var/obj/item/stack/sheet/hairlesshide/HH in contents) - var/obj/item/stack/sheet/wetleather/WL = new(src) - WL.amount = HH.amount - qdel(HH) - - //Corgi costume says goodbye - for(var/obj/item/clothing/suit/hooded/ian_costume/IC in contents) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src) - qdel(IC) - - for(var/obj/item/weapon/paper/P in contents) - if(crayon) - var/dye_color - if(istype(crayon,/obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = crayon - dye_color = CR.paint_color - if(dye_color) - P.color = dye_color - qdel(crayon) - crayon = null - - if(crayon) - var/wash_color - if(istype(crayon,/obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = crayon - wash_color = CR.paint_color - else if(istype(crayon,/obj/item/weapon/stamp)) - var/obj/item/weapon/stamp/ST = crayon - wash_color = ST.item_color - - - if(wash_color) - var/new_jumpsuit_icon_state = "" - var/new_jumpsuit_item_state = "" - var/new_jumpsuit_name = "" - var/new_can_adjust - var/new_glove_icon_state = "" - var/new_glove_item_state = "" - var/new_glove_name = "" - var/new_shoe_icon_state = "" - var/new_shoe_name = "" - var/new_sheet_icon_state = "" - var/new_sheet_name = "" - var/new_softcap_icon_state = "" - var/new_softcap_name = "" - var/new_desc = "The colors are a bit dodgy." - for(var/T in typesof(/obj/item/clothing/under/color)) - var/obj/item/clothing/under/color/J = new T - //world << "DEBUG: [wash_color] == [J.item_color]" - if(wash_color == J.item_color) - new_jumpsuit_icon_state = J.icon_state - new_jumpsuit_item_state = J.item_state - new_jumpsuit_name = J.name - new_can_adjust = J.can_adjust - qdel(J) - break - qdel(J) - for(var/T in typesof(/obj/item/clothing/gloves/color)) - var/obj/item/clothing/gloves/color/G = new T - if(wash_color == G.item_color) - new_glove_icon_state = G.icon_state - new_glove_item_state = G.item_state - new_glove_name = G.name - qdel(G) - break - qdel(G) - for(var/T in typesof(/obj/item/clothing/shoes/sneakers)) - var/obj/item/clothing/shoes/sneakers/S = new T - if(wash_color == S.item_color) - new_shoe_icon_state = S.icon_state - new_shoe_name = S.name - qdel(S) - break - qdel(S) - for(var/T in typesof(/obj/item/weapon/bedsheet)) - var/obj/item/weapon/bedsheet/B = new T - if(wash_color == B.item_color) - new_sheet_icon_state = B.icon_state - new_sheet_name = B.name - qdel(B) - break - qdel(B) - for(var/T in typesof(/obj/item/clothing/head/soft)) - var/obj/item/clothing/head/soft/H = new T - if(wash_color == H.item_color) - new_softcap_icon_state = H.icon_state - new_softcap_name = H.name - qdel(H) - break - qdel(H) - if(new_jumpsuit_icon_state && new_jumpsuit_item_state && new_jumpsuit_name) - for(var/obj/item/clothing/under/color/J in contents) - J.item_state = new_jumpsuit_item_state - J.icon_state = new_jumpsuit_icon_state - J.item_color = wash_color - J.name = new_jumpsuit_name - J.desc = new_desc - J.suit_color = wash_color - J.can_adjust = new_can_adjust - if(new_glove_icon_state && new_glove_item_state && new_glove_name) - for(var/obj/item/clothing/gloves/color/G in contents) - G.item_state = new_glove_item_state - G.icon_state = new_glove_icon_state - G.item_color = wash_color - G.name = new_glove_name - G.desc = new_desc - if(new_shoe_icon_state && new_shoe_name) - for(var/obj/item/clothing/shoes/sneakers/S in contents) - if (S.chained == 1) - S.chained = 0 - S.slowdown = SHOES_SLOWDOWN - new /obj/item/weapon/restraints/handcuffs( src ) - S.icon_state = new_shoe_icon_state - S.item_color = wash_color - S.name = new_shoe_name - S.desc = new_desc - if(new_sheet_icon_state && new_sheet_name) - for(var/obj/item/weapon/bedsheet/B in contents) - B.icon_state = new_sheet_icon_state - B.item_color = wash_color - B.name = new_sheet_name - B.desc = new_desc - if(new_softcap_icon_state && new_softcap_name) - for(var/obj/item/clothing/head/soft/H in contents) - H.icon_state = new_softcap_icon_state - H.item_color = wash_color - H.name = new_softcap_name - H.desc = new_desc - qdel(crayon) - crayon = null +/obj/machinery/washing_machine/clean_blood() + ..() + if(!busy) + bloody_mess = 0 + update_icon() - if( locate(/mob,contents) ) - state = 7 - gibs_ready = 1 - else - state = 4 +/obj/machinery/washing_machine/proc/wash_cycle() + for(var/X in contents) + var/atom/movable/AM = X + AM.clean_blood() + AM.machine_wash(src) + + busy = 0 + if(color_source) + qdel(color_source) + color_source = null update_icon() -/obj/machinery/washing_machine/verb/climb_out() - set name = "Climb out" - set category = "Object" - set src in usr.loc - sleep(20) - if(state in list(1,3,6) ) - usr.loc = src.loc +//what happens to this object when washed inside a washing machine +/atom/movable/proc/machine_wash(obj/machinery/washing_machine/WM) + return + +/obj/item/stack/sheet/hairlesshide/machine_wash(obj/machinery/washing_machine/WM) + var/obj/item/stack/sheet/wetleather/WL = new(loc) + WL.amount = amount + qdel(src) + +/obj/item/clothing/suit/hooded/ian_costume/machine_wash(obj/machinery/washing_machine/WM) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(loc) + qdel(src) + +/obj/item/weapon/paper/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + if(istype(WM.color_source,/obj/item/toy/crayon)) + var/obj/item/toy/crayon/CR = WM.color_source + color = CR.paint_color + +/mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM) + gib() + +/obj/item/clothing/under/color/machine_wash(obj/machinery/washing_machine/WM) + jumpsuit_wash(WM) + +/obj/item/clothing/under/rank/machine_wash(obj/machinery/washing_machine/WM) + jumpsuit_wash(WM) + +/obj/item/clothing/under/proc/jumpsuit_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + var/obj/item/clothing/under/U + for(var/T in typesof(/obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/J = T + if(wash_color == initial(J.item_color)) + U = J + break + if(!U) + for(var/T in typesof(/obj/item/clothing/under/rank)) + var/obj/item/clothing/under/rank/R = T + if(wash_color == initial(R.item_color)) + U = R + break + if(U) + item_state = initial(U.item_state) + icon_state = initial(U.icon_state) + item_color = wash_color + name = initial(U.name) + desc = "The colors are a bit dodgy." + can_adjust = initial(U.can_adjust) + if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable + toggle_jumpsuit_adjust() + +/obj/item/clothing/gloves/color/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/clothing/gloves/color)) + var/obj/item/clothing/gloves/color/G = T + if(wash_color == initial(G.item_color)) + item_state = initial(G.item_state) + icon_state = initial(G.icon_state) + item_color = wash_color + name = initial(G.name) + desc = "The colors are a bit dodgy." + break + +/obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/WM) + if(chained) + chained = 0 + slowdown = SHOES_SLOWDOWN + new /obj/item/weapon/restraints/handcuffs(loc) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/clothing/shoes/sneakers)) + var/obj/item/clothing/shoes/sneakers/S = T + if(wash_color == initial(S.item_color)) + icon_state = initial(S.icon_state) + item_color = wash_color + name = initial(S.name) + desc = "The colors are a bit dodgy." + break + +/obj/item/weapon/bedsheet/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/weapon/bedsheet)) + var/obj/item/weapon/bedsheet/B = T + if(wash_color == initial(B.item_color)) + icon_state = initial(B.icon_state) + item_color = wash_color + name = initial(B.name) + desc = "The colors are a bit dodgy." + break + +/obj/item/clothing/head/soft/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/clothing/head/soft)) + var/obj/item/clothing/head/soft/H = T + if(wash_color == initial(H.item_color)) + icon_state = initial(H.icon_state) + item_color = wash_color + name = initial(H.name) + desc = "The colors are a bit dodgy." + break + + +/obj/machinery/washing_machine/relaymove(mob/user) + container_resist(user) + +/obj/machinery/washing_machine/container_resist(mob/user) + if(!busy) + add_fingerprint(user) + open_machine() + /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state]0" + overlays.Cut() + if(busy) + icon_state = "wm_running_[bloody_mess]" + else if(bloody_mess) + icon_state = "wm_[state_open]_blood" + else + var/full = contents.len ? 1 : 0 + icon_state = "wm_[state_open]_[full]" + if(panel_open) + overlays += image(icon, icon_state = "wm_panel") /obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp)) - if( state in list( 1, 3, 6 ) ) - if(!crayon) - if(!user.drop_item()) - return - crayon = W - crayon.loc = src - else - ..() - else - ..() + if(default_deconstruction_screwdriver(user, null, null, W)) + update_icon() + return else if(istype(W,/obj/item/weapon/grab)) - if(state == 1) + if(state_open) var/obj/item/weapon/grab/G = W if(iscorgi(G.affecting)) + has_corgi = 1 G.affecting.loc = src qdel(G) - state = 3 - else - ..() + update_icon() - else if(istype(W,/obj/item/stack/sheet/hairlesshide) || \ - istype(W,/obj/item/clothing/under) || \ - istype(W,/obj/item/clothing/mask) || \ - istype(W,/obj/item/clothing/head) || \ - istype(W,/obj/item/clothing/gloves) || \ - istype(W,/obj/item/clothing/shoes) || \ - istype(W,/obj/item/clothing/suit) || \ - istype(W,/obj/item/weapon/bedsheet) || \ - istype(W,/obj/item/weapon/paper)) + else if(user.a_intent != "harm") - //YES, it's hardcoded... saves a var/can_be_washed for every single clothing item. - if ( istype(W,/obj/item/clothing/suit/space ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/syndicatefake ) ) - user << "This item does not fit." - return -// if ( istype(W,/obj/item/clothing/suit/powered ) ) -// user << "This item does not fit." -// return - if ( istype(W,/obj/item/clothing/suit/cyborg_suit ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/bomb_suit ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/armor ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/armor ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/mask/gas ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/mask/cigarette ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/head/syndicatefake ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/head/helmet ) ) - user << "This item does not fit." - return - if(W.flags & NODROP) //if "can't drop" item - user << "\The [W] is stuck to your hand, you cannot put it in the washing machine!" - return + if (!state_open) + user << "Open the door first!" + return 1 - if(contents.len < 5) - if ( state in list(1, 3) ) - if(!user.drop_item()) - return - W.loc = src - state = 3 - else - user << "You can't put the item in right now!" - else + if(bloody_mess) + user << "[src] must be cleaned up first." + return 1 + + if(contents.len >= max_wash_capacity) user << "The washing machine is full!" + return 1 + + if(!user.unEquip(W)) + user << "\The [W] is stuck to your hand, you cannot put it in the washing machine!" + return 1 + + if(istype(W,/obj/item/toy/crayon) || istype(W,/obj/item/weapon/stamp)) + color_source = W + W.loc = src + update_icon() + else - ..() - update_icon() + return ..() /obj/machinery/washing_machine/attack_hand(mob/user) - switch(state) - if(1) - state = 2 - if(2) - state = 1 - for(var/atom/movable/O in contents) - O.loc = src.loc - if(3) - state = 4 - if(4) - state = 3 - for(var/atom/movable/O in contents) - O.loc = src.loc - crayon = null - state = 1 - if(5) - user << "The [src] is busy." - if(6) - state = 7 - if(7) - if(gibs_ready) - gibs_ready = 0 - if(locate(/mob,contents)) - var/mob/M = locate(/mob,contents) - M.gib() - for(var/atom/movable/O in contents) - O.loc = src.loc - crayon = null - state = 1 + if(busy) + user << "[src] is busy." + return + + if(!state_open) + open_machine() + else + state_open = 0 //close the door + update_icon() - update_icon() +/obj/machinery/washing_machine/open_machine(drop = 1) + ..() + density = 1 //because machinery/open_machine() sets it to 0 + color_source = null + has_corgi = 0 diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index dfb1f8c5656..c929d74e5ca 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -43,10 +43,12 @@ icon_state = "heal" duration = 15 -/obj/effect/overlay/temp/heal/New() +/obj/effect/overlay/temp/heal/New(loc, colour) ..() pixel_x = rand(-12, 12) pixel_y = rand(-9, 0) + if(colour) + color = colour /obj/effect/overlay/temp/explosion name = "explosion" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1536d5f1f85..7c61b5d152f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -575,7 +575,22 @@ obj/item/proc/item_action_slot_check(slot, mob/user) /obj/item/proc/is_sharp() return sharpness -/obj/item/proc/can_dismember() - if((sharpness || damtype == BURN) && w_class >= 3) - return 1 - return 0 \ No newline at end of file +/obj/item/proc/get_dismemberment_chance(obj/item/bodypart/affecting) + if(affecting.can_dismember(src)) + if((sharpness || damtype == BURN) && w_class >= 3) + . = force*(w_class-1) + +/obj/item/proc/get_dismember_sound() + if(damtype == BURN) + . = 'sound/weapons/sear.ogg' + else + . = pick('sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg') + +/obj/item/proc/open_flame() + var/turf/location = loc + if(ismob(location)) + var/mob/M = location + if(M.l_hand == src || M.r_hand == src) + location = get_turf(M) + if(isturf(location)) + location.hotspot_expose(700, 5) diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 9a20f3b8e37..eced5d1af07 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -1,22 +1,23 @@ #define CANDLE_LUMINOSITY 2 /obj/item/candle name = "red candle" - desc = "a candle" + desc = "In Greek myth, Prometheus stole fire from the Gods and gave it to \ + humankind. The jewelry he kept for himself." icon = 'icons/obj/candle.dmi' icon_state = "candle1" item_state = "candle1" w_class = 1 var/wax = 200 - var/lit = 0 - var/infinite = 0 - var/start_lit = 0 + var/lit = FALSE + var/infinite = FALSE + var/start_lit = FALSE heat = 1000 /obj/item/candle/New() ..() if(start_lit) // No visible message - light(null) + light(show_message = FALSE) /obj/item/candle/update_icon() var/i @@ -56,12 +57,13 @@ light() //honk return -/obj/item/candle/proc/light(flavor_text = "[usr] lights the [name].") +/obj/item/candle/proc/light(show_message) if(!src.lit) - src.lit = 1 + src.lit = TRUE //src.damtype = "fire" - if(flavor_text) - usr.visible_message(flavor_text) + if(show_message) + usr.visible_message( + "[usr] lights the [name].") SetLuminosity(CANDLE_LUMINOSITY) SSobj.processing |= src update_icon() @@ -79,14 +81,13 @@ M.unEquip(src, 1) //src is being deleted anyway qdel(src) update_icon() - if(istype(loc, /turf)) //start a fire if possible - var/turf/T = loc - T.hotspot_expose(700, 5) - + open_flame() /obj/item/candle/attack_self(mob/user) if(lit) - lit = 0 + user.visible_message( + "[user] snuffs [src].") + lit = FALSE update_icon() SetLuminosity(0) user.AddLuminosity(-CANDLE_LUMINOSITY) @@ -110,7 +111,7 @@ /obj/item/candle/infinite - infinite = 1 - start_lit = 1 + infinite = TRUE + start_lit = TRUE #undef CANDLE_LUMINOSITY diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index c101d2fbb61..79848f024f5 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -1,43 +1,263 @@ + +/* + * Crayons + */ + +/obj/item/toy/crayon + name = "crayon" + desc = "A colourful crayon. Looks tasty. Mmmm..." + icon = 'icons/obj/crayons.dmi' + icon_state = "crayonred" + item_color = "red" + w_class = 1 + attack_verb = list("attacked", "coloured") + var/paint_color = "#FF0000" //RGB + var/drawtype = "rune" + var/text_buffer = "" + var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag") + var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") + var/list/numerals = list("0","1","2","3","4","5","6","7","8","9") + var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer + var/uses = 30 //-1 or less for unlimited uses + var/instant = 0 + var/dat + var/list/validSurfaces = list(/turf/open/floor) + var/gang = 0 //For marking territory + var/edible = 1 + +/obj/item/toy/crayon/suicide_act(mob/user) + user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.") + return (BRUTELOSS|OXYLOSS) + +/obj/item/toy/crayon/New() + ..() + name = "[item_color] crayon" //Makes crayons identifiable in things like grinders + drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]") + if(config) + if(config.mutant_races == 1) + graffiti |= "antilizard" + graffiti |= "prolizard" + +/obj/item/toy/crayon/initialize() + if(config.mutant_races == 1) + graffiti |= "antilizard" + graffiti |= "prolizard" + +/obj/item/toy/crayon/attack_self(mob/living/user) + update_window(user) + +/obj/item/toy/crayon/proc/update_window(mob/living/user) + dat += "