diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fc3f2852fc..00dc7b1d10 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -7,15 +7,5 @@ #deathride58 /modular_citadel/ @deathride58 -#LetterJay -/modular_citadel/code/modules/client/loadout/__donator.dm @LetterJay - -#Poojawa - -/modular_citadel/code/modules/vore @Poojawa -/code/game/objects/items/devices/dogborg_sleeper.dm @Poojawa -/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @Poojawa -/tgui/ @Poojawa -/modular_citadel/code/modules/clothing/spacesuits/flightsuit.dm @Poojawa -/modular_citadel/code/game/objects/ids.dm @Poojawa -/sound/vore @Poojawa \ No newline at end of file +#LetterJay +/modular_citadel/code/modules/client/loadout/__donator.dm @LetterJay diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 13ee4fa135..ba9b8b5c36 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -20,11 +20,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -44,11 +41,9 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/main) "ag" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /turf/open/floor/plasteel/red/side{ dir = 8 @@ -100,9 +95,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/chem_dispenser, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/machinery/chem_dispenser/fullupgrade, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/chemistry) "cA" = ( @@ -187,21 +182,16 @@ /area/ruin/unpowered/syndicate_lava_base/cargo) "dA" = ( /obj/structure/closet/l3closet, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 8; name = "Chemistry APC"; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 6 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white/side{ @@ -209,11 +199,8 @@ }, /area/ruin/unpowered/syndicate_lava_base/chemistry) "dB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 8 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/chemistry) @@ -287,10 +274,8 @@ /turf/open/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/cargo) "dL" = ( -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /obj/structure/closet/crate, /obj/item/extinguisher{ @@ -390,11 +375,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white/side{ dir = 8 }, @@ -437,11 +418,9 @@ pixel_x = -3 }, /obj/item/reagent_containers/dropper, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 8; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white/side{ @@ -529,12 +508,10 @@ /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 1; name = "Cargo Bay APC"; - pixel_y = 24; - req_access = null; - req_access_txt = "150" + pixel_y = 24 }, /obj/structure/closet/emcloset/anchored, /obj/effect/decal/cleanable/dirt, @@ -689,11 +666,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white/side{ dir = 8 }, @@ -779,11 +752,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 6 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -796,11 +766,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ @@ -814,11 +781,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -832,11 +796,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/mining/glass{ @@ -854,11 +815,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/cargo) @@ -870,11 +828,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 10 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/cargo) @@ -955,28 +910,20 @@ dir = 1; pixel_y = -24 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 8 }, /area/ruin/unpowered/syndicate_lava_base/testlab) "eN" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 1; - pixel_y = -24; - req_access = null; - req_access_txt = "150" + pixel_y = -24 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 8 @@ -987,11 +934,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 8 @@ -1004,11 +948,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 10 }, /turf/open/floor/plasteel/vault{ dir = 8 @@ -1037,11 +978,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white/side{ dir = 10 }, @@ -1063,8 +1000,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/chem_dispenser, /obj/effect/decal/cleanable/dirt, +/obj/machinery/chem_dispenser/fullupgrade, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/chemistry) "eV" = ( @@ -1078,11 +1015,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -1118,11 +1051,8 @@ /obj/item/storage/box/donkpockets{ pixel_x = 2 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/cargo) @@ -1155,20 +1085,14 @@ /area/ruin/unpowered/syndicate_lava_base/cargo) "fc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 5 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/cargo) "fd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 8 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/cargo) @@ -1182,11 +1106,8 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered/syndicate_lava_base/cargo) "ff" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white/side{ @@ -1195,22 +1116,16 @@ /area/ruin/unpowered/syndicate_lava_base/virology) "fg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 10 }, /turf/open/floor/plasteel/white/side{ dir = 6 }, /area/ruin/unpowered/syndicate_lava_base/virology) "fh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 4 }, /turf/open/floor/plasteel/white/side{ dir = 10 @@ -1223,12 +1138,10 @@ pixel_y = 2 }, /obj/item/storage/box/syringes, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 1; name = "Virology APC"; - pixel_y = 24; - req_access = null; - req_access_txt = "150" + pixel_y = 24 }, /obj/structure/cable/yellow{ icon_state = "0-2" @@ -1257,12 +1170,10 @@ }, /area/ruin/unpowered/syndicate_lava_base/virology) "fk" = ( -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 2; name = "Experimentation Lab APC"; - pixel_y = -24; - req_access = null; - req_access_txt = "150" + pixel_y = -24 }, /obj/structure/cable/yellow{ icon_state = "0-4" @@ -1274,11 +1185,7 @@ /area/ruin/unpowered/syndicate_lava_base/testlab) "fl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/extinguisher_cabinet{ pixel_x = 25 }, @@ -1299,11 +1206,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/chemistry) "fn" = ( @@ -1349,11 +1252,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 @@ -1364,40 +1263,12 @@ dir = 8 }, /obj/structure/closet/crate, -/obj/item/stock_parts/capacitor/quadratic, -/obj/item/stock_parts/capacitor/quadratic, -/obj/item/stock_parts/cell/bluespace{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stock_parts/cell/bluespace{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stock_parts/manipulator/femto{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/stock_parts/manipulator/femto{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/stock_parts/matter_bin/bluespace{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stock_parts/matter_bin/bluespace{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stock_parts/micro_laser/quadultra, -/obj/item/stock_parts/micro_laser/quadultra, -/obj/item/stock_parts/scanning_module/triphasic{ - pixel_x = -4 - }, -/obj/item/stock_parts/scanning_module/triphasic{ - pixel_x = -4 - }, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/circuitboard/machine/processor, +/obj/item/circuitboard/machine/gibber, +/obj/item/circuitboard/machine/deep_fryer, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/cargo) "ft" = ( @@ -1428,11 +1299,9 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/structure/table, /obj/item/clothing/suit/hazardvest, @@ -1476,11 +1345,7 @@ req_access_txt = "150" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/virology) "fz" = ( @@ -1489,11 +1354,7 @@ req_access_txt = "150" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/virology) "fA" = ( @@ -1536,10 +1397,8 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/main) @@ -1553,11 +1412,7 @@ "fG" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/machinery/door/airlock/hatch{ name = "Experimentation Lab"; req_access_txt = "150" @@ -1581,11 +1436,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -1601,11 +1452,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/machinery/door/airlock/mining/glass{ name = "Warehouse"; req_access_txt = "150" @@ -1704,11 +1551,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 5 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, @@ -1717,11 +1561,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/virology) @@ -1729,21 +1570,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/virology) "gs" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 2 }, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -1753,11 +1588,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /turf/open/floor/plasteel/white/side{ dir = 9 @@ -1767,11 +1599,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "1-4" @@ -1784,11 +1613,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -1800,11 +1626,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1820,11 +1643,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1838,11 +1658,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1867,11 +1684,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1885,11 +1699,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1903,11 +1714,7 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -1926,11 +1733,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/main) @@ -1941,11 +1745,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) @@ -1954,11 +1755,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 2 }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -1972,11 +1770,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/main) @@ -1988,11 +1783,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/main) @@ -2006,11 +1798,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/brown/corner{ dir = 4 @@ -2023,11 +1812,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 9 }, /turf/open/floor/plasteel/brown{ dir = 1 @@ -2087,30 +1873,21 @@ req_access_txt = "150" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/virology) "gU" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/structure/sink{ dir = 8; pixel_x = -12; pixel_y = 2 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white/side{ @@ -2179,11 +1956,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/main) @@ -2198,11 +1972,7 @@ /area/ruin/unpowered/syndicate_lava_base/main) "hc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -2289,11 +2059,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -2369,18 +2135,12 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/main) "hx" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -2435,11 +2195,8 @@ /area/ruin/unpowered/syndicate_lava_base/virology) "hF" = ( /obj/machinery/light/small, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white/side, @@ -2491,11 +2248,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -2507,10 +2260,8 @@ /obj/structure/table/wood, /obj/item/ammo_box/magazine/m10mm, /obj/item/ammo_box/magazine/sniper_rounds, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -2518,11 +2269,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) "hO" = ( @@ -2532,20 +2279,14 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) "hQ" = ( /obj/structure/table/wood, /obj/item/ammo_box/magazine/m10mm, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -2620,22 +2361,16 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 8 }, /turf/open/floor/plasteel/red/side{ dir = 8 }, /area/ruin/unpowered/syndicate_lava_base/main) "ia" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 8 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -2650,11 +2385,7 @@ /area/ruin/unpowered/syndicate_lava_base/dormitories) "ic" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) "id" = ( @@ -2718,11 +2449,7 @@ /area/ruin/unpowered/syndicate_lava_base/main) "ij" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -2740,11 +2467,7 @@ name = "Cabin 2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/dormitories) "im" = ( @@ -2761,11 +2484,7 @@ name = "Cabin 4" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/dormitories) "ip" = ( @@ -2844,11 +2563,7 @@ /area/ruin/unpowered/syndicate_lava_base/main) "ix" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -2868,21 +2583,15 @@ /area/ruin/unpowered/syndicate_lava_base/dormitories) "iA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral/side{ dir = 1 }, /area/ruin/unpowered/syndicate_lava_base/dormitories) "iB" = ( -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, @@ -2901,22 +2610,14 @@ dir = 2; pixel_y = 24 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3, /turf/open/floor/plasteel/neutral/corner{ dir = 4 }, /area/ruin/unpowered/syndicate_lava_base/dormitories) "iE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/neutral/side{ dir = 1 }, @@ -2968,11 +2669,9 @@ /turf/open/floor/circuit/red, /area/ruin/unpowered/syndicate_lava_base/main) "iL" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 8; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /turf/open/floor/circuit/red, /area/ruin/unpowered/syndicate_lava_base/main) @@ -3004,11 +2703,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 5 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) @@ -3016,11 +2712,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3035,11 +2728,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3050,11 +2740,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3065,11 +2752,8 @@ "iT" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 2 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3081,11 +2765,8 @@ /area/ruin/unpowered/syndicate_lava_base/dormitories) "iU" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -3099,18 +2780,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 2; name = "Dormitories APC"; - pixel_y = -24; - req_access = null; - req_access_txt = "150" + pixel_y = -24 }, /obj/structure/cable/yellow{ icon_state = "0-8" @@ -3121,11 +2797,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral/side, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -3133,11 +2805,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 9 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral/corner{ @@ -3217,22 +2886,14 @@ name = "Cabin 1" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/dormitories) "jg" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -3244,23 +2905,17 @@ name = "Cabin 3" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/dormitories) "ji" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 8; name = "Primary Hallway APC"; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /turf/open/floor/plasteel/red/side{ dir = 8 @@ -3292,10 +2947,8 @@ icon_state = "sleeper_s"; dir = 4 }, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -3303,20 +2956,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) "jp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -3328,10 +2973,8 @@ dir = 8; icon_state = "sleeper_s" }, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -3373,11 +3016,7 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "jw" = ( /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3, /obj/effect/decal/cleanable/dirt, /obj/structure/closet/toolcloset{ anchored = 1 @@ -3414,11 +3053,8 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -3426,11 +3062,8 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /turf/open/floor/plasteel/grimy, /area/ruin/unpowered/syndicate_lava_base/dormitories) @@ -3453,11 +3086,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 6 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) @@ -3468,11 +3098,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/yellow/side{ dir = 4 @@ -3487,11 +3114,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/machinery/door/airlock/engineering{ name = "Engineering"; @@ -3509,11 +3133,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -3524,11 +3145,9 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 8; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -3536,29 +3155,20 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "jJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{ + dir = 6 }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/engineering) "jK" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3{ + dir = 8 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -3608,11 +3218,7 @@ /area/ruin/unpowered/syndicate_lava_base/bar) "jQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -3631,11 +3237,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) "jT" = ( @@ -3678,11 +3280,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -3720,11 +3318,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 6 }, /obj/structure/cable/yellow{ icon_state = "2-4" @@ -3734,11 +3329,8 @@ /area/ruin/unpowered/syndicate_lava_base/main) "kd" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 2 }, /obj/structure/cable/yellow{ icon_state = "1-4" @@ -3753,11 +3345,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3772,11 +3361,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3787,11 +3373,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3804,11 +3387,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -3822,20 +3402,14 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 2 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) "kj" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 8 }, /obj/structure/chair{ dir = 8 @@ -3849,11 +3423,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/machinery/door/airlock/engineering{ name = "Engineering"; req_access_txt = "150" @@ -3861,11 +3431,7 @@ /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "kl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/engineering) "km" = ( @@ -3884,11 +3450,8 @@ }, /area/ruin/unpowered/syndicate_lava_base/bar) "ko" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ @@ -3896,20 +3459,15 @@ }, /area/ruin/unpowered/syndicate_lava_base/bar) "kp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 10 }, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/bar) "kq" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 8; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /obj/machinery/vending/coffee{ extended_inventory = 1 @@ -3924,11 +3482,7 @@ req_access_txt = "150" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -4005,11 +3559,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/visible, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 8; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer3{ + dir = 8 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -4017,12 +3568,10 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 1; name = "Engineering APC"; - pixel_y = 24; - req_access = null; - req_access_txt = "150" + pixel_y = 24 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4030,11 +3579,8 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{ + dir = 9 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -4118,11 +3664,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 @@ -4150,11 +3692,7 @@ /area/ruin/unpowered/syndicate_lava_base/bar) "kO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -4220,11 +3758,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/visible{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/engineering) "kY" = ( @@ -4323,11 +3857,7 @@ name = "Bar" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/wood, /area/ruin/unpowered/syndicate_lava_base/bar) "lk" = ( @@ -4352,11 +3882,7 @@ /area/ruin/unpowered/syndicate_lava_base/bar) "ll" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -4421,11 +3947,7 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/engineering) "lr" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "ls" = ( @@ -4495,11 +4017,7 @@ /area/ruin/unpowered/syndicate_lava_base/bar) "lB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/wood, /area/ruin/unpowered/syndicate_lava_base/bar) "lC" = ( @@ -4537,11 +4055,7 @@ /obj/item/vending_refill/coffee, /obj/item/vending_refill/cola, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -4580,11 +4094,9 @@ }, /area/ruin/unpowered/syndicate_lava_base/medbay) "lL" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/machinery/light/small{ dir = 8 @@ -4608,20 +4120,14 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 4 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "lN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{ + dir = 9 }, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -4669,11 +4175,9 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/arrivals) "lU" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/structure/chair/stool, /turf/open/floor/plasteel/vault{ @@ -4704,11 +4208,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 5 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4719,11 +4220,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4734,11 +4232,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/machinery/door/airlock{ name = "Bar Storage"; @@ -4753,11 +4248,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4778,11 +4270,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 9 }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -4801,11 +4290,7 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/medbay) "me" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/medbay) "mf" = ( @@ -4813,11 +4298,9 @@ dir = 4; pixel_x = 11 }, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 8; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/medbay) @@ -4932,12 +4415,10 @@ /obj/structure/table/wood, /obj/machinery/light/small, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 2; name = "Bar APC"; - pixel_y = -24; - req_access = null; - req_access_txt = "150" + pixel_y = -24 }, /turf/open/floor/wood, /area/ruin/unpowered/syndicate_lava_base/bar) @@ -4960,11 +4441,7 @@ "mz" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -4991,11 +4468,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/medbay) "mC" = ( @@ -5141,11 +4614,7 @@ /area/ruin/unpowered/syndicate_lava_base/arrivals) "mY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -5163,11 +4632,7 @@ /area/ruin/unpowered/syndicate_lava_base/medbay) "na" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/medbay) "nb" = ( @@ -5266,22 +4731,16 @@ }, /area/ruin/unpowered/syndicate_lava_base/telecomms) "nk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/ruin/unpowered/syndicate_lava_base/telecomms) "nl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -5292,11 +4751,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 10 }, /obj/structure/noticeboard{ dir = 8; @@ -5342,11 +4798,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 6 }, /obj/structure/cable/yellow{ icon_state = "2-4" @@ -5360,22 +4813,17 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 1; name = "Arrival Hallway APC"; - pixel_y = 24; - req_access = null; - req_access_txt = "150" + pixel_y = 24 }, /obj/structure/cable/yellow{ icon_state = "0-4" @@ -5388,11 +4836,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5405,11 +4850,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5420,11 +4862,8 @@ /area/ruin/unpowered/syndicate_lava_base/arrivals) "nw" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 2 }, /obj/structure/cable/yellow{ icon_state = "1-4" @@ -5441,11 +4880,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5459,11 +4895,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5476,11 +4909,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 9 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5546,11 +4976,9 @@ /turf/open/floor/plating/airless, /area/ruin/unpowered/syndicate_lava_base/engineering) "nH" = ( -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /obj/machinery/light/small{ dir = 8 @@ -5575,11 +5003,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 5 }, /obj/structure/cable/yellow{ icon_state = "2-4" @@ -5596,11 +5021,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5614,11 +5036,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5630,11 +5049,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5646,11 +5062,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5665,11 +5078,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5684,11 +5094,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5699,11 +5106,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5716,11 +5120,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/machinery/firealarm{ dir = 2; @@ -5737,11 +5138,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{ + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5754,19 +5152,14 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5780,11 +5173,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 9 }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -5823,12 +5213,10 @@ pixel_y = -29 }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 4; name = "Medbay APC"; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white/side{ @@ -5908,12 +5296,10 @@ dir = 8 }, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 2; name = "Telecommunications APC"; - pixel_y = -24; - req_access = null; - req_access_txt = "150" + pixel_y = -24 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -5951,11 +5337,8 @@ /turf/open/floor/plasteel/red/side, /area/ruin/unpowered/syndicate_lava_base/arrivals) "op" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - piping_layer = 3; - pixel_x = 5; - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ + dir = 1 }, /turf/open/floor/plasteel/red/side, /area/ruin/unpowered/syndicate_lava_base/arrivals) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm index 209ba76efa..5f76cdb32c 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm @@ -6,39 +6,10 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "c" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien20" - }, +/turf/closed/wall/mineral/abductor, /area/lavaland/surface/outdoors) "d" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien21" - }, -/area/ruin/unpowered) -"e" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien22" - }, -/area/ruin/unpowered) -"f" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien23" - }, -/area/ruin/unpowered) -"g" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien24" - }, -/area/lavaland/surface/outdoors) -"h" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien16" - }, -/area/lavaland/surface/outdoors) -"i" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien17" - }, +/turf/closed/wall/mineral/abductor, /area/ruin/unpowered) "j" = ( /obj/machinery/abductor/experiment{ @@ -61,16 +32,6 @@ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, /area/ruin/unpowered) -"m" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien18" - }, -/area/ruin/unpowered) -"n" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien19" - }, -/area/lavaland/surface/outdoors) "o" = ( /obj/item/hemostat/alien, /turf/open/floor/plating/abductor{ @@ -89,11 +50,6 @@ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, /area/ruin/unpowered) -"r" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien14" - }, -/area/ruin/unpowered) "s" = ( /obj/structure/table/optable/abductor, /obj/item/cautery/alien, @@ -108,11 +64,6 @@ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, /area/ruin/unpowered) -"u" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien12" - }, -/area/ruin/unpowered) "v" = ( /obj/item/scalpel/alien, /obj/item/surgical_drapes, @@ -127,11 +78,6 @@ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, /area/ruin/unpowered) -"x" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien10" - }, -/area/ruin/unpowered) "y" = ( /obj/machinery/abductor/gland_dispenser, /turf/open/floor/plating/abductor{ @@ -152,36 +98,6 @@ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, /area/ruin/unpowered) -"B" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien8" - }, -/area/ruin/unpowered) -"C" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien9" - }, -/area/lavaland/surface/outdoors) -"D" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien2" - }, -/area/ruin/unpowered) -"E" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien3" - }, -/area/ruin/unpowered) -"F" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien4" - }, -/area/ruin/unpowered) -"G" = ( -/turf/closed/indestructible/abductor{ - icon_state = "alien5" - }, -/area/lavaland/surface/outdoors) (1,1,1) = {" a @@ -211,7 +127,7 @@ a a a a -h +c a a a @@ -223,7 +139,7 @@ a a a c -i +d a a a @@ -240,54 +156,54 @@ k k a y -D +d a "} (6,1,1) = {" a a -e +d k o s v z -E +d a "} (7,1,1) = {" a a -f +d l p k w A -F +d a "} (8,1,1) = {" a a -g -m +c +d q t q -B -G +d +c a "} (9,1,1) = {" a a b -n -r -u -x -C +c +d +d +d +c b a "} diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index b172e24f29..6229854c09 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -12,10 +12,8 @@ /obj/machinery/computer/message_monitor{ dir = 2 }, -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -210,11 +208,9 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 4; - pixel_x = -24; - req_access = null; - req_access_txt = "150" + pixel_x = -24 }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation) @@ -517,10 +513,8 @@ }, /area/ruin/space/has_grav/listeningstation) "aU" = ( -/obj/machinery/airalarm{ - pixel_y = 24; - req_access = null; - req_access_txt = "150" +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -640,11 +634,9 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 8; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -811,12 +803,10 @@ icon_state = "0-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/syndicate{ dir = 4; name = "Syndicate Listening Post APC"; - pixel_x = 24; - req_access = null; - req_access_txt = "150" + pixel_x = 24 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -948,11 +938,9 @@ }, /obj/machinery/iv_drip, /obj/machinery/light/small, -/obj/machinery/airalarm{ +/obj/machinery/airalarm/syndicate{ dir = 1; - pixel_y = -24; - req_access = null; - req_access_txt = "150" + pixel_y = -24 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ diff --git a/_maps/cit_map_files/generic/CentCom.dmm b/_maps/cit_map_files/generic/CentCom.dmm index 1b5d94d8c1..bb43763955 100644 --- a/_maps/cit_map_files/generic/CentCom.dmm +++ b/_maps/cit_map_files/generic/CentCom.dmm @@ -2526,6 +2526,10 @@ /obj/machinery/capture_the_flag/red, /turf/open/floor/circuit/green/anim, /area/ctf) +"hH" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood, +/area/centcom/holding) "hI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -3324,6 +3328,10 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/centcom/supply) +"jO" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, +/area/centcom/holding) "jP" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -4178,7 +4186,6 @@ /area/syndicate_mothership) "mb" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/stockexchange, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -5254,7 +5261,6 @@ /area/centcom/ferry) "oM" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/stockexchange, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -5320,6 +5326,19 @@ dir = 8 }, /area/tdome/tdomeobserve) +"oU" = ( +/obj/structure/closet/secure_closet/bar{ + req_access_txt = "25" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"oV" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/centcom/holding) "oW" = ( /obj/structure/flora/bush, /obj/effect/light_emitter{ @@ -5564,6 +5583,70 @@ dir = 8 }, /area/centcom/control) +"px" = ( +/obj/machinery/chem_dispenser/drinks/beer, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"py" = ( +/obj/machinery/chem_dispenser/drinks, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"pz" = ( +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"pA" = ( +/obj/machinery/vending/cola/random, +/turf/open/floor/wood, +/area/centcom/holding) +"pB" = ( +/obj/structure/rack, +/obj/item/toy/sword, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/coin/gold{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/camera, +/turf/open/floor/wood, +/area/centcom/holding) +"pC" = ( +/obj/structure/rack, +/obj/item/toy/gun, +/obj/item/coin/gold{ + pixel_w = -9; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"pD" = ( +/obj/machinery/computer/arcade/battle, +/turf/open/floor/wood, +/area/centcom/holding) +"pE" = ( +/obj/machinery/computer/arcade/orion_trail, +/turf/open/floor/wood, +/area/centcom/holding) "pF" = ( /obj/machinery/door/airlock/centcom{ name = "Auxillary Dock"; @@ -5688,6 +5771,25 @@ dir = 5 }, /area/centcom/ferry) +"pS" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood, +/area/centcom/holding) +"pT" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/wood, +/area/centcom/holding) +"pU" = ( +/turf/open/floor/wood, +/area/centcom/holding) +"pV" = ( +/obj/item/clothing/head/that, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"pW" = ( +/turf/open/floor/carpet/black, +/area/centcom/holding) "pX" = ( /obj/item/storage/crayons, /obj/structure/table, @@ -5953,6 +6055,30 @@ "qE" = ( /turf/closed/indestructible/riveted/uranium, /area/wizard_station) +"qF" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding) +"qG" = ( +/obj/structure/table/wood, +/obj/item/storage/box/drinkingglasses, +/obj/item/storage/box/drinkingglasses{ + pixel_x = 2; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"qH" = ( +/obj/item/reagent_containers/food/drinks/shaker, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"qI" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) "qJ" = ( /obj/machinery/computer/shuttle/syndicate/recall, /turf/open/floor/plasteel/bar{ @@ -6078,6 +6204,16 @@ /obj/machinery/computer/shuttle, /turf/open/floor/engine/cult, /area/wizard_station) +"rb" = ( +/obj/item/lighter, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"rc" = ( +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) "rd" = ( /obj/structure/flora/grass/brown, /obj/effect/light_emitter{ @@ -6504,6 +6640,48 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) +"rY" = ( +/obj/item/dice/d20, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"rZ" = ( +/obj/structure/rack, +/obj/item/clothing/head/that, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/accessory/waistcoat, +/turf/open/floor/wood, +/area/centcom/holding) +"sa" = ( +/obj/structure/rack, +/obj/item/storage/crayons, +/obj/item/gun/ballistic/automatic/toy/pistol, +/obj/item/ammo_box/foambox, +/turf/open/floor/wood, +/area/centcom/holding) +"sb" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"sc" = ( +/obj/structure/rack, +/obj/item/storage/crayons, +/obj/item/gun/ballistic/shotgun/toy/crossbow, +/turf/open/floor/wood, +/area/centcom/holding) +"sd" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/suit_jacket/female{ + desc = "A black trouser suit for women. Very formal."; + name = "black suit"; + pixel_x = 3; + pixel_y = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "se" = ( /obj/machinery/light{ dir = 8 @@ -6905,6 +7083,34 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) +"sY" = ( +/mob/living/simple_animal/bot/medbot, +/turf/open/floor/wood, +/area/centcom/holding) +"sZ" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"ta" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/centcom/holding) +"tb" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood, +/area/centcom/holding) +"tc" = ( +/obj/structure/closet/wardrobe/mixed, +/turf/open/floor/wood, +/area/centcom/holding) +"td" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, +/turf/open/floor/wood, +/area/centcom/holding) "te" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, @@ -6945,6 +7151,40 @@ }, /turf/open/floor/plating/airless, /area/syndicate_mothership/control) +"tj" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/machinery/light, +/obj/machinery/button/door{ + id = "Ninjaholdingsuicide"; + name = "SUICIDE CHAMBER LOCK"; + normaldoorcontrol = 1; + pixel_x = 4; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"tk" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Private Rooms" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"tl" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + id_tag = "Ninjaholdingsuicide"; + locked = 1; + name = "SUICIDE CHAMBER" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/centcom/holding) +"tm" = ( +/turf/open/floor/carpet, +/area/centcom/holding) "tn" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -7245,6 +7485,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/evac) +"tW" = ( +/obj/structure/table/wood/fancy/black, +/turf/open/floor/carpet, +/area/centcom/holding) "tX" = ( /obj/machinery/door/airlock{ icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; @@ -7252,6 +7496,40 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) +"tY" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"tZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"ua" = ( +/obj/structure/plasticflaps, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/centcom/holding) +"ub" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom1"; + name = "Room 1" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"uc" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) "ud" = ( /obj/machinery/door/poddoor/shutters{ id = "nukeop_ready"; @@ -7265,6 +7543,25 @@ }, /turf/open/floor/plating/airless, /area/syndicate_mothership/control) +"uf" = ( +/turf/open/lava, +/area/centcom/holding) +"ug" = ( +/obj/machinery/button/door{ + id = "Proom1"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 4; + specialfunctions = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/centcom/holding) +"uh" = ( +/turf/open/chasm/lavaland, +/area/centcom/holding) "ui" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -7466,12 +7763,37 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet, /area/wizard_station) +"uG" = ( +/obj/structure/chair/sofa/left, +/turf/open/floor/carpet, +/area/centcom/holding) +"uH" = ( +/obj/structure/chair/sofa/corner{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"uI" = ( +/obj/structure/chair/sofa, +/turf/open/floor/carpet, +/area/centcom/holding) "uJ" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, /turf/open/floor/plating, /area/syndicate_mothership/control) +"uK" = ( +/obj/machinery/button/door{ + id = "Proom2"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = 4; + specialfunctions = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) "uL" = ( /obj/machinery/button/door{ id = "nukeop_ready"; @@ -7490,6 +7812,10 @@ }, /turf/open/floor/mineral/plastitanium, /area/syndicate_mothership/control) +"uN" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/carpet, +/area/centcom/holding) "uO" = ( /obj/machinery/door/airlock/centcom{ name = "Shuttle Control Office"; @@ -7695,6 +8021,45 @@ }, /turf/open/floor/carpet, /area/wizard_station) +"vo" = ( +/obj/structure/chair/sofa{ + icon_state = "sofamiddle"; + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vp" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"vq" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom2"; + name = "Room 2" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"vr" = ( +/obj/structure/chair/sofa/corner{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vs" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vt" = ( +/obj/machinery/vending/games, +/turf/open/floor/carpet, +/area/centcom/holding) "vu" = ( /obj/item/storage/box/drinkingglasses, /obj/item/reagent_containers/food/drinks/bottle/rum, @@ -7717,6 +8082,19 @@ /obj/item/toy/nuke, /turf/open/floor/wood, /area/syndicate_mothership/control) +"vy" = ( +/obj/structure/chair/sofa{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vz" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom3"; + name = "Room 3" + }, +/turf/open/floor/wood, +/area/centcom/holding) "vA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/directions/engineering{ @@ -7984,6 +8362,68 @@ }, /turf/open/floor/carpet, /area/wizard_station) +"we" = ( +/obj/machinery/button/door{ + id = "Proom3"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 4; + specialfunctions = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/centcom/holding) +"wf" = ( +/obj/machinery/button/door{ + id = "Proom4"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = 4; + specialfunctions = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"wg" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom4"; + name = "Room 4" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"wh" = ( +/obj/structure/table/wood, +/obj/item/soap/nanotrasen, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/wood, +/area/centcom/holding) +"wi" = ( +/obj/structure/table/wood, +/obj/structure/bedsheetbin, +/turf/open/floor/wood, +/area/centcom/holding) +"wj" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom5"; + name = "Room 5" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"wk" = ( +/obj/machinery/button/door{ + id = "Proom5"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 4; + specialfunctions = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/centcom/holding) "wl" = ( /obj/machinery/light, /turf/open/floor/wood, @@ -10765,77 +11205,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"EZ" = ( -/obj/structure/table, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fa" = ( -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fb" = ( -/obj/structure/closet/secure_closet/bar{ - req_access_txt = "25" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fc" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fd" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fe" = ( -/obj/structure/rack, -/obj/item/camera, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Ff" = ( -/obj/structure/rack, -/obj/item/toy/sword, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Fg" = ( -/obj/structure/rack, -/obj/item/toy/gun, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Fh" = ( -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Fi" = ( /turf/open/floor/plating/beach/sand, /area/centcom/holding) @@ -10952,19 +11321,6 @@ dir = 5 }, /area/tdome/tdomeobserve) -"FA" = ( -/obj/structure/table, -/obj/item/clothing/head/that, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FB" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "FC" = ( /obj/item/camera, /turf/open/floor/plating/beach/sand, @@ -11071,41 +11427,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"FU" = ( -/obj/structure/table, -/obj/item/ammo_box/foambox, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FV" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FW" = ( -/obj/structure/table, -/obj/item/lighter, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FX" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/soda_cans/cola, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FY" = ( -/obj/structure/table, -/obj/item/dice/d20, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) "FZ" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -11226,13 +11547,6 @@ }, /turf/open/lava, /area/wizard_station) -"Gs" = ( -/obj/structure/rack, -/obj/item/clothing/head/that, -/obj/item/clothing/under/suit_jacket, -/obj/item/clothing/accessory/waistcoat, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Gt" = ( /obj/item/toy/beach_ball, /turf/open/floor/plating/beach/sand, @@ -11280,18 +11594,6 @@ }, /turf/open/lava/airless, /area/wizard_station) -"GA" = ( -/obj/structure/rack, -/obj/item/storage/crayons, -/obj/item/gun/ballistic/automatic/toy/pistol, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"GB" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "GC" = ( /obj/structure/table, /obj/structure/bedsheetbin, @@ -11524,12 +11826,6 @@ /obj/structure/shuttle/engine/propulsion, /turf/open/space, /area/wizard_station) -"GY" = ( -/obj/structure/rack, -/obj/item/storage/crayons, -/obj/item/gun/ballistic/shotgun/toy/crossbow, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "GZ" = ( /turf/open/floor/plating/beach/coastline_b, /area/centcom/holding) @@ -11582,33 +11878,6 @@ dir = 4 }, /area/tdome/tdomeobserve) -"Hi" = ( -/obj/structure/rack, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/suit_jacket/female{ - desc = "A black trouser suit for women. Very formal."; - name = "black suit"; - pixel_x = 3; - pixel_y = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Hj" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Hk" = ( -/obj/structure/table, -/obj/item/gun/ballistic/automatic/toy/pistol, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Hl" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Hm" = ( /turf/open/floor/plating/beach/water, /area/centcom/holding) @@ -39485,25 +39754,25 @@ aa aa aa ED -EZ -EZ -FU -Gs -GA -GY -Hi +hH +pU +qG +rZ +sa +sc +sd +ED +ED +ED +ED +ED +ED +ED +ED ED ED ED ED -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -39742,25 +40011,25 @@ aa aa aa ED -Fa -Fa -Fa -Fh -Fh -Fh -Fh +jO +pU +pU +pW +pW +pW +pU Hy HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +uH +vo +vr +ED +uH +vo +vr +ED aa aa aa @@ -39999,25 +40268,25 @@ aa aa aa ED -Fb -Fa -FV -FB -Fh -Fh -Fh +oU +pU +qH +qF +pW +pW +pU Hz HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +uI +uN +vy +ED +uI +uN +vy +ED aa aa aa @@ -40256,25 +40525,25 @@ aa aa aa ED -Fc -Fa -EZ -FB -Fh -Fh -Fh +oV +pU +qI +qF +pW +pW +sY Hz HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +uG +uN +vs +ED +uG +uN +vs +ED aa aa aa @@ -40513,25 +40782,25 @@ aa aa aa ED -Fc -Fa -FW -FB -Fh -Fh -Fh +px +pU +rb +qF +pW +pW +sZ Hy HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +tm +tm +tm +ED +tm +tm +tm +ED aa aa aa @@ -40770,25 +41039,25 @@ aa aa aa ED -Fa -Fa -FX -FB -Fh -Fh -Hj +py +pU +rc +qF +pW +pW +ta ED ED ED ED -aa -aa -aa -aa -aa -aa -aa -aa +uK +tm +vt +ED +wf +tm +vt +ED aa aa aa @@ -41027,26 +41296,26 @@ aa aa aa ED -Fd -FA -FY -FB -Fh -Fh -Fh +pz +pV +rY +qF +pW +pW +pU +ED +ED +ED +ED +ED +vq +ED +ED +ED +wg +ED +ED ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -41284,13 +41553,25 @@ aa aa aa ED -Fe -Fh -Fh -Fh -Fh -Fh -Fh +pA +pW +pW +pW +pW +pW +pU +tk +pU +tZ +pU +pU +pU +pU +pU +pU +pU +tZ +wh ED aa aa @@ -41301,18 +41582,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa KH KU Lb @@ -41541,13 +41810,25 @@ aa aa aa ED -Ff -Fh -Fh -Fh -Fh -Fh -FB +pB +pW +pW +pW +pW +pW +pU +tk +pU +pU +pU +pU +vp +pU +pU +pU +pU +pU +wi ED aa aa @@ -41557,18 +41838,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa KH KH KS @@ -41798,26 +42067,26 @@ aa aa aa ED -Fg -Fh -Fh -Fh -Fh -FB -Hk +pC +pW +pW +pW +pW +pW +tb +ED +ED +ub +ED +ED +ED +vz +ED +ED +ED +wj +ED ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42055,26 +42324,26 @@ aa aa aa ED -Fh -FB -Fh -Fh -Fh -Fh -FB +pD +qF +pW +pW +pW +pW +tc +ED +tY +tm +ug +ED +tY +tm +we +ED +tY +tm +wk ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42312,26 +42581,26 @@ aa aa aa ED -Fi -Fi -Fi -Fi -GB -GB -Hl +pE +qF +pW +pW +pW +pW +td +ED +tW +uc +tm +ED +tW +uc +tm +ED +tW +uc +tm ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42569,26 +42838,26 @@ aa aa aa ED -Fj -Fi -Fi -Fi -Fi -GZ -Hm +pS +qF +pW +pW +pW +pW +td +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42826,6 +43095,777 @@ aa aa aa ED +pS +qF +pW +pW +pW +pW +tj +ED +ED +ED +ED +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(115,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ED +pT +pU +pU +pU +sb +sb +sb +tl +ua +uf +uh +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(116,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ED +Fj +Fi +Fi +Fi +Fi +GZ +Hm +ED +ED +ED +ED +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(117,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ED Fi Fi FZ @@ -42892,7 +43932,7 @@ aa aa aa "} -(115,1,1) = {" +(118,1,1) = {" aa aa aa @@ -43149,7 +44189,7 @@ aa aa aa "} -(116,1,1) = {" +(119,1,1) = {" aa aa aa @@ -43406,7 +44446,7 @@ aa aa aa "} -(117,1,1) = {" +(120,1,1) = {" aa aa aa @@ -43663,777 +44703,6 @@ aa aa aa "} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ED -ED -ED -ED -ED -ED -ED -ED -ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} (121,1,1) = {" aa aa @@ -44624,15 +44893,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ED +ED +ED +ED +ED +ED +ED +ED +ED aa aa aa diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index a422153bbb..d945d49116 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -11754,22 +11754,8 @@ /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) "aEN" = ( -/obj/structure/closet/crate{ - name = "Gold Crate" - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_y = 2 - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_x = 1; - pixel_y = -2 - }, -/obj/item/storage/belt/champion, /obj/effect/turf_decal/bot_white/right, +/obj/structure/closet/crate/goldcrate, /turf/open/floor/plasteel/vault{ dir = 1 }, @@ -11781,30 +11767,8 @@ /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) "aEP" = ( -/obj/item/coin/silver{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/coin/silver{ - pixel_x = 12; - pixel_y = 7 - }, -/obj/item/coin/silver{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/coin/silver{ - pixel_x = -6; - pixel_y = 5 - }, -/obj/item/coin/silver{ - pixel_x = 5; - pixel_y = -8 - }, -/obj/structure/closet/crate{ - name = "Silver Crate" - }, /obj/effect/turf_decal/bot_white/left, +/obj/structure/closet/crate/silvercrate, /turf/open/floor/plasteel/vault{ dir = 4 }, @@ -45382,28 +45346,10 @@ /turf/open/floor/plasteel, /area/engine/engineering) "ckG" = ( -/obj/structure/closet/crate{ - name = "solar pack crate" - }, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/circuitboard/computer/solar_control, -/obj/item/electronics/tracker, -/obj/item/paper/guides/jobs/engi/solars, /obj/effect/turf_decal/bot{ dir = 1 }, +/obj/structure/closet/crate/solarpanel_small, /turf/open/floor/plasteel, /area/engine/engineering) "ckH" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index c0c19dc87b..02529a8c6b 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -2953,8 +2953,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "alK" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, /obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "alL" = ( @@ -5799,12 +5799,6 @@ dir = 4 }, /area/maintenance/disposal) -"asj" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plasteel/airless/solarpanel, -/area/solar/port/fore) "ask" = ( /obj/structure/lattice/catwalk, /turf/open/space, @@ -32288,23 +32282,10 @@ }, /area/security/nuke_storage) "bvQ" = ( -/obj/structure/closet/crate{ - name = "Silver Crate" - }, /obj/machinery/light/small{ dir = 1 }, -/obj/item/coin/silver{ - pixel_x = -6 - }, -/obj/item/coin/silver{ - pixel_x = 6 - }, -/obj/item/coin/silver{ - pixel_x = 6 - }, -/obj/item/coin/silver, -/obj/item/coin/silver, +/obj/structure/closet/crate/silvercrate, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -35277,17 +35258,12 @@ }, /area/security/nuke_storage) "bBU" = ( -/obj/structure/closet/crate{ - name = "Gold Crate" - }, -/obj/item/storage/belt/champion, /obj/machinery/airalarm{ dir = 1; pixel_y = -22 }, /obj/machinery/light/small, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, +/obj/structure/closet/crate/goldcrate, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -44931,6 +44907,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bUw" = ( @@ -46102,13 +46081,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral, /area/hallway/primary/port) -"bWH" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "bWI" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/neutral, @@ -47329,6 +47301,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bYS" = ( @@ -56467,6 +56442,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "crY" = ( @@ -56474,6 +56452,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "crZ" = ( @@ -77287,6 +77268,12 @@ /obj/machinery/light{ dir = 1 }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, /turf/open/floor/plasteel/whitepurple/side{ dir = 1 }, @@ -78134,6 +78121,9 @@ dir = 10 }, /obj/structure/chair/comfy, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, /turf/open/floor/plasteel/whitepurple/side{ dir = 8 }, @@ -78144,6 +78134,9 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/vending/snack/random, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /turf/open/floor/plasteel/whitepurple/side{ dir = 4 }, @@ -80413,6 +80406,9 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/whitepurple/side{ dir = 8 }, @@ -80438,6 +80434,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel/whitepurple/side{ dir = 4 }, @@ -88622,6 +88619,12 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /turf/open/floor/plasteel/neutral/side, /area/science/mixing) "dHg" = ( @@ -89177,6 +89180,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/neutral/side{ dir = 4 }, @@ -89202,6 +89211,10 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /turf/open/floor/plasteel/neutral/side{ dir = 8; heat_capacity = 1e+006 @@ -89975,6 +89988,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/neutral/side{ dir = 1 }, @@ -100572,6 +100589,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light, /obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/whitepurple/side, /area/science/misc_lab) "uYS" = ( @@ -119018,7 +119039,7 @@ aoG apI aqJ aaa -asj +aoG apI aqJ aaa @@ -132434,7 +132455,7 @@ bOp bQq bDu bUv -bWH +bWC bYR caG caG diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 12893085bc..e6ef58c9af 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -12521,25 +12521,11 @@ /turf/open/floor/plasteel/floorgrime, /area/quartermaster/warehouse) "aAP" = ( -/obj/structure/closet/crate{ - name = "Gold Crate" - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_y = 2 - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_x = 1; - pixel_y = -2 - }, -/obj/item/storage/belt/champion, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /obj/effect/turf_decal/bot_white/right, +/obj/structure/closet/crate/goldcrate, /turf/open/floor/plasteel/vault{ dir = 1 }, @@ -12573,30 +12559,8 @@ }, /area/security/nuke_storage) "aAT" = ( -/obj/item/coin/silver{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/coin/silver{ - pixel_x = 12; - pixel_y = 7 - }, -/obj/item/coin/silver{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/coin/silver{ - pixel_x = -6; - pixel_y = 5 - }, -/obj/item/coin/silver{ - pixel_x = 5; - pixel_y = -8 - }, -/obj/structure/closet/crate{ - name = "Silver Crate" - }, /obj/effect/turf_decal/bot_white/left, +/obj/structure/closet/crate/silvercrate, /turf/open/floor/plasteel/vault{ dir = 1 }, @@ -15500,28 +15464,10 @@ }, /area/engine/engineering) "aGT" = ( -/obj/structure/closet/crate{ - name = "solar pack crate" - }, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/circuitboard/computer/solar_control, -/obj/item/electronics/tracker, -/obj/item/paper/guides/jobs/engi/solars, /obj/effect/turf_decal/bot{ dir = 1 }, +/obj/structure/closet/crate/solarpanel_small, /turf/open/floor/plasteel{ dir = 1 }, diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 7bac99a37c..1390460fd2 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -33236,28 +33236,10 @@ }, /area/maintenance/starboard) "sFp" = ( -/obj/structure/closet/crate{ - name = "solar pack crate" - }, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/circuitboard/computer/solar_control, -/obj/item/electronics/tracker, -/obj/item/paper/guides/jobs/engi/solars, /obj/effect/turf_decal/bot{ dir = 1 }, +/obj/structure/closet/crate/solarpanel_small, /turf/open/floor/plasteel/vault/side{ dir = 5 }, diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 573dc2c707..ac4d2a12dc 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -6985,21 +6985,7 @@ /turf/closed/wall/r_wall, /area/bridge) "asV" = ( -/obj/structure/closet/crate{ - name = "Gold Crate" - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_y = 2 - }, -/obj/item/stack/sheet/mineral/gold{ - pixel_x = 1; - pixel_y = -2 - }, -/obj/item/storage/belt/champion, +/obj/structure/closet/crate/goldcrate, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -7036,29 +7022,7 @@ }, /area/ai_monitored/nuke_storage) "asZ" = ( -/obj/item/coin/silver{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/coin/silver{ - pixel_x = 12; - pixel_y = 7 - }, -/obj/item/coin/silver{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/coin/silver{ - pixel_x = -6; - pixel_y = 5 - }, -/obj/item/coin/silver{ - pixel_x = 5; - pixel_y = -8 - }, -/obj/structure/closet/crate{ - name = "Silver Crate" - }, +/obj/structure/closet/crate/silvercrate, /turf/open/floor/plasteel/vault{ dir = 4 }, @@ -39901,25 +39865,6 @@ /turf/open/floor/plasteel/darkgreen, /area/storage/tech) "bTB" = ( -/obj/structure/closet/crate{ - name = "solar pack crate" - }, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/circuitboard/computer/solar_control, -/obj/item/electronics/tracker, -/obj/item/paper/guides/jobs/engi/solars, /obj/machinery/power/apc{ dir = 2; name = "Tech Storage APC"; @@ -39927,6 +39872,7 @@ pixel_y = -24 }, /obj/structure/cable, +/obj/structure/closet/crate/solarpanel_small, /turf/open/floor/plasteel/darkgreen, /area/storage/tech) "bTC" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 5ca6b8b965..499a89a0cd 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2526,6 +2526,10 @@ /obj/machinery/capture_the_flag/red, /turf/open/floor/circuit/green/anim, /area/ctf) +"hH" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood, +/area/centcom/holding) "hI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -3324,6 +3328,10 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/centcom/supply) +"jO" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, +/area/centcom/holding) "jP" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -5318,6 +5326,20 @@ dir = 8 }, /area/tdome/tdomeobserve) +"oU" = ( +/obj/structure/closet/secure_closet/bar{ + locked = 0; + req_access_txt = "25" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"oV" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/centcom/holding) "oW" = ( /obj/structure/flora/bush, /obj/effect/light_emitter{ @@ -5562,6 +5584,70 @@ dir = 8 }, /area/centcom/control) +"px" = ( +/obj/machinery/chem_dispenser/drinks/beer, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"py" = ( +/obj/machinery/chem_dispenser/drinks, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"pz" = ( +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"pA" = ( +/obj/machinery/vending/cola/random, +/turf/open/floor/wood, +/area/centcom/holding) +"pB" = ( +/obj/structure/rack, +/obj/item/toy/sword, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/coin/gold{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/camera, +/turf/open/floor/wood, +/area/centcom/holding) +"pC" = ( +/obj/structure/rack, +/obj/item/toy/gun, +/obj/item/coin/gold{ + pixel_w = -9; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"pD" = ( +/obj/machinery/computer/arcade/battle, +/turf/open/floor/wood, +/area/centcom/holding) +"pE" = ( +/obj/machinery/computer/arcade/orion_trail, +/turf/open/floor/wood, +/area/centcom/holding) "pF" = ( /obj/machinery/door/airlock/centcom{ name = "Auxillary Dock"; @@ -5686,6 +5772,25 @@ dir = 5 }, /area/centcom/ferry) +"pS" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood, +/area/centcom/holding) +"pT" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/wood, +/area/centcom/holding) +"pU" = ( +/turf/open/floor/wood, +/area/centcom/holding) +"pV" = ( +/obj/item/clothing/head/that, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"pW" = ( +/turf/open/floor/carpet/black, +/area/centcom/holding) "pX" = ( /obj/item/storage/crayons, /obj/structure/table, @@ -5951,6 +6056,30 @@ "qE" = ( /turf/closed/indestructible/riveted/uranium, /area/wizard_station) +"qF" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/carpet/black, +/area/centcom/holding) +"qG" = ( +/obj/structure/table/wood, +/obj/item/storage/box/drinkingglasses, +/obj/item/storage/box/drinkingglasses{ + pixel_x = 2; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"qH" = ( +/obj/item/reagent_containers/food/drinks/shaker, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"qI" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) "qJ" = ( /obj/machinery/computer/shuttle/syndicate/recall, /turf/open/floor/plasteel/bar{ @@ -6076,6 +6205,16 @@ /obj/machinery/computer/shuttle, /turf/open/floor/engine/cult, /area/wizard_station) +"rb" = ( +/obj/item/lighter, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"rc" = ( +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) "rd" = ( /obj/structure/flora/grass/brown, /obj/effect/light_emitter{ @@ -6502,6 +6641,48 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) +"rY" = ( +/obj/item/dice/d20, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/holding) +"rZ" = ( +/obj/structure/rack, +/obj/item/clothing/head/that, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/accessory/waistcoat, +/turf/open/floor/wood, +/area/centcom/holding) +"sa" = ( +/obj/structure/rack, +/obj/item/storage/crayons, +/obj/item/gun/ballistic/automatic/toy/pistol, +/obj/item/ammo_box/foambox, +/turf/open/floor/wood, +/area/centcom/holding) +"sb" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"sc" = ( +/obj/structure/rack, +/obj/item/storage/crayons, +/obj/item/gun/ballistic/shotgun/toy/crossbow, +/turf/open/floor/wood, +/area/centcom/holding) +"sd" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/suit_jacket/female{ + desc = "A black trouser suit for women. Very formal."; + name = "black suit"; + pixel_x = 3; + pixel_y = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "se" = ( /obj/machinery/light{ dir = 8 @@ -6903,6 +7084,34 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) +"sY" = ( +/mob/living/simple_animal/bot/medbot, +/turf/open/floor/wood, +/area/centcom/holding) +"sZ" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"ta" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/centcom/holding) +"tb" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood, +/area/centcom/holding) +"tc" = ( +/obj/structure/closet/wardrobe/mixed, +/turf/open/floor/wood, +/area/centcom/holding) +"td" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, +/turf/open/floor/wood, +/area/centcom/holding) "te" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, @@ -6943,6 +7152,40 @@ }, /turf/open/floor/plating/airless, /area/syndicate_mothership/control) +"tj" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/machinery/light, +/obj/machinery/button/door{ + id = "Ninjaholdingsuicide"; + name = "SUICIDE CHAMBER LOCK"; + normaldoorcontrol = 1; + pixel_x = 4; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"tk" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Private Rooms" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"tl" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + id_tag = "Ninjaholdingsuicide"; + locked = 1; + name = "SUICIDE CHAMBER" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/centcom/holding) +"tm" = ( +/turf/open/floor/carpet, +/area/centcom/holding) "tn" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -7243,6 +7486,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/evac) +"tW" = ( +/obj/structure/table/wood/fancy/black, +/turf/open/floor/carpet, +/area/centcom/holding) "tX" = ( /obj/machinery/door/airlock{ icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; @@ -7250,6 +7497,40 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) +"tY" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"tZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"ua" = ( +/obj/structure/plasticflaps, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/centcom/holding) +"ub" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom1"; + name = "Room 1" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"uc" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) "ud" = ( /obj/machinery/door/poddoor/shutters{ id = "nukeop_ready"; @@ -7263,6 +7544,25 @@ }, /turf/open/floor/plating/airless, /area/syndicate_mothership/control) +"uf" = ( +/turf/open/lava, +/area/centcom/holding) +"ug" = ( +/obj/machinery/button/door{ + id = "Proom1"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 4; + specialfunctions = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/centcom/holding) +"uh" = ( +/turf/open/chasm/lavaland, +/area/centcom/holding) "ui" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -7464,12 +7764,37 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet, /area/wizard_station) +"uG" = ( +/obj/structure/chair/sofa/left, +/turf/open/floor/carpet, +/area/centcom/holding) +"uH" = ( +/obj/structure/chair/sofa/corner{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"uI" = ( +/obj/structure/chair/sofa, +/turf/open/floor/carpet, +/area/centcom/holding) "uJ" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, /turf/open/floor/plating, /area/syndicate_mothership/control) +"uK" = ( +/obj/machinery/button/door{ + id = "Proom2"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = 4; + specialfunctions = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) "uL" = ( /obj/machinery/button/door{ id = "nukeop_ready"; @@ -7488,6 +7813,10 @@ }, /turf/open/floor/mineral/plastitanium, /area/syndicate_mothership/control) +"uN" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/carpet, +/area/centcom/holding) "uO" = ( /obj/machinery/door/airlock/centcom{ name = "Shuttle Control Office"; @@ -7693,6 +8022,45 @@ }, /turf/open/floor/carpet, /area/wizard_station) +"vo" = ( +/obj/structure/chair/sofa{ + icon_state = "sofamiddle"; + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vp" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"vq" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom2"; + name = "Room 2" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"vr" = ( +/obj/structure/chair/sofa/corner{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vs" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vt" = ( +/obj/machinery/vending/games, +/turf/open/floor/carpet, +/area/centcom/holding) "vu" = ( /obj/item/storage/box/drinkingglasses, /obj/item/reagent_containers/food/drinks/bottle/rum, @@ -7715,6 +8083,19 @@ /obj/item/toy/nuke, /turf/open/floor/wood, /area/syndicate_mothership/control) +"vy" = ( +/obj/structure/chair/sofa{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"vz" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom3"; + name = "Room 3" + }, +/turf/open/floor/wood, +/area/centcom/holding) "vA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/directions/engineering{ @@ -7982,6 +8363,68 @@ }, /turf/open/floor/carpet, /area/wizard_station) +"we" = ( +/obj/machinery/button/door{ + id = "Proom3"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 4; + specialfunctions = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/centcom/holding) +"wf" = ( +/obj/machinery/button/door{ + id = "Proom4"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = 4; + specialfunctions = 4 + }, +/turf/open/floor/carpet, +/area/centcom/holding) +"wg" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom4"; + name = "Room 4" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"wh" = ( +/obj/structure/table/wood, +/obj/item/soap/nanotrasen, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/wood, +/area/centcom/holding) +"wi" = ( +/obj/structure/table/wood, +/obj/structure/bedsheetbin, +/turf/open/floor/wood, +/area/centcom/holding) +"wj" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Proom5"; + name = "Room 5" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"wk" = ( +/obj/machinery/button/door{ + id = "Proom5"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 4; + specialfunctions = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/centcom/holding) "wl" = ( /obj/machinery/light, /turf/open/floor/wood, @@ -10763,77 +11206,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"EZ" = ( -/obj/structure/table, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fa" = ( -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fb" = ( -/obj/structure/closet/secure_closet/bar{ - req_access_txt = "25" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fc" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fd" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"Fe" = ( -/obj/structure/rack, -/obj/item/camera, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Ff" = ( -/obj/structure/rack, -/obj/item/toy/sword, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Fg" = ( -/obj/structure/rack, -/obj/item/toy/gun, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Fh" = ( -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Fi" = ( /turf/open/floor/plating/beach/sand, /area/centcom/holding) @@ -10950,19 +11322,6 @@ dir = 5 }, /area/tdome/tdomeobserve) -"FA" = ( -/obj/structure/table, -/obj/item/clothing/head/that, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FB" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "FC" = ( /obj/item/camera, /turf/open/floor/plating/beach/sand, @@ -11069,41 +11428,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"FU" = ( -/obj/structure/table, -/obj/item/ammo_box/foambox, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FV" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FW" = ( -/obj/structure/table, -/obj/item/lighter, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FX" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/soda_cans/cola, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) -"FY" = ( -/obj/structure/table, -/obj/item/dice/d20, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, -/area/centcom/holding) "FZ" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -11224,13 +11548,6 @@ }, /turf/open/lava, /area/wizard_station) -"Gs" = ( -/obj/structure/rack, -/obj/item/clothing/head/that, -/obj/item/clothing/under/suit_jacket, -/obj/item/clothing/accessory/waistcoat, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Gt" = ( /obj/item/toy/beach_ball, /turf/open/floor/plating/beach/sand, @@ -11278,18 +11595,6 @@ }, /turf/open/lava/airless, /area/wizard_station) -"GA" = ( -/obj/structure/rack, -/obj/item/storage/crayons, -/obj/item/gun/ballistic/automatic/toy/pistol, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"GB" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "GC" = ( /obj/structure/table, /obj/structure/bedsheetbin, @@ -11522,12 +11827,6 @@ /obj/structure/shuttle/engine/propulsion, /turf/open/space, /area/wizard_station) -"GY" = ( -/obj/structure/rack, -/obj/item/storage/crayons, -/obj/item/gun/ballistic/shotgun/toy/crossbow, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "GZ" = ( /turf/open/floor/plating/beach/coastline_b, /area/centcom/holding) @@ -11580,33 +11879,6 @@ dir = 4 }, /area/tdome/tdomeobserve) -"Hi" = ( -/obj/structure/rack, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/suit_jacket/female{ - desc = "A black trouser suit for women. Very formal."; - name = "black suit"; - pixel_x = 3; - pixel_y = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Hj" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Hk" = ( -/obj/structure/table, -/obj/item/gun/ballistic/automatic/toy/pistol, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"Hl" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Hm" = ( /turf/open/floor/plating/beach/water, /area/centcom/holding) @@ -39483,25 +39755,25 @@ aa aa aa ED -EZ -EZ -FU -Gs -GA -GY -Hi +hH +pU +qG +rZ +sa +sc +sd +ED +ED +ED +ED +ED +ED +ED +ED ED ED ED ED -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -39740,25 +40012,25 @@ aa aa aa ED -Fa -Fa -Fa -Fh -Fh -Fh -Fh +jO +pU +pU +pW +pW +pW +pU Hy HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +uH +vo +vr +ED +uH +vo +vr +ED aa aa aa @@ -39997,25 +40269,25 @@ aa aa aa ED -Fb -Fa -FV -FB -Fh -Fh -Fh +oU +pU +qH +qF +pW +pW +pU Hz HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +uI +uN +vy +ED +uI +uN +vy +ED aa aa aa @@ -40254,25 +40526,25 @@ aa aa aa ED -Fc -Fa -EZ -FB -Fh -Fh -Fh +oV +pU +qI +qF +pW +pW +sY Hz HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +uG +uN +vs +ED +uG +uN +vs +ED aa aa aa @@ -40511,25 +40783,25 @@ aa aa aa ED -Fc -Fa -FW -FB -Fh -Fh -Fh +px +pU +rb +qF +pW +pW +sZ Hy HH HH ED -aa -aa -aa -aa -aa -aa -aa -aa +tm +tm +tm +ED +tm +tm +tm +ED aa aa aa @@ -40768,25 +41040,25 @@ aa aa aa ED -Fa -Fa -FX -FB -Fh -Fh -Hj +py +pU +rc +qF +pW +pW +ta ED ED ED ED -aa -aa -aa -aa -aa -aa -aa -aa +uK +tm +vt +ED +wf +tm +vt +ED aa aa aa @@ -41025,26 +41297,26 @@ aa aa aa ED -Fd -FA -FY -FB -Fh -Fh -Fh +pz +pV +rY +qF +pW +pW +pU +ED +ED +ED +ED +ED +vq +ED +ED +ED +wg +ED +ED ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -41282,13 +41554,25 @@ aa aa aa ED -Fe -Fh -Fh -Fh -Fh -Fh -Fh +pA +pW +pW +pW +pW +pW +pU +tk +pU +tZ +pU +pU +pU +pU +pU +pU +pU +tZ +wh ED aa aa @@ -41299,18 +41583,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa KH KU Lb @@ -41539,13 +41811,25 @@ aa aa aa ED -Ff -Fh -Fh -Fh -Fh -Fh -FB +pB +pW +pW +pW +pW +pW +pU +tk +pU +pU +pU +pU +vp +pU +pU +pU +pU +pU +wi ED aa aa @@ -41555,18 +41839,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa KH KH KS @@ -41796,26 +42068,26 @@ aa aa aa ED -Fg -Fh -Fh -Fh -Fh -FB -Hk +pC +pW +pW +pW +pW +pW +tb +ED +ED +ub +ED +ED +ED +vz +ED +ED +ED +wj +ED ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42053,26 +42325,26 @@ aa aa aa ED -Fh -FB -Fh -Fh -Fh -Fh -FB +pD +qF +pW +pW +pW +pW +tc +ED +tY +tm +ug +ED +tY +tm +we +ED +tY +tm +wk ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42310,26 +42582,26 @@ aa aa aa ED -Fi -Fi -Fi -Fi -GB -GB -Hl +pE +qF +pW +pW +pW +pW +td +ED +tW +uc +tm +ED +tW +uc +tm +ED +tW +uc +tm ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42567,26 +42839,26 @@ aa aa aa ED -Fj -Fi -Fi -Fi -Fi -GZ -Hm +pS +qF +pW +pW +pW +pW +td +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42824,6 +43096,777 @@ aa aa aa ED +pS +qF +pW +pW +pW +pW +tj +ED +ED +ED +ED +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(115,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ED +pT +pU +pU +pU +sb +sb +sb +tl +ua +uf +uh +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(116,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ED +Fj +Fi +Fi +Fi +Fi +GZ +Hm +ED +ED +ED +ED +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(117,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ED Fi Fi FZ @@ -42890,7 +43933,7 @@ aa aa aa "} -(115,1,1) = {" +(118,1,1) = {" aa aa aa @@ -43147,7 +44190,7 @@ aa aa aa "} -(116,1,1) = {" +(119,1,1) = {" aa aa aa @@ -43404,7 +44447,7 @@ aa aa aa "} -(117,1,1) = {" +(120,1,1) = {" aa aa aa @@ -43661,777 +44704,6 @@ aa aa aa "} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ED -ED -ED -ED -ED -ED -ED -ED -ED -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} (121,1,1) = {" aa aa @@ -44622,15 +44894,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ED +ED +ED +ED +ED +ED +ED +ED +ED aa aa aa diff --git a/_maps/shuttles/ruin_syndicate_dropship.dmm b/_maps/shuttles/ruin_syndicate_dropship.dmm new file mode 100644 index 0000000000..d635953737 --- /dev/null +++ b/_maps/shuttles/ruin_syndicate_dropship.dmm @@ -0,0 +1,656 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"al" = ( +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"bo" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"bB" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "caravansyndicate3_bolt_starboard"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = -6; + req_access_txt = "150"; + specialfunctions = 4 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"bN" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"cB" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"dZ" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"gl" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate3_bolt_port"; + name = "External Airlock"; + normalspeed = 0; + req_access_txt = "150" + }, +/obj/docking_port/mobile{ + dir = 2; + dwidth = 6; + height = 7; + id = "caravansyndicate3"; + name = "Syndicate Drop Ship"; + port_direction = 8; + preferred_direction = 4; + timid = 1; + width = 15 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"ha" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"hF" = ( +/obj/structure/chair, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/syndicate{ + dir = 8; + name = "Syndicate Drop Ship APC"; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"ka" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"mJ" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"ns" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "caravansyndicate3_bridge"; + name = "Bridge Blast Door Control"; + pixel_x = -16; + pixel_y = 5; + req_access_txt = "150" + }, +/obj/machinery/button/door{ + id = "caravansyndicate3_bolt_bridge"; + name = "Bridge Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -16; + pixel_y = -5; + req_access_txt = "150"; + specialfunctions = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 6 + }, +/area/shuttle/caravan/syndicate3) +"qE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"rz" = ( +/obj/machinery/computer/shuttle/caravan/syndicate3{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 8 + }, +/area/shuttle/caravan/syndicate3) +"rU" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/poddoor{ + id = "caravansyndicate3_bridge" + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"rV" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"sb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate3{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 10 + }, +/area/shuttle/caravan/syndicate3) +"sn" = ( +/obj/structure/chair, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"ss" = ( +/turf/open/floor/plasteel/darkred/side{ + dir = 1 + }, +/area/shuttle/caravan/syndicate3) +"uy" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 10 + }, +/area/shuttle/caravan/syndicate3) +"vw" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/regular, +/obj/item/assembly/flash/handheld, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"vQ" = ( +/obj/structure/shuttle/engine/propulsion/burst/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"wH" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"xC" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "caravansyndicate3_bolt_port"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 6; + req_access_txt = "150"; + specialfunctions = 4 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"BQ" = ( +/turf/open/floor/plasteel/darkred/side, +/area/shuttle/caravan/syndicate3) +"Cm" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"Dt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate/personal{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"Dx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"EO" = ( +/obj/structure/chair, +/obj/machinery/airalarm/syndicate{ + pixel_y = 24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"Fa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"Gx" = ( +/obj/machinery/airalarm/syndicate{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"HJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"HM" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/mob/living/simple_animal/hostile/syndicate{ + environment_smash = 0; + name = "Syndicate Salvage Pilot" + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"Ij" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/turretid{ + ailock = 1; + control_area = null; + desc = "A specially designed set of turret controls. Looks to be covered in protective casing to prevent AI interfacing."; + icon_state = "control_kill"; + lethal = 1; + name = "Shuttle turret control"; + pixel_y = 34; + req_access = null; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/darkred/corner{ + dir = 4 + }, +/area/shuttle/caravan/syndicate3) +"IR" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate3_bolt_bridge"; + name = "Bridge"; + req_access_txt = "150" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"Jv" = ( +/turf/template_noop, +/area/template_noop) +"KS" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate3_bolt_starboard"; + name = "External Airlock"; + normalspeed = 0; + req_access_txt = "150" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"Lq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/obj/structure/sign/warning/vacuum{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"NH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/syndicate/personal{ + anchored = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"Pt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 20 + }, +/obj/item/storage/box/lights/bulbs, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/sheet/mineral/plasma{ + amount = 20 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"PL" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 2; + icon_state = "standard_lethal"; + mode = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate3) +"Rj" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 1; + icon_state = "standard_lethal"; + mode = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate3) +"Sl" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/emergency, +/obj/item/wrench, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 9 + }, +/area/shuttle/caravan/syndicate3) +"Tn" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate3) +"UD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side, +/area/shuttle/caravan/syndicate3) +"US" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 1 + }, +/area/shuttle/caravan/syndicate3) +"Vf" = ( +/obj/machinery/door/airlock/hatch{ + name = "Ready Room"; + req_access_txt = "150" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"Wr" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred/corner, +/area/shuttle/caravan/syndicate3) +"YU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"ZB" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"ZJ" = ( +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"ZK" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 9 + }, +/area/shuttle/caravan/syndicate3) +"ZZ" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) + +(1,1,1) = {" +Jv +mJ +dZ +dZ +dZ +vQ +Jv +"} +(2,1,1) = {" +ZB +wH +wH +wH +wH +wH +ZB +"} +(3,1,1) = {" +Tn +Tn +bN +Pt +ha +Tn +Tn +"} +(4,1,1) = {" +Tn +hF +US +ZJ +BQ +ka +Tn +"} +(5,1,1) = {" +Tn +EO +ss +cB +BQ +Cm +Tn +"} +(6,1,1) = {" +Tn +sn +ss +cB +UD +rV +Tn +"} +(7,1,1) = {" +Tn +NH +Fa +cB +qE +Dt +Tn +"} +(8,1,1) = {" +Rj +Tn +Tn +Vf +Tn +Tn +PL +"} +(9,1,1) = {" +gl +xC +al +cB +bo +bB +KS +"} +(10,1,1) = {" +Tn +Lq +YU +Dx +qE +HJ +Tn +"} +(11,1,1) = {" +Tn +Tn +Tn +IR +Tn +Tn +Tn +"} +(12,1,1) = {" +Tn +uy +Gx +cB +ZZ +Sl +Tn +"} +(13,1,1) = {" +rU +ns +Ij +HM +Wr +vw +rU +"} +(14,1,1) = {" +rU +rU +sb +rz +ZK +rU +rU +"} +(15,1,1) = {" +Jv +rU +rU +rU +rU +rU +Jv +"} diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d0f8460053..391d55fe59 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -378,7 +378,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define BEAT_SLOW 2 #define BEAT_NONE 0 -//http://www.byond.com/docs/ref/info.html#/atom/var/mouse_opacity +//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity #define MOUSE_OPACITY_TRANSPARENT 0 #define MOUSE_OPACITY_ICON 1 #define MOUSE_OPACITY_OPAQUE 2 diff --git a/code/__DEFINES/server_tools.dm b/code/__DEFINES/server_tools.dm deleted file mode 100644 index a1764880c3..0000000000 --- a/code/__DEFINES/server_tools.dm +++ /dev/null @@ -1,128 +0,0 @@ -// /tg/station 13 server tools API -#define SERVICE_API_VERSION_STRING "3.2.0.2" - -//CONFIGURATION -//use this define if you want to do configuration outside of this file -#ifndef SERVER_TOOLS_EXTERNAL_CONFIGURATION -//Comment this out once you've filled in the below -#error /tg/station server tools interface unconfigured - -//Required interfaces (fill in with your codebase equivalent): - -//create a global variable named `Name` and set it to `Value` -//These globals must not be modifiable from anywhere outside of the server tools -#define SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(Name, Value) -//Read the value in the global variable `Name` -#define SERVER_TOOLS_READ_GLOBAL(Name) -//Set the value in the global variable `Name` to `Value` -#define SERVER_TOOLS_WRITE_GLOBAL(Name, Value) -//display an announcement `message` from the server to all players -#define SERVER_TOOLS_WORLD_ANNOUNCE(message) -//Write a string `message` to a server log -#define SERVER_TOOLS_LOG(message) -//Notify current in-game administrators of a string `event` -#define SERVER_TOOLS_NOTIFY_ADMINS(event) -//The current amount of connected clients -#define SERVER_TOOLS_CLIENT_COUNT -#endif - -//Required hooks: - -//Put this somewhere in /world/New() that is always run -#define SERVER_TOOLS_ON_NEW ServiceInit() -//Put this somewhere in /world/Topic(T, Addr, Master, Keys) that is always run before T is modified -#define SERVER_TOOLS_ON_TOPIC var/service_topic_return = ServiceCommand(params2list(T)); if(service_topic_return) return service_topic_return -//Put at the beginning of world/Reboot(reason) -#define SERVER_TOOLS_ON_REBOOT ServiceReboot() - -//Optional callable functions: - -//Returns the string version of the API -#define SERVER_TOOLS_API_VERSION ServiceAPIVersion() -//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise -//No function below this succeed if this is FALSE -#define SERVER_TOOLS_PRESENT RunningService() -//Gets the current version of the service running the server -#define SERVER_TOOLS_VERSION ServiceVersion() -//Forces a hard reboot of BYOND by ending the process -//unlike del(world) clients will try to reconnect -//If the service has not requested a shutdown, the world will reboot shortly after -#define SERVER_TOOLS_REBOOT_BYOND world.ServiceEndProcess() -/* - Gets the list of any testmerged github pull requests - - "[PR Number]" => list( - "title" -> PR title - "commit" -> Full hash of commit merged - "author" -> Github username of the author of the PR - ) -*/ -#define SERVER_TOOLS_PR_LIST GetTestMerges() -//Sends a message to connected game chats -#define SERVER_TOOLS_CHAT_BROADCAST(message) world.ChatBroadcast(message) -//Sends a message to connected admin chats -#define SERVER_TOOLS_RELAY_BROADCAST(message) world.AdminBroadcast(message) - -//IMPLEMENTATION - -#define REBOOT_MODE_NORMAL 0 -#define REBOOT_MODE_HARD 1 -#define REBOOT_MODE_SHUTDOWN 2 - -#define SERVICE_WORLD_PARAM "server_service" -#define SERVICE_VERSION_PARAM "server_service_version" -#define SERVICE_INSTANCE_PARAM "server_instance" -#define SERVICE_PR_TEST_JSON "prtestjob.json" -#define SERVICE_INTERFACE_DLL "TGDreamDaemonBridge.dll" -#define SERVICE_INTERFACE_FUNCTION "DDEntryPoint" - -#define SERVICE_CMD_HARD_REBOOT "hard_reboot" -#define SERVICE_CMD_GRACEFUL_SHUTDOWN "graceful_shutdown" -#define SERVICE_CMD_WORLD_ANNOUNCE "world_announce" -#define SERVICE_CMD_LIST_CUSTOM "list_custom_commands" -#define SERVICE_CMD_API_COMPATIBLE "api_compat" -#define SERVICE_CMD_PLAYER_COUNT "client_count" - -#define SERVICE_CMD_PARAM_KEY "serviceCommsKey" -#define SERVICE_CMD_PARAM_COMMAND "command" -#define SERVICE_CMD_PARAM_SENDER "sender" -#define SERVICE_CMD_PARAM_CUSTOM "custom" - -#define SERVICE_JSON_PARAM_HELPTEXT "help_text" -#define SERVICE_JSON_PARAM_ADMINONLY "admin_only" -#define SERVICE_JSON_PARAM_REQUIREDPARAMETERS "required_parameters" - -#define SERVICE_REQUEST_KILL_PROCESS "killme" -#define SERVICE_REQUEST_IRC_BROADCAST "irc" -#define SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE "send2irc" -#define SERVICE_REQUEST_WORLD_REBOOT "worldreboot" -#define SERVICE_REQUEST_API_VERSION "api_ver" - -#define SERVICE_RETURN_SUCCESS "SUCCESS" - -/* -The MIT License - -Copyright (c) 2017 Jordan Brown - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm new file mode 100644 index 0000000000..00cbae7629 --- /dev/null +++ b/code/__DEFINES/tgs.config.dm @@ -0,0 +1,19 @@ +#define TGS_EXTERNAL_CONFIGURATION +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) +#define TGS_READ_GLOBAL(Name) GLOB.##Name +#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value +#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "[html_encode(##message)]") +#define TGS_INFO_LOG(message) log_world("TGS: Info: [##message]") +#define TGS_ERROR_LOG(message) log_world("TGS: Error: [##message]") +#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_CLIENT_COUNT GLOB.clients.len +#define TGS_PROTECT_DATUM(Path)\ +##Path/can_vv_get(var_name){\ + return FALSE;\ +}\ +##Path/vv_edit_var(var_name, var_value){\ + return FALSE;\ +}\ +##Path/CanProcCall(procname){\ + return FALSE;\ +} diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm new file mode 100644 index 0000000000..651be685c5 --- /dev/null +++ b/code/__DEFINES/tgs.dm @@ -0,0 +1,202 @@ +//tgstation-server DMAPI + +//All functions and datums outside this document are subject to change with any version and should not be relied on + +//CONFIGURATION + +//create this define if you want to do configuration outside of this file +#ifndef TGS_EXTERNAL_CONFIGURATION + +//Comment this out once you've filled in the below +#error TGS API unconfigured + +//Required interfaces (fill in with your codebase equivalent): + +//create a global variable named `Name` and set it to `Value` +//These globals must not be modifiable from anywhere outside of the server tools +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) + +//Read the value in the global variable `Name` +#define TGS_READ_GLOBAL(Name) + +//Set the value in the global variable `Name` to `Value` +#define TGS_WRITE_GLOBAL(Name, Value) + +//Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game priveledge escalation +#define TGS_PROTECT_DATUM(Path) + +//display an announcement `message` from the server to all players +#define TGS_WORLD_ANNOUNCE(message) + +//Notify current in-game administrators of a string `event` +#define TGS_NOTIFY_ADMINS(event) + +//Write an info `message` to a server log +#define TGS_INFO_LOG(message) + +//Write an error `message` to a server log +#define TGS_ERROR_LOG(message) + +//Get the number of connected /clients +#define TGS_CLIENT_COUNT + +#endif + +//EVENT CODES + +//TODO + +//REQUIRED HOOKS + +//Call this somewhere in /world/New() that is always run +//event_handler: optional user defined event handler. The default behaviour is to broadcast the event in english to all connected admin channels +/world/proc/TgsNew(datum/tgs_event_handler/event_handler) + return + +//Call this when your initializations are complete and your game is ready to play before any player interactions happen +//This may use world.sleep_offline to make this happen so ensure no changes are made to it while this call is running +/world/proc/TgsInitializationComplete() + return + +//Put this somewhere in /world/Topic(T, Addr, Master, Keys) that is always run before T is modified +#define TGS_TOPIC var/tgs_topic_return = TgsTopic(T); if(tgs_topic_return) return tgs_topic_return + +//Call this at the beginning of world/Reboot(reason) +/world/proc/TgsReboot() + return + +//DATUM DEFINITIONS +//unless otherwise specified all datums defined here should be considered read-only, warranty void if written + +//represents git revision information about the current world build +/datum/tgs_revision_information + var/commit //full sha of compiled commit + var/origin_commit //full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch + +//represents a merge of a GitHub pull request +/datum/tgs_revision_information/test_merge + var/number //pull request number + var/title //pull request title + var/body //pull request body + var/author //pull request github author + var/url //link to pull request html + var/pull_request_commit //commit of the pull request when it was merged + var/time_merged //timestamp of when the merge commit for the pull request was created + var/comment //optional comment left by the one who initiated the test merge + +//represents a connected chat channel +/datum/tgs_chat_channel + var/id //internal channel representation + var/friendly_name //user friendly channel name + var/server_name //server name the channel resides on + var/provider_name //chat provider for the channel + var/is_admin_channel //if the server operator has marked this channel for game admins only + var/is_private_channel //if this is a private chat channel + +//represents a chat user +/datum/tgs_chat_user + var/id //Internal user representation + var/friendly_name //The user's public name + var/mention //The text to use to ping this user in a message + var/datum/tgs_chat_channel/channel //The /datum/tgs_chat_channel this user was from + +//user definable callback for handling events +/datum/tgs_event_handler/proc/HandleEvent(event_code) + return + +//user definable chat command +/datum/tgs_chat_command + var/name = "" //the string to trigger this command on a chat bot. e.g. TGS3_BOT: do_this_command + var/help_text = "" //help text for this command + var/admin_only = FALSE //set to TRUE if this command should only be usable by registered chat admins + +//override to implement command +//sender: The tgs_chat_user who send to command +//params: The trimmed string following the command name +//The return value will be stringified and sent to the appropriate chat +/datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) + CRASH("[type] has no implementation for Run()") + +//FUNCTIONS + +//Returns the respective string version of the API +/world/proc/TgsMaximumAPIVersion() + return + +/world/proc/TgsMinimumAPIVersion() + return + +//Gets the current version of the server tools running the server +/world/proc/TgsVersion() + return + +//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise +//No function below this succeeds if it returns FALSE +/world/proc/TgsAvailable() + return + +/world/proc/TgsInstanceName() + return + +//Get the current `/datum/tgs_revision_information` +/world/proc/TgsRevision() + return + +//Gets a list of active `/datum/tgs_revision_information/test_merge`s +/world/proc/TgsTestMerges() + return + +//Forces a hard reboot of BYOND by ending the process +//unlike del(world) clients will try to reconnect +//If the service has not requested a shutdown, the next server will take over +/world/proc/TgsEndProcess() + return + +//Gets a list of connected tgs_chat_channel +/world/proc/TgsChatChannelInfo() + return + +//Sends a message to connected game chats +//message: The message to send +//channels: optional channels to limit the broadcast to +/world/proc/TgsChatBroadcast(message, list/channels) + return + +//Send a message to non-admin connected chats +//message: The message to send +//admin_only: If TRUE, message will instead be sent to only admin connected chats +/world/proc/TgsTargetedChatBroadcast(message, admin_only) + return + +//Send a private message to a specific user +//message: The message to send +//user: The /datum/tgs_chat_user to send to +/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) + return + +/* +The MIT License + +Copyright (c) 2017 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 94606273be..384e65bdcb 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -68,6 +68,7 @@ #define MAGIC_TRAIT "magic" #define TRAUMA_TRAIT "trauma" #define SPECIES_TRAIT "species" +#define ORGAN_TRAIT "organ" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention // unique trait sources, still defines diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 6585aebd36..48e2baac6e 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -128,6 +128,9 @@ /proc/log_qdel(text) WRITE_LOG(GLOB.world_qdel_log, "QDEL: [text]") +/proc/log_query_debug(text) + WRITE_LOG(GLOB.query_debug_log, "SQL: [text]") + /* Log to both DD and the logfile. */ /proc/log_world(text) WRITE_LOG(GLOB.world_runtime_log, text) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index a840d6144a..2db7b8bc78 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -698,7 +698,7 @@ GLOBAL_LIST_INIT(binary, list("0","1")) var/macro = lowertext(copytext(string, next_backslash + 1, next_space)) var/rest = next_backslash > leng ? "" : copytext(string, next_space + 1) - //See http://www.byond.com/docs/ref/info.html#/DM/text/macros + //See https://secure.byond.com/docs/ref/info.html#/DM/text/macros switch(macro) //prefixes/agnostic if("the") @@ -766,4 +766,3 @@ GLOBAL_LIST_INIT(binary, list("0","1")) return "twelfth" else return "[number]\th" - \ No newline at end of file diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 8e2c03238d..67bbe24e38 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -30,7 +30,7 @@ #define MIN_COMPILER_VERSION 512 #if DM_VERSION < MIN_COMPILER_VERSION //Don't forget to update this part -#error Your version of BYOND is too out-of-date to compile this project. Go to byond.com/download and update. +#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. #error You need version 512 or higher #endif diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index f580eab3d5..7c5715e1bb 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -1,6 +1,6 @@ GLOBAL_REAL(config, /datum/controller/configuration) -GLOBAL_DATUM_INIT(revdata, /datum/getrev, new) +GLOBAL_DATUM(revdata, /datum/getrev) GLOBAL_VAR(host) GLOBAL_VAR(station_name) diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index ff397785d8..545ffbcbef 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -20,6 +20,8 @@ GLOBAL_VAR(world_pda_log) GLOBAL_PROTECT(world_pda_log) GLOBAL_VAR(world_manifest_log) GLOBAL_PROTECT(world_manifest_log) +GLOBAL_VAR(query_debug_log) +GLOBAL_PROTECT(query_debug_log) GLOBAL_LIST_EMPTY(bombers) GLOBAL_PROTECT(bombers) diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index bc3df4de83..8592383a4f 100755 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -167,6 +167,8 @@ /datum/hud/proc/update_parallax() var/client/C = mymob.client var/turf/posobj = get_turf(C.eye) + if(!posobj) + return var/area/areaobj = posobj.loc // Update the movement direction of the parallax if necessary (for shuttles) diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 6b9a02c009..84add465c6 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -12,7 +12,7 @@ /obj/screen/plane_master/proc/Hide(override) alpha = override || hide_alpha -//Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928 +//Why do plane masters need a backdrop sometimes? Read https://secure.byond.com/forum/?post=2141928 //Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. /obj/screen/plane_master/proc/backdrop(mob/mymob) diff --git a/code/controllers/configuration/entries/dbconfig.dm b/code/controllers/configuration/entries/dbconfig.dm index c9dbdb4f54..1eb1186a8b 100644 --- a/code/controllers/configuration/entries/dbconfig.dm +++ b/code/controllers/configuration/entries/dbconfig.dm @@ -4,7 +4,7 @@ /datum/config_entry/string/address config_entry_value = "localhost" protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN - + /datum/config_entry/number/port config_entry_value = 3306 min_val = 0 @@ -24,3 +24,8 @@ /datum/config_entry/string/feedback_tableprefix protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN + +/datum/config_entry/number/query_debug_log_timeout + config_entry_value = 70 + min_val = 1 + protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 2b1e9bcda9..0cc0c622d7 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -199,11 +199,14 @@ GLOBAL_REAL(Master, /datum/controller/master) = new // Sort subsystems by display setting for easy access. sortTim(subsystems, /proc/cmp_subsystem_display) // Set world options. - if(sleep_offline_after_initializations) - world.sleep_offline = TRUE world.fps = CONFIG_GET(number/fps) var/initialized_tod = REALTIMEOFDAY + + world.TgsInitializationComplete() + if(sleep_offline_after_initializations) + world.sleep_offline = TRUE sleep(1) + if(sleep_offline_after_initializations && CONFIG_GET(flag/resume_after_initializations)) world.sleep_offline = FALSE initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 0609b78d99..fd780e030c 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -231,10 +231,24 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table to_chat(usr, "A SQL error occurred during this operation, check the server logs.") /datum/DBQuery/proc/Execute(sql_query = sql, cursor_handler = default_cursor, log_error = TRUE) + var/start_time + var/timeout = CONFIG_GET(number/query_debug_log_timeout) + if(timeout) + start_time = REALTIMEOFDAY Close() . = _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null) if(!. && log_error) log_sql("[ErrorMsg()] | Query used: [sql]") + if(timeout) + if((REALTIMEOFDAY - start_time) > timeout) + log_query_debug("Query execution started at [start_time]") + log_query_debug("Query execution ended at [REALTIMEOFDAY]") + log_query_debug("Possible slow query timeout detected.") + log_query_debug("Query used: [sql]") + slow_query_check() + +/datum/DBQuery/proc/slow_query_check() + message_admins("HEY! A database query may have timed out. Did the server just hang? \[YES\]|\[NO\]") /datum/DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index dd68443bd7..dd45f9146f 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -55,8 +55,8 @@ SUBSYSTEM_DEF(server_maint) co.ehjax_send(data = "roundrestart") if(server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite C << link("byond://[server]") - if(SERVER_TOOLS_PRESENT) - SSblackbox.record_feedback("text", "server_tools", 1, SERVER_TOOLS_VERSION) - SSblackbox.record_feedback("text", "server_tools_api", 1, SERVER_TOOLS_API_VERSION) + var/tgsversion = world.TgsVersion() + if(tgsversion) + SSblackbox.record_feedback("text", "server_tools", 1, tgsversion) #undef PING_BUFFER_TIME diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 270970c61b..0471afceea 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -158,7 +158,7 @@ SUBSYSTEM_DEF(ticker) window_flash(C, ignorepref = TRUE) //let them know lobby has opened up. to_chat(world, "Welcome to [station_name()]!") if(CONFIG_GET(flag/irc_announce_new_game)) - SERVER_TOOLS_CHAT_BROADCAST("New round starting on [SSmapping.config.map_name]!") + world.TgsTargetedChatBroadcast("New round starting on [SSmapping.config.map_name]!", FALSE) current_state = GAME_STATE_PREGAME //Everyone who wants to be an observer is now spawned create_observers() diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index 821770e9c5..a8adbfbce8 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -160,7 +160,7 @@ to_chat(owner, "You feel really lonely...") else to_chat(owner, "You're going mad with loneliness!") - owner.hallucination += 20 + owner.hallucination += 30 if(5) if(!high_stress) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index c6c0f2353a..59953a4ce1 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1,3 +1,6 @@ +/datum/proc/CanProcCall(procname) + return TRUE + /datum/proc/can_vv_get(var_name) return TRUE diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index a9fa7e4e10..b459b31fcb 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -5,7 +5,7 @@ var/date /datum/getrev/New() - testmerge = SERVER_TOOLS_PR_LIST + testmerge = world.TgsTestMerges() log_world("Running /tg/ revision:") var/list/logs = world.file2list(".git/logs/HEAD") if(logs) @@ -21,7 +21,8 @@ log_world(commit) for(var/line in testmerge) if(line) - var/tmcommit = testmerge[line]["commit"] + var/datum/tgs_revision_information/test_merge/tm = line + var/tmcommit = tm.commit log_world("Test merge active of PR #[line] commit [tmcommit]") SSblackbox.record_feedback("nested tally", "testmerged_prs", 1, list("[line]", "[tmcommit]")) if(originmastercommit) @@ -34,11 +35,12 @@ return "" . = header ? "The following pull requests are currently test merged:
" : "" for(var/line in testmerge) - var/cm = testmerge[line]["commit"] - var/details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["author"]) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 11))) + var/datum/tgs_revision_information/test_merge/tm = line + var/cm = tm.pull_request_commit + var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 11))) if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder)) continue - . += "#[line][details]
" + . += "#[tm.number][details]
" /client/verb/showrevinfo() set category = "OOC" @@ -58,9 +60,8 @@ else to_chat(src, "Master revision unknown") to_chat(src, "Revision: [GLOB.revdata.commit]") - if(SERVER_TOOLS_PRESENT) - to_chat(src, "Server tools version: [SERVER_TOOLS_VERSION]") - to_chat(src, "Server tools API version: [SERVER_TOOLS_API_VERSION]") + if(world.TgsAvailable()) + to_chat(src, "Server tools version: [world.TgsVersion()]") to_chat(src, "Current Informational Settings:") to_chat(src, "Protect Authority Roles From Traitor: [CONFIG_GET(flag/protect_roles_from_antagonist)]") to_chat(src, "Protect Assistant Role From Traitor: [CONFIG_GET(flag/protect_assistant_from_antagonist)]") diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 0dc0c1a212..7752cc31c3 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -230,16 +230,9 @@ return if(prob(2)) //we'll all be mad soon enough madness() - -/datum/quirk/insanity/proc/madness(mad_fools) - set waitfor = FALSE - if(!mad_fools) - mad_fools = prob(20) - if(mad_fools) - var/hallucination_type = pick(subtypesof(/datum/hallucination/rds)) - new hallucination_type (quirk_holder, FALSE) - else - quirk_holder.hallucination += rand(10, 50) + +/datum/quirk/insanity/proc/madness() + quirk_holder.hallucination += rand(10, 25) /datum/quirk/insanity/post_add() //I don't /think/ we'll need this but for newbies who think "roleplay as insane" = "license to kill" it's probably a good thing to have if(!quirk_holder.mind || quirk_holder.mind.special_role) diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index ec00351b52..9cbccb8fe9 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -120,8 +120,12 @@ require_comms_key = TRUE /datum/world_topic/namecheck/Run(list/input) - var/datum/server_tools_command/namecheck/NC = new - return NC.Run(input["sender"], input["namecheck"]) + //Oh this is a hack, someone refactor the functionality out of the chat command PLS + var/datum/tgs_chat_command/namecheck/NC = new + var/datum/tgs_chat_user/user = new + user.friendly_name = input["sender"] + user.mention = user.friendly_name + return NC.Run(user, input["namecheck"]) /datum/world_topic/adminwho keyword = "adminwho" diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 95a876a68a..355dd869b1 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -211,7 +211,7 @@ Credit where due: to_chat(L, "There is a paper in your backpack! It'll tell you if anything's changed, as well as what to expect.") to_chat(L, "[slot] is a clockwork slab, a multipurpose tool used to construct machines and invoke ancient words of power. If this is your first time \ as a servant, you can find a concise tutorial in the Recollection category of its interface.") - to_chat(L, "If you want more information, you can find a wiki link here! https://tgstation13.org/wiki/Clockwork_Cult") + to_chat(L, "If you want more information, you can read the wiki page to learn more.") return TRUE return FALSE diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 5e5b4fc7b7..7559e21e21 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -712,6 +712,8 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/min_lings = 3 //Minimum amount of lings for this team objective to be possible var/escape_objective_compatible = FALSE +/datum/objective/changeling_team_objective/proc/prepare() + return FALSE //Impersonate department //Picks as many people as it can from a department (Security,Engineer,Medical,Science) @@ -724,6 +726,19 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/department_string = "" +/datum/objective/changeling_team_objective/impersonate_department/prepare() + var/result = FALSE + if(command_staff_only) + result = get_heads() + else + result = get_department_staff() + if(result) + update_explanation_text() + return TRUE + else + return FALSE + + /datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff() department_minds = list() department_real_names = list() @@ -756,9 +771,8 @@ GLOBAL_LIST_EMPTY(possible_items_special) if(!department_minds.len) log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally") - owner.objectives -= src - qdel(src) - return + return FALSE + return TRUE /datum/objective/changeling_team_objective/impersonate_department/proc/get_heads() @@ -785,19 +799,8 @@ GLOBAL_LIST_EMPTY(possible_items_special) if(!department_minds.len) log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally") - owner.objectives -= src - qdel(src) - return - - -/datum/objective/changeling_team_objective/impersonate_department/New(var/text) - ..() - if(command_staff_only) - get_heads() - else - get_department_staff() - - update_explanation_text() + return FALSE + return TRUE /datum/objective/changeling_team_objective/impersonate_department/update_explanation_text() @@ -862,9 +865,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) return TRUE return FALSE - - - //A subtype of impersonate_department //This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD) //and tasks the lings with killing and replacing them diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 64fda883b9..d42c546990 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -41,7 +41,7 @@ name = "a hand teleporter." targetitem = /obj/item/hand_tele difficulty = 5 - excludefromjob = list("Captain") + excludefromjob = list("Captain", "Research Director") /datum/objective_item/steal/jetpack name = "the Captain's jetpack." diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index ac211efe58..17bfe5e02c 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -399,7 +399,7 @@ QDEL_IN(mob_occupant, 40) /obj/machinery/clonepod/relaymove(mob/user) - container_resist() + container_resist(user) /obj/machinery/clonepod/container_resist(mob/living/user) if(user.stat == CONSCIOUS) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 880f0fe8c8..76a0c39021 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -323,12 +323,12 @@ return else return - else if(user.hallucinating() && ishuman(user) && prob(4) && !operating) + else if(user.hallucinating() && ishuman(user) && prob(1) && !operating) var/mob/living/carbon/human/H = user if(H.gloves) var/obj/item/clothing/gloves/G = H.gloves if(G.siemens_coefficient)//not insulated - hallucinate_shock(H) + new /datum/hallucination/shock(H) return if (cyclelinkedairlock) if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user)) @@ -338,34 +338,6 @@ addtimer(CALLBACK(cyclelinkedairlock, .proc/close), 2) ..() -/obj/machinery/door/airlock/proc/hallucinate_shock(mob/living/user) - var/image/shock_image = image(user, user, dir = user.dir) - var/image/electrocution_skeleton_anim = image('icons/mob/human.dmi', user, icon_state = "electrocuted_base", layer=ABOVE_MOB_LAYER) - shock_image.color = rgb(0,0,0) - shock_image.override = TRUE - electrocution_skeleton_anim.appearance_flags |= RESET_COLOR|KEEP_APART - - to_chat(user, "You feel a powerful shock course through your body!") - if(user.client) - user.client.images |= shock_image - user.client.images |= electrocution_skeleton_anim - addtimer(CALLBACK(src, .proc/reset_hallucinate_shock_animation, user, shock_image, electrocution_skeleton_anim), 40) - user.playsound_local(get_turf(src), "sparks", 100, 1) - user.staminaloss += 50 - user.Stun(40) - user.jitteriness += 1000 - user.do_jitter_animation(user.jitteriness) - addtimer(CALLBACK(src, .proc/hallucinate_shock_drop, user), 20) - -/obj/machinery/door/airlock/proc/reset_hallucinate_shock_animation(mob/living/user, shock_image, electrocution_skeleton_anim) - if(user.client) - user.client.images.Remove(shock_image) - user.client.images.Remove(electrocution_skeleton_anim) - -/obj/machinery/door/airlock/proc/hallucinate_shock_drop(mob/living/user) - user.jitteriness = max(user.jitteriness - 990, 10) //Still jittery, but vastly less - user.Knockdown(60) - /obj/machinery/door/airlock/proc/isElectrified() if(src.secondsElectrified != NOT_ELECTRIFIED) return TRUE diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 8d90e1bc56..8053c00daf 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -154,6 +154,10 @@ name = "Labor Camp teleporter console (Computer Board)" build_path = /obj/machinery/computer/gulag_teleporter_computer +/obj/item/circuitboard/computer/rdconsole/production + name = "R&D Console Production Only (Computer Board)" + build_path = /obj/machinery/computer/rdconsole/production + /obj/item/circuitboard/computer/rdconsole name = "R&D Console (Computer Board)" build_path = /obj/machinery/computer/rdconsole/core diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index c263a7652c..c4aa6f52cc 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -841,6 +841,13 @@ /obj/item/stack/sheet/glass = 1, /obj/item/vending_refill/donksoft = 3) +/obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor + name = "Syndicate Donksoft Toy Vendor (Machine Board)" + build_path = /obj/machinery/vending/toyliberationstation + req_components = list( + /obj/item/stack/sheet/glass = 1, + /obj/item/vending_refill/donksoft = 3) + /obj/item/circuitboard/machine/dish_drive name = "Dish Drive (Machine Board)" build_path = /obj/machinery/dish_drive @@ -866,3 +873,17 @@ return transmit = !transmit to_chat(user, "You [transmit ? "enable" : "disable"] the board's automatic disposal transmission.") + +/obj/item/circuitboard/machine/stacking_unit_console + name = "Stacking Machine Console (Machine Board)" + build_path = /obj/machinery/mineral/stacking_unit_console + req_components = list( + /obj/item/stack/sheet/glass = 2, + /obj/item/stack/cable_coil = 5) + +/obj/item/circuitboard/machine/stacking_machine + name = "Stacking Machine (Machine Board)" + build_path = /obj/machinery/mineral/stacking_machine + req_components = list( + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/matter_bin = 2) diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 13fef58927..3f97321710 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -208,12 +208,13 @@ if(stored_swap == user) to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn...") return - var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new - swapper.cast(user, stored_swap, TRUE) + if(swapper.cast(list(stored_swap), user, TRUE, TRUE)) + to_chat(user,"You're suddenly somewhere else... and someone else?!") + to_chat(stored_swap,"Suddenly you're staring at [src] again... where are you, who are you?!") + else + user.visible_message("[src] fizzles slightly as it stops glowing!") //if the mind_transfer failed to transfer mobs, likely due to the target being catatonic. - to_chat(stored_swap,"You're suddenly somewhere else... and someone else?!") - to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?!") stored_swap = null /obj/item/book/granter/spell/forcewall diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index b3af8b9b33..df3d5f799b 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -352,6 +352,11 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ if(!iscultist(user)) to_chat(user, "Only one with forbidden knowledge could hope to work this metal...") return + var/turf/T = get_turf(user) //we may have moved. adjust as needed... + var/area/A = get_area(user) + if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !A.blob_allowed)) + to_chat(user, "The veil is not weak enough here.") + return FALSE return ..() /obj/item/stack/sheet/runed_metal/Initialize(mapload, new_amount, merge = TRUE) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 9a2e62c9f2..d2665be1b0 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -511,6 +511,8 @@ new /obj/item/storage/box/syringes(src) new /obj/item/ammo_box/foambox/riot(src) new /obj/item/grenade/chem_grenade/bioterrorfoam(src) + if(prob(5)) + new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src) /obj/item/storage/backpack/duffelbag/syndie/c4/PopulateContents() for(var/i in 1 to 10) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 60ebab0ad6..e47ceee7ad 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -966,3 +966,45 @@ obj/item/storage/box/clown /obj/item/storage/box/holy_grenades/PopulateContents() for(var/i in 1 to 7) new/obj/item/grenade/chem_grenade/holy(src) + +/obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible + name = "box of stock parts" + desc = "Contains a variety of basic stock parts." + +/obj/item/storage/box/stockparts/basic/PopulateContents() + new /obj/item/stock_parts/capacitor(src) + new /obj/item/stock_parts/capacitor(src) + new /obj/item/stock_parts/capacitor(src) + new /obj/item/stock_parts/scanning_module(src) + new /obj/item/stock_parts/scanning_module(src) + new /obj/item/stock_parts/scanning_module(src) + new /obj/item/stock_parts/manipulator(src) + new /obj/item/stock_parts/manipulator(src) + new /obj/item/stock_parts/manipulator(src) + new /obj/item/stock_parts/micro_laser(src) + new /obj/item/stock_parts/micro_laser(src) + new /obj/item/stock_parts/micro_laser(src) + new /obj/item/stock_parts/matter_bin(src) + new /obj/item/stock_parts/matter_bin(src) + new /obj/item/stock_parts/matter_bin(src) + +/obj/item/storage/box/stockparts/deluxe + name = "box of deluxe stock parts" + desc = "Contains a variety of deluxe stock parts." + +/obj/item/storage/box/stockparts/deluxe/PopulateContents() + new /obj/item/stock_parts/capacitor/quadratic(src) + new /obj/item/stock_parts/capacitor/quadratic(src) + new /obj/item/stock_parts/capacitor/quadratic(src) + new /obj/item/stock_parts/scanning_module/triphasic(src) + new /obj/item/stock_parts/scanning_module/triphasic(src) + new /obj/item/stock_parts/scanning_module/triphasic(src) + new /obj/item/stock_parts/manipulator/femto(src) + new /obj/item/stock_parts/manipulator/femto(src) + new /obj/item/stock_parts/manipulator/femto(src) + new /obj/item/stock_parts/micro_laser/quadultra(src) + new /obj/item/stock_parts/micro_laser/quadultra(src) + new /obj/item/stock_parts/micro_laser/quadultra(src) + new /obj/item/stock_parts/matter_bin/bluespace(src) + new /obj/item/stock_parts/matter_bin/bluespace(src) + new /obj/item/stock_parts/matter_bin/bluespace(src) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 05d6338235..60675d031f 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -280,7 +280,7 @@ new /obj/item/radio/headset/chameleon(src) new /obj/item/stamp/chameleon(src) new /obj/item/pda/chameleon(src) - new /obj/item/gun/energy/laser/chameleon(src) + //new /obj/item/gun/energy/laser/chameleon(src) //crashes the server right now. please fix it! //5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. //Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index a9f9d4ce06..4b14388336 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -38,16 +38,20 @@ /obj/item/storage/wallet/Exited(atom/movable/AM) . = ..() - refreshID() + // The loc has not actually changed yet when this proc is called, so call + // refreshID and have it ignore the outgoing atom. + refreshID(AM) -/obj/item/storage/wallet/proc/refreshID() - if(!(front_id in src)) +/obj/item/storage/wallet/proc/refreshID(atom/movable/removed) + LAZYCLEARLIST(combined_access) + if(!(front_id in src) || front_id == removed) front_id = null for(var/obj/item/card/id/I in contents) - LAZYINITLIST(combined_access) - LAZYCLEARLIST(combined_access) + if(I == removed) + continue if(!front_id) front_id = I + LAZYINITLIST(combined_access) combined_access |= I.access update_icon() diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index f4a1f107fe..9e94b0372c 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -236,7 +236,7 @@ /obj/item/twohanded/fireaxe/Initialize() . = ..() - AddComponent(/datum/component/butchering, 100, 80, hitsound) //axes are not known for being precision butchering tools + AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools /obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "fireaxe[wielded]" diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 95deb52eb4..2302a6b4d0 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -310,7 +310,7 @@ message_cooldown = world.time + 50 to_chat(user, "[src]'s door won't budge!") return - container_resist() + container_resist(user) /obj/structure/closet/attack_hand(mob/user) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 2889a10e1d..63d700d3ce 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -148,3 +148,32 @@ name = "science crate" desc = "A science crate." icon_state = "scicrate" + +/obj/structure/closet/crate/solarpanel_small + name = "budget solar panel crate" + icon_state = "engi_e_crate" + +/obj/structure/closet/crate/solarpanel_small/PopulateContents() + ..() + for(var/i in 1 to 13) + new /obj/item/solar_assembly(src) + new /obj/item/circuitboard/computer/solar_control(src) + new /obj/item/paper/guides/jobs/engi/solars(src) + new /obj/item/electronics/tracker(src) + +/obj/structure/closet/crate/goldcrate + name = "gold crate" + +/obj/structure/closet/crate/goldcrate/PopulateContents() + ..() + for(var/i in 1 to 3) + new /obj/item/stack/sheet/mineral/gold(src, 1, FALSE) + new /obj/item/storage/belt/champion(src) + +/obj/structure/closet/crate/silvercrate + name = "silver crate" + +/obj/structure/closet/crate/silvercrate/PopulateContents() + ..() + for(var/i in 1 to 5) + new /obj/item/coin/silver(src) diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 78fe2b1bde..a51989d230 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -117,9 +117,8 @@ /turf/open/floor/engine/cult name = "engraved floor" - desc = "The air hangs heavy over this sinister flooring." + desc = "The air smells strangely over this sinister flooring." icon_state = "plating" - CanAtmosPass = ATMOS_PASS_NO floor_tile = null var/obj/effect/clockwork/overlay/floor/bloodcult/realappearance diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index c6d2f66900..dcfc1d41f6 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -343,7 +343,7 @@ for(var/V in contents) var/atom/A = V - if(A.level >= affecting_level) + if(!QDELETED(A) && A.level >= affecting_level) if(ismovableatom(A)) var/atom/movable/AM = A if(!AM.ex_check(explosion_id)) diff --git a/code/game/world.dm b/code/game/world.dm index cc4246a7c8..d121f7e411 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -17,6 +17,10 @@ GLOBAL_PROTECT(security_mode) make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) + TgsNew() + + GLOB.revdata = new + config.Load() //SetupLogs depends on the RoundID, so lets check @@ -25,8 +29,6 @@ GLOBAL_PROTECT(security_mode) SSdbcore.SetRoundID() SetupLogs() - SERVER_TOOLS_ON_NEW - load_admins() LoadVerbs(/datum/verbs/menu) if(CONFIG_GET(flag/usewhitelist)) @@ -93,6 +95,7 @@ GLOBAL_PROTECT(security_mode) GLOB.sql_error_log = "[GLOB.log_directory]/sql.log" GLOB.world_qdel_log = "[GLOB.log_directory]/qdel.log" GLOB.world_runtime_log = "[GLOB.log_directory]/runtime.log" + GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log" #ifdef UNIT_TESTS GLOB.test_log = file("[GLOB.log_directory]/tests.log") @@ -129,7 +132,7 @@ GLOBAL_PROTECT(security_mode) warning("/tg/station 13 uses many file operations, a few shell()s, and some external call()s. Trusted mode is recommended. You can download our source code for your own browsing and compilation at https://github.com/tgstation/tgstation") /world/Topic(T, addr, master, key) - SERVER_TOOLS_ON_TOPIC //redirect to server tools if necessary + TGS_TOPIC //redirect to server tools if necessary var/static/list/topic_handlers = TopicHandlers() @@ -185,7 +188,7 @@ GLOBAL_PROTECT(security_mode) qdel(src) //shut it down /world/Reboot(reason = 0, fast_track = FALSE) - SERVER_TOOLS_ON_REBOOT + TgsReboot() if (reason || fast_track) //special reboot, do none of the normal stuff if (usr) log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") @@ -199,7 +202,7 @@ GLOBAL_PROTECT(security_mode) FinishTestRun() return - if(SERVER_TOOLS_PRESENT) + if(TgsAvailable()) var/do_hard_reboot // check the hard reboot counter var/ruhr = CONFIG_GET(number/rounds_until_hard_restart) @@ -218,7 +221,7 @@ GLOBAL_PROTECT(security_mode) if(do_hard_reboot) log_world("World hard rebooted at [time_stamp()]") shutdown_logging() // See comment below. - SERVER_TOOLS_REBOOT_BYOND + TgsEndProcess() log_world("World rebooted at [time_stamp()]") shutdown_logging() // Past this point, no logging procs can be used, at risk of data loss. diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 49c7aeffb6..097076fc74 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -39,7 +39,7 @@ return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") if (CONFIG_GET(flag/panic_bunker) && SSdbcore.Connect()) log_access("Failed Login: [key] - Guests not allowed during panic bunker") - return list("reason"="guest", "desc"="\nReason: You must first join the Discord to verify your account before joining this server. Please ping an admin once you've joined and read the rules. https://discord.gg/E6SQuhz") + return list("reason"="guest", "desc"="\nReason: You must first sign into your BYOND account or join the Discord to verify your account before joining this server. Please ping an admin once you've joined and read the rules. https://discord.gg/E6SQuhz") //Population Cap Checking var/extreme_popcap = CONFIG_GET(number/extreme_popcap) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 577cca303b..d63b36e6e7 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -434,7 +434,7 @@ return var/list/options = list("Regular Restart", "Hard Restart (No Delay/Feeback Reason)", "Hardest Restart (No actions, just reboot)") - if(SERVER_TOOLS_PRESENT) + if(world.TgsAvailable()) options += "Server Restart (Kill and restart DD)"; var/rebootconfirm @@ -459,7 +459,7 @@ world.Reboot(fast_track = TRUE) if("Server Restart (Kill and restart DD)") to_chat(world, "Server restart - [init_by]") - SERVER_TOOLS_REBOOT_BYOND + world.TgsEndProcess() /datum/admins/proc/end_round() set category = "Server" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index b309c5bea6..77f48d18f4 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -93,6 +93,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/forceEvent, /client/proc/admin_change_sec_level, /client/proc/toggle_nuke, + /client/proc/run_weather, /client/proc/mass_zombie_infection, /client/proc/mass_zombie_cure, /client/proc/polymorph_all, diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm index 02402956d9..dbeb6fce7f 100644 --- a/code/modules/admin/chat_commands.dm +++ b/code/modules/admin/chat_commands.dm @@ -1,12 +1,12 @@ #define IRC_STATUS_THROTTLE 5 -/datum/server_tools_command/ircstatus +/datum/tgs_chat_command/ircstatus name = "status" help_text = "Gets the admincount, playercount, gamemode, and true game mode of the server" admin_only = TRUE - var/static/last_irc_status = 0 + var/last_irc_status = 0 -/datum/server_tools_command/ircstatus/Run(sender, params) +/datum/tgs_chat_command/ircstatus/Run(datum/tgs_chat_user/sender, params) var/rtod = REALTIMEOFDAY if(rtod - last_irc_status < IRC_STATUS_THROTTLE) return @@ -17,12 +17,12 @@ status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode ? SSticker.mode.name : "Not started"]." return status -/datum/server_tools_command/irccheck +/datum/tgs_chat_command/irccheck name = "check" help_text = "Gets the playercount, gamemode, and address of the server" - var/static/last_irc_check = 0 + var/last_irc_check = 0 -/datum/server_tools_command/irccheck/Run(sender, params) +/datum/tgs_chat_command/irccheck/Run(datum/tgs_chat_user/sender, params) var/rtod = REALTIMEOFDAY if(rtod - last_irc_check < IRC_STATUS_THROTTLE) return @@ -30,14 +30,15 @@ var/server = CONFIG_GET(string/server) return "[GLOB.round_id ? "Round #[GLOB.round_id]: " : ""][GLOB.clients.len] players on [SSmapping.config.map_name]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [server ? server : "[world.internet_address]:[world.port]"]" //CIT CHANGE - obfuscates the current gamemode from players -/datum/server_tools_command/ahelp +/datum/tgs_chat_command/ahelp name = "ahelp" help_text = " |list>>" - required_parameters = 2 admin_only = TRUE -/datum/server_tools_command/ahelp/Run(sender, params) +/datum/tgs_chat_command/ahelp/Run(datum/tgs_chat_user/sender, params) var/list/all_params = splittext(params, " ") + if(all_params.len < 2) + return "Insufficient parameters" var/target = all_params[1] all_params.Cut(1, 2) var/id = text2num(target) @@ -47,52 +48,54 @@ target = AH.initiator_ckey else return "Ticket #[id] not found!" - var/res = IrcPm(target, all_params.Join(" "), sender) + var/res = IrcPm(target, all_params.Join(" "), sender.friendly_name) if(res != "Message Successful") return res -/datum/server_tools_command/namecheck +/datum/tgs_chat_command/namecheck name = "namecheck" help_text = "Returns info on the specified target" - required_parameters = 1 admin_only = TRUE -/datum/server_tools_command/namecheck/Run(sender, params) - log_admin("Chat Name Check: [sender] on [params]") - message_admins("Name checking [params] from [sender]") +/datum/tgs_chat_command/namecheck/Run(datum/tgs_chat_user/sender, params) + params = trim(params) + if(!params) + return "Insufficient parameters" + log_admin("Chat Name Check: [sender.friendly_name] on [params]") + message_admins("Name checking [params] from [sender.friendly_name]") return keywords_lookup(params, 1) -/datum/server_tools_command/adminwho +/datum/tgs_chat_command/adminwho name = "adminwho" help_text = "Lists administrators currently on the server" admin_only = TRUE -/datum/server_tools_command/adminwho/Run(sender, params) +/datum/tgs_chat_command/adminwho/Run(datum/tgs_chat_user/sender, params) return ircadminwho() GLOBAL_LIST(round_end_notifiees) -/datum/server_tools_command/notify +/datum/tgs_chat_command/notify name = "notify" help_text = "Pings the invoker when the round ends" admin_only = TRUE -/datum/server_tools_command/notify/Run(sender, params) +/datum/tgs_chat_command/notify/Run(datum/tgs_chat_user/sender, params) if(!SSticker.IsRoundInProgress() && SSticker.HasRoundStarted()) - return "[sender], the round has already ended!" + return "[sender.mention], the round has already ended!" LAZYINITLIST(GLOB.round_end_notifiees) GLOB.round_end_notifiees[sender] = TRUE - return "I will notify [sender] when the round ends." + return "I will notify [sender.mention] when the round ends." -/datum/server_tools_command/sdql +/datum/tgs_chat_command/sdql name = "sdql" help_text = "Runs an SDQL query" admin_only = TRUE -/datum/server_tools_command/sdql/Run(sender, params) +/datum/tgs_chat_command/sdql/Run(datum/tgs_chat_user/sender, params) if(GLOB.AdminProcCaller) return "Unable to run query, another admin proc call is in progress. Try again later." - GLOB.AdminProcCaller = "CHAT_[sender]" //_ won't show up in ckeys so it'll never match with a real admin + GLOB.AdminProcCaller = "CHAT_[sender.friendly_name]" //_ won't show up in ckeys so it'll never match with a real admin var/list/results = world.SDQL2_query(params, GLOB.AdminProcCaller, GLOB.AdminProcCaller) GLOB.AdminProcCaller = null if(!results) @@ -100,13 +103,13 @@ GLOBAL_LIST(round_end_notifiees) var/list/text_res = results.Copy(1, 3) var/list/refs = results.len > 3 ? results.Copy(4) : null . = "[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]" - -/datum/server_tools_command/reload_admins + +/datum/tgs_chat_command/reload_admins name = "reload_admins" help_text = "Forces the server to reload admins." admin_only = TRUE -/datum/server_tools_command/reload_admins/Run(sender, params) +/datum/tgs_chat_command/reload_admins/Run(datum/tgs_chat_user/sender, params) load_admins() - log_admin("[sender] reloaded admins via chat command.") + log_admin("[sender.friendly_name] reloaded admins via chat command.") return "Admins reloaded." diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index b577a84a1d..73b8fa61f0 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -22,6 +22,17 @@ H.facial_hair_color = H.hair_color H.eye_color = random_eye_color() H.dna.blood_type = random_blood_type() + + // Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant. + H.dna.features["mcolor"] = random_short_color() + H.dna.features["tail_lizard"] = pick(GLOB.tails_list_lizard) + H.dna.features["snout"] = pick(GLOB.snouts_list) + H.dna.features["horns"] = pick(GLOB.horns_list) + H.dna.features["frills"] = pick(GLOB.frills_list) + H.dna.features["spines"] = pick(GLOB.spines_list) + H.dna.features["body_markings"] = pick(GLOB.body_markings_list) + H.dna.features["moth_wings"] = pick(GLOB.moth_wings_list) + H.update_body() H.update_hair() H.update_body_parts() \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 99e9a2d117..7d63b86eae 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2448,6 +2448,19 @@ usr.client.cmd_admin_mod_antag_rep(C, href_list["modantagrep"]) show_player_panel(M) + else if(href_list["slowquery"]) + if(!check_rights(R_ADMIN)) + return + var/answer = href_list["slowquery"] + if(answer == "yes") + log_query_debug("[usr.key] | Reported a server hang") + if(alert(usr, "Had you just press any admin buttons?", "Query server hang report", "Yes", "No") == "Yes") + var/response = input(usr,"What were you just doing?","Query server hang report") as null|text + if(response) + log_query_debug("[usr.key] | [response]") + else if(answer == "no") + log_query_debug("[usr.key] | Reported no server hang") + /datum/admins/proc/HandleCMode() if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 2a6b4448d2..f385cdc1bd 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -594,7 +594,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /proc/send2irc(msg,msg2) msg = replacetext(replacetext(msg, "\proper", ""), "\improper", "") msg2 = replacetext(replacetext(msg2, "\proper", ""), "\improper", "") - SERVER_TOOLS_RELAY_BROADCAST("[msg] | [msg2]") + world.TgsTargetedChatBroadcast("[msg] | [msg2]", TRUE) /proc/send2otherserver(source,msg,type = "Ahelp") var/comms_key = CONFIG_GET(string/comms_key) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 66eca3a542..28fb4a485d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -110,10 +110,14 @@ GLOBAL_PROTECT(LastAdminCalledProc) GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention) GLOBAL_PROTECT(AdminProcCallSpamPrevention) -/proc/WrapAdminProcCall(target, procname, list/arguments) +/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target && procname == "Del") to_chat(usr, "Calling Del() is not allowed") return + + if(!target.CanProcCall(procname)) + to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!") + return var/current_caller = GLOB.AdminProcCaller var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller if(!ckey) @@ -137,7 +141,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) GLOB.AdminProcCaller = null //adv proc call this, ya nerds -/world/proc/WrapAdminProcCall(target, procname, list/arguments) +/world/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target == GLOBAL_PROC) return call(procname)(arglist(arguments)) else if(target != world) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 83d4f64748..be0b9d04bb 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1043,6 +1043,30 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits for(var/obj/machinery/shuttle_manipulator/M in GLOB.machines) M.ui_interact(usr) +/client/proc/run_weather() + set category = "Fun" + set name = "Run Weather" + set desc = "Triggers a weather on the z-level you choose." + + if(!holder) + return + + var/weather_type = input("Choose a weather", "Weather") as null|anything in subtypesof(/datum/weather) + if(!weather_type) + return + + var/z_level = input("Z-Level to target? Leave blank to target current Z-Level.", "Z-Level") as num|null + if(!isnum(z_level)) + if(!src.mob) + return + z_level = src.mob.z + + SSweather.run_weather(weather_type, z_level) + + message_admins("[key_name_admin(usr)] started weather of type [weather_type] on the z-level [z_level].") + log_admin("[key_name(usr)] started weather of type [weather_type] on the z-level [z_level].") + SSblackbox.record_feedback("tally", "admin_verb", 1, "Run Weather") + /client/proc/mass_zombie_infection() set category = "Fun" set name = "Mass Zombie Infection" diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index c551509cc7..6fb84aa030 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -153,7 +153,7 @@ H.confused += 15 H.adjustBrainLoss(10, 160) if(3) - H.hallucination += 80 + H.hallucination += 60 /obj/item/organ/heart/gland/pop cooldown_low = 900 @@ -272,10 +272,10 @@ /obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0) ..() - owner.add_trait(TRAIT_SHOCKIMMUNE, "abductor_gland") + owner.add_trait(TRAIT_SHOCKIMMUNE, ORGAN_TRAIT) /obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0) - owner.remove_trait(TRAIT_SHOCKIMMUNE, "abductor_gland") + owner.remove_trait(TRAIT_SHOCKIMMUNE, ORGAN_TRAIT) ..() /obj/item/organ/heart/gland/electric/activate() diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 8c6d7f52bd..a42ae6ef4f 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -353,7 +353,10 @@ if(GLOB.changeling_team_objective_type) var/datum/objective/changeling_team_objective/team_objective = new GLOB.changeling_team_objective_type team_objective.owner = owner - objectives += team_objective + if(team_objective.prepare())//Setting up succeeded + objectives += team_objective + else + qdel(team_objective) return /datum/antagonist/changeling/proc/forge_objectives() diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 92c8a3c069..6ae73336d4 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -72,10 +72,10 @@ //used in /mob/Stat() /obj/effect/proc_holder/changeling/proc/can_be_used_by(mob/user) - if(!user || QDELETED(user)) - return 0 + if(QDELETED(user)) + return FALSE if(!ishuman(user) && !ismonkey(user)) - return 0 + return FALSE if(req_human && !ishuman(user)) - return 0 - return 1 + return FALSE + return TRUE diff --git a/code/modules/antagonists/changeling/powers/revive.dm b/code/modules/antagonists/changeling/powers/revive.dm index 4fb28b4904..d9c1ca7221 100644 --- a/code/modules/antagonists/changeling/powers/revive.dm +++ b/code/modules/antagonists/changeling/powers/revive.dm @@ -29,8 +29,12 @@ return TRUE /obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/living/user) + . = ..() + if(!.) + return + if(user.has_trait(CHANGELING_DRAIN) || ((user.stat != DEAD) && !(user.has_trait(TRAIT_FAKEDEATH)))) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.purchasedpowers -= src - return 0 - . = ..() + return FALSE + diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 10b86ac1ad..6e15334305 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -214,19 +214,19 @@ /obj/effect/proc_holder/changeling/sting/LSD name = "Hallucination Sting" desc = "Causes terror in the target." - helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." + helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect begins after a few seconds." sting_icon = "sting_lsd" chemical_cost = 10 dna_cost = 1 /obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) add_logs(user, target, "stung", "LSD sting") - addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600)) + addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(100,200)) return TRUE /obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) if(target) - target.hallucination = max(400, target.hallucination) + target.hallucination = max(90, target.hallucination) /obj/effect/proc_holder/changeling/sting/cryo name = "Cryogenic Sting" diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index f921b6b527..f2c0518cc2 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -159,7 +159,7 @@ SSticker.mode.servants_of_ratvar -= owner SSticker.mode.update_servant_icons_removed(owner) if(!silent) - owner.current.visible_message("[owner] seems to have remembered their true allegiance!", null, null, null, owner.current) + owner.current.visible_message("[owner.current] seems to have remembered [owner.current.p_their()] true allegiance!", null, null, null, owner.current) to_chat(owner, "A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.") owner.current.log_message("Has renounced the cult of Ratvar!", INDIVIDUAL_ATTACK_LOG) owner.special_role = null diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 8a71af3b7d..f12beef82f 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -260,7 +260,7 @@ if(!ishuman(target) || iscultist(target)) return var/mob/living/carbon/human/H = target - H.hallucination = max(H.hallucination, 240) + H.hallucination = max(H.hallucination, 120) SEND_SOUND(ranged_ability_user, sound('sound/effects/ghost.ogg',0,1,50)) var/image/C = image('icons/effects/cult_effects.dmi',H,"bloodsparkles", ABOVE_MOB_LAYER) add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, FALSE) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 2574c8af63..99941501e3 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -128,7 +128,7 @@ SSticker.mode.cult -= owner SSticker.mode.update_cult_icons_removed(owner) if(!silent) - owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!", null, null, null, owner.current) + owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just reverted to [owner.current.p_their()] old faith!", null, null, null, owner.current) to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.") owner.current.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 35399dc8e0..4de5219d7d 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -71,8 +71,6 @@ if(!iscultist(user)) if(!is_servant_of_ratvar(user)) to_chat(user, "\"I wouldn't advise that.\"") - to_chat(user, "An overwhelming sense of nausea overpowers you!") - user.Dizzy(120) else to_chat(user, "\"One of Ratvar's toys is trying to play with things [user.p_they()] shouldn't. Cute.\"") to_chat(user, "A horrible force yanks at your arm!") @@ -136,10 +134,7 @@ if(!iscultist(user)) if(!is_servant_of_ratvar(user)) to_chat(user, "\"I wouldn't advise that.\"") - to_chat(user, "An overwhelming sense of nausea overpowers you!") - user.Dizzy(80) - user.dropItemToGround(src, TRUE) - user.Knockdown(30) + force = 5 return else to_chat(user, "\"One of Ratvar's toys is trying to play with things [user.p_they()] shouldn't. Cute.\"") @@ -149,6 +144,7 @@ user.dropItemToGround(src, TRUE) user.Knockdown(50) return + force = initial(force) jaunt.Grant(user, src) linked_action.Grant(user, src) user.update_icons() diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm index dd129708a8..ba2ea53ef2 100644 --- a/code/modules/antagonists/cult/ritual.dm +++ b/code/modules/antagonists/cult/ritual.dm @@ -144,7 +144,8 @@ This file contains the cult dagger and rune list code if(locate(/obj/effect/rune) in T) to_chat(user, "There is already a rune here.") return FALSE - if(!is_station_level(T.z) && !is_mining_level(T.z)) + var/area/A = get_area(T) + if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !A.blob_allowed)) to_chat(user, "The veil is not weak enough here.") return FALSE return TRUE diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index 34d30603d6..03150c0254 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -90,7 +90,7 @@ to_chat(src, "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.") to_chat(src, "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities.") to_chat(src, "You do not remember anything of your past lives, nor will you remember anything about this one after your death.") - to_chat(src, "Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant to learn more.") + to_chat(src, "Be sure to read the wiki page to learn more.") if(!generated_objectives_and_spells) generated_objectives_and_spells = TRUE mind.assigned_role = ROLE_REVENANT diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 509cef087d..51acdae894 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -201,12 +201,13 @@ /datum/antagonist/rev/farewell() if(ishuman(owner.current)) - owner.current.visible_message("[owner.current] looks like they just remembered their real allegiance!", null, null, null, owner.current) + owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!", null, null, null, owner.current) to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...") else if(issilicon(owner.current)) owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.", null, null, null, owner.current) to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.") +//blunt trauma deconversions call this through species.dm spec_attacked_by() /datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter) log_attack("[owner.current] (Key: [key_name(owner.current)]) has been deconverted from the revolution by [deconverter] (Key: [key_name(deconverter)])!") if(borged) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 2775c92fd1..ec40f3f732 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -33,7 +33,6 @@ ..() if(!iscultist(user) && !iswizard(user) && !usability) to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.") - user.Dizzy(120) /obj/item/soulstone/examine(mob/user) ..() diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 381eccb3d8..7bfacbee26 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -153,6 +153,9 @@ req_access = null req_one_access = null +/obj/machinery/airalarm/syndicate //general syndicate access + req_access = list(ACCESS_SYNDICATE) + //all air alarms in area are connected via magic /area var/list/air_vent_names = list() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index d413353b11..47cc5e0d25 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -92,7 +92,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if (citadel_client_procs(href_list)) return // CITADEL End - + switch(href_list["_src_"]) if("holder") hsrc = holder @@ -115,16 +115,16 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( switch(href_list["action"]) if("openLink") src << link(href_list["link"]) - - var/datum/real_src = hsrc - if(QDELETED(real_src)) - return + if (hsrc) + var/datum/real_src = hsrc + if(QDELETED(real_src)) + return ..() //redirect to hsrc.Topic() /client/proc/is_content_unlocked() if(!prefs.unlock_content) - to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Only 10 bucks for 3 months! Click Here to find out more.") + to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Only 10 bucks for 3 months! Click Here to find out more.") return 0 return 1 @@ -267,7 +267,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) log_access("Failed login: [key] - blacklisted byond version") to_chat(src, "Your version of byond is blacklisted.") to_chat(src, "Byond build [byond_build] ([byond_version].[byond_build]) has been blacklisted for the following reason: [GLOB.blacklisted_builds[num2text(byond_build)]].") - to_chat(src, "Please download a new version of byond. if [byond_build] is the latest, you can go to http://www.byond.com/download/build/ to download other versions.") + to_chat(src, "Please download a new version of byond. If [byond_build] is the latest, you can go to BYOND's website to download other versions.") if(connecting_admin) to_chat(src, "As an admin, you are being allowed to continue using this version, but please consider changing byond versions") else @@ -290,11 +290,11 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/cev = CONFIG_GET(number/client_error_version) var/cwv = CONFIG_GET(number/client_warn_version) if (byond_version < cev) //Out of date client. - to_chat(src, "Your version of byond is too old:") + to_chat(src, "Your version of BYOND is too old:") to_chat(src, CONFIG_GET(string/client_error_message)) to_chat(src, "Your version: [byond_version]") to_chat(src, "Required version: [cev] or later") - to_chat(src, "Visit http://www.byond.com/download/ to get the latest version of byond.") + to_chat(src, "Visit BYOND's website to get the latest version of BYOND.") if (connecting_admin) to_chat(src, "Because you are an admin, you are being allowed to walk past this limitation, But it is still STRONGLY suggested you upgrade") else @@ -306,14 +306,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) msg += CONFIG_GET(string/client_warn_message) + "

" msg += "Your version: [byond_version]
" msg += "Required version to remove this message: [cwv] or later
" - msg += "Visit http://www.byond.com/download/ to get the latest version of byond.
" + msg += "Visit BYOND's website to get the latest version of BYOND.
" src << browse(msg, "window=warning_popup") else to_chat(src, "Your version of byond may be getting out of date:") to_chat(src, CONFIG_GET(string/client_warn_message)) to_chat(src, "Your version: [byond_version]") to_chat(src, "Required version to remove this message: [cwv] or later") - to_chat(src, "Visit http://www.byond.com/download/ to get the latest version of byond.") + to_chat(src, "Visit BYOND's website to get the latest version of BYOND.") if (connection == "web" && !connecting_admin) if (!CONFIG_GET(flag/allow_webclient)) @@ -403,9 +403,9 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/datum/verbs/menu/menuitem = GLOB.menulist[thing] if (menuitem) menuitem.Load_checked(src) - + hook_vr("client_new",list(src)) // CIT CHANGE - hook for client/New() changes - + Master.UpdateTickRate() ////////////// @@ -484,7 +484,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey]) log_access("Failed Login: [key] - New account attempting to connect during panic bunker") message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") - to_chat(src, "Sorry but the server is currently not accepting connections from never before seen players.") + to_chat(src, "You must first join the Discord to verify your account before joining this server. Please ping an admin once you've joined and read the rules. https://discord.gg/E6SQuhz") //CIT CHANGE - makes the panic bunker disconnect message point to the discord var/list/connectiontopic_a = params2list(connectiontopic) var/list/panic_addr = CONFIG_GET(string/panic_server_address) if(panic_addr && !connectiontopic_a["redirect"]) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a95686f581..231d375bb3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -197,7 +197,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(CONFIG_GET(flag/roundstart_traits)) dat += "

Quirk Setup

" dat += "Configure Quirks
" - dat += "
Current quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"]
" + dat += "
Current Quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"]
" dat += "

Identity

" dat += "
" if(jobban_isbanned(user, "appearance")) diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index 33b9462e40..2b0c16ebfc 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -11,22 +11,27 @@ /datum/round_event/mass_hallucination/start() switch(rand(1,4)) if(1) //same sound for everyone - var/sound = pick("explosion","far_explosion","phone","alarm","hallelujah","creepy","ratvar","shuttle_dock", - "wall_decon","door_hack","blob_alert","tesla","malf_ai","meteors") + var/sound = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla") for(var/mob/living/carbon/C in GLOB.alive_mob_list) new /datum/hallucination/sounds(C, TRUE, sound) - if(2 to 4) + if(2) + var/weirdsound = pick("phone","hallelujah","highlander","hyperspace","game_over","creepy","tesla") + for(var/mob/living/carbon/C in GLOB.alive_mob_list) + new /datum/hallucination/weird_sounds(C, TRUE, weirdsound) + if(3) + var/stationmessage = pick("ratvar","shuttle_dock","blob_alert","malf_ai","meteors","supermatter") + for(var/mob/living/carbon/C in GLOB.alive_mob_list) + new /datum/hallucination/stationmessage(C, TRUE, stationmessage) + if(4 to 6) var/picked_hallucination = pick( /datum/hallucination/bolts, - /datum/hallucination/whispers, + /datum/hallucination/chat, /datum/hallucination/message, /datum/hallucination/bolts, /datum/hallucination/fake_flood, /datum/hallucination/battle, /datum/hallucination/fire, /datum/hallucination/self_delusion, - /datum/hallucination/fakeattacker, /datum/hallucination/death, - /datum/hallucination/xeno_attack, /datum/hallucination/delusion, /datum/hallucination/oh_yeah) for(var/mob/living/carbon/C in GLOB.alive_mob_list) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index ae4c5cbd4a..44d3ac121a 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -15,7 +15,8 @@ var/reagentsAmount = 100 var/list/saferChems = list("water","carbon","flour","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube","pink_glitter", "plantbgone","blood","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid","mindbreaker","rotatium","skewium", - "pax","laughter","concentrated_barbers_aid","colorful_reagent","dizzysolution","tiresolution","salt","beer","hair_dye","sugar","white_glitter","growthserum") + "pax","laughter","concentrated_barbers_aid","colorful_reagent","dizzysolution","tiresolution","sodiumchloride","beer","hair_dye","sugar","white_glitter","growthserum") + //needs to be chemid unit checked at some point /datum/round_event/vent_clog/announce() priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4006bb50b7..1ade5070a7 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -1,84 +1,83 @@ -/* -Ideas for the subtle effects of hallucination: - -Light up oxygen/plasma indicators (done) -Cause health to look critical/dead, even when standing (done) -Characters silently watching you -Brief flashes of fire/space/bombs/c4/dangerous shit (done) -Items that are rare/traitorous/don't exist appearing in your inventory slots (done) -Strange audio (should be rare) (done) -Gunshots/explosions/opening doors/less rare audio (done) - -*/ - #define HAL_LINES_FILE "hallucination.json" -GLOBAL_LIST_INIT(hallucinations_minor, list( - /datum/hallucination/sounds, - /datum/hallucination/bolts, - /datum/hallucination/whispers, - /datum/hallucination/message, - /datum/hallucination/hudscrew)) +GLOBAL_LIST_INIT(hallucination_list, list( + /datum/hallucination/chat = 100, + /datum/hallucination/message = 60, + /datum/hallucination/sounds = 50, + /datum/hallucination/battle = 20, + /datum/hallucination/dangerflash = 15, + /datum/hallucination/hudscrew = 12, + /datum/hallucination/fake_alert = 12, + /datum/hallucination/weird_sounds = 8, + /datum/hallucination/stationmessage = 7, + /datum/hallucination/fake_flood = 7, + /datum/hallucination/stray_bullet = 7, + /datum/hallucination/bolts = 7, + /datum/hallucination/items_other = 7, + /datum/hallucination/husks = 7, + /datum/hallucination/items = 4, + /datum/hallucination/fire = 3, + /datum/hallucination/self_delusion = 2, + /datum/hallucination/delusion = 2, + /datum/hallucination/shock = 1, + /datum/hallucination/death = 1, + /datum/hallucination/oh_yeah = 1 + )) -GLOBAL_LIST_INIT(hallucinations_medium, list( - /datum/hallucination/fake_alert, - /datum/hallucination/items, - /datum/hallucination/items_other, - /datum/hallucination/dangerflash, - /datum/hallucination/bolts, - /datum/hallucination/fake_flood, - /datum/hallucination/husks, - /datum/hallucination/battle, - /datum/hallucination/fire, - /datum/hallucination/self_delusion, - /datum/hallucination/stray_bullet)) - -GLOBAL_LIST_INIT(hallucinations_major, list( - /datum/hallucination/fakeattacker, - /datum/hallucination/death, - /datum/hallucination/xeno_attack, - /datum/hallucination/singularity_scare, - /datum/hallucination/delusion, - /datum/hallucination/oh_yeah)) /mob/living/carbon/proc/handle_hallucinations() + if(!hallucination) + return + + hallucination-- + if(world.time < next_hallucination) return - if(hallucination) - var/list/current = GLOB.hallucinations_minor - if(prob(25) && hallucination > 100) - current = GLOB.hallucinations_medium - else if(prob(10) && hallucination > 200) - current = GLOB.hallucinations_major - var/halpick = pick(current) - new halpick(src, FALSE) + var/halpick = pickweight(GLOB.hallucination_list) + new halpick(src, FALSE) + + next_hallucination = world.time + rand(100, 600) /mob/living/carbon/proc/set_screwyhud(hud_type) hal_screwyhud = hud_type update_health_hud() /datum/hallucination + var/natural = TRUE var/mob/living/carbon/target - var/cost = 5 //affects the amount of hallucination reduced, and cooldown until the next hallucination var/feedback_details //extra info for investigate -/datum/hallucination/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE - target = T - if(!forced) - target.hallucination = max(0, target.hallucination - cost) - target.next_hallucination = world.time + (rand(cost * 0.5, cost * 3) * 10) + target = C + natural = !forced /datum/hallucination/proc/wake_and_restore() target.set_screwyhud(SCREWYHUD_NONE) target.SetSleeping(0) /datum/hallucination/Destroy() - target.investigate_log("was afflicted with a hallucination of type [type]. [feedback_details]", INVESTIGATE_HALLUCINATIONS) + target.investigate_log("was afflicted with a hallucination of type [type] by [natural?"hallucination status":"an external source"]. [feedback_details]", INVESTIGATE_HALLUCINATIONS) target = null return ..() +//Returns a random turf in a ring around the target mob, useful for sound hallucinations +/datum/hallucination/proc/random_far_turf() + var/x_based = prob(50) + var/first_offset = pick(-8,-7,-6,-5,5,6,7,8) + var/second_offset = rand(-8,8) + var/x_off + var/y_off + if(x_based) + x_off = first_offset + y_off = second_offset + else + y_off = first_offset + x_off = second_offset + var/turf/T = locate(target.x + x_off, target.y + y_off, target.z) + return T + /obj/effect/hallucination invisibility = INVISIBILITY_OBSERVER anchored = TRUE @@ -155,9 +154,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( var/image_state = "plasma" var/radius = 0 var/next_expand = 0 - cost = 25 -/datum/hallucination/fake_flood/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/fake_flood/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) @@ -225,9 +223,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( //Xeno crawls from nearby vent,jumps at you, and goes back in var/obj/machinery/atmospherics/components/unary/vent_pump/pump = null var/obj/effect/hallucination/simple/xeno/xeno = null - cost = 25 -/datum/hallucination/xeno_attack/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/xeno_attack/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) @@ -273,9 +270,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( var/obj/effect/hallucination/simple/bubblegum/bubblegum var/image/fakebroken var/image/fakerune - cost = 75 -/datum/hallucination/oh_yeah/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/oh_yeah/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE . = ..() var/turf/closed/wall/wall @@ -325,151 +321,192 @@ GLOBAL_LIST_INIT(hallucinations_major, list( QDEL_NULL(bubblegum) return ..() -/datum/hallucination/singularity_scare - //Singularity moving towards you. - //todo Hide where it moved with fake space images - var/obj/effect/hallucination/simple/singularity/s = null - cost = 75 - -/datum/hallucination/singularity_scare/New(mob/living/carbon/T, forced = TRUE) - set waitfor = FALSE - ..() - var/turf/start = get_turf(T) - var/screen_border = pick(SOUTH,EAST,WEST,NORTH) - for(var/i in 1 to 13) - start = get_step(start,screen_border) - feedback_details += "Source: [start.x],[start.y],[start.z]" - s = new(start,target) - s.parent = src - for(var/i in 1 to 13) - sleep(10) - s.forceMove(get_step(get_turf(s),get_dir(s,target))) - s.Show() - s.Eat() - qdel(s) - -/obj/effect/hallucination/simple/singularity - image_icon = 'icons/effects/224x224.dmi' - image_state = "singularity_s7" - image_layer = MASSIVE_OBJ_LAYER - px = -96 - py = -96 - var/datum/hallucination/singularity_scare/parent - -/obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir) - var/target_dist = get_dist(src,target) - if(target_dist<=3) //"Eaten" - target.set_screwyhud(SCREWYHUD_DEAD) - target.SetUnconscious(160) - addtimer(CALLBACK(parent, /datum/hallucination/.proc/wake_and_restore), rand(30, 50)) - /datum/hallucination/battle - cost = 15 -/datum/hallucination/battle/New(mob/living/carbon/T, forced = TRUE, battle_type) +/datum/hallucination/battle/New(mob/living/carbon/C, forced = TRUE, battle_type) set waitfor = FALSE ..() - var/hits = rand(3,6) + var/turf/source = random_far_turf() if(!battle_type) - battle_type = pick("laser","esword","gun","stunprod","bomb") + battle_type = pick("laser","disabler","esword","gun","stunprod","harmbaton","bomb") feedback_details += "Type: [battle_type]" switch(battle_type) - if("laser") //Laser fight - for(var/i in 1 to hits) - target.playsound_local(null, 'sound/weapons/laser.ogg', 25, 1) + if("laser") + var/hits = 0 + for(var/i in 1 to rand(5, 10)) + target.playsound_local(source, 'sound/weapons/laser.ogg', 25, 1) if(prob(50)) - addtimer(CALLBACK(target, /mob/.proc/playsound_local, null, 'sound/weapons/sear.ogg', 25, 1), rand(10,20)) + addtimer(CALLBACK(target, /mob/.proc/playsound_local, source, 'sound/weapons/sear.ogg', 25, 1), rand(5,10)) + hits++ else - addtimer(CALLBACK(target, /mob/.proc/playsound_local, null, 'sound/weapons/effects/searwall.ogg', 25, 1), rand(10,20)) - sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8)) - target.playsound_local(null, get_sfx("bodyfall"), 25, 1) - if("esword") //Esword fight - target.playsound_local(null, 'sound/weapons/saberon.ogg',15, 1) - for(var/i=0,i= 4 && prob(70)) + target.playsound_local(source, get_sfx("bodyfall"), 25, 1) + break + if("disabler") + var/hits = 0 + for(var/i in 1 to rand(5, 10)) + target.playsound_local(source, 'sound/weapons/taser2.ogg', 25, 1) + if(prob(50)) + addtimer(CALLBACK(target, /mob/.proc/playsound_local, source, 'sound/weapons/tap.ogg', 25, 1), rand(5,10)) + hits++ + else + addtimer(CALLBACK(target, /mob/.proc/playsound_local, source, 'sound/weapons/effects/searwall.ogg', 25, 1), rand(5,10)) + sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 6)) + if(hits >= 3 && prob(70)) + target.playsound_local(source, get_sfx("bodyfall"), 25, 1) + break + if("esword") + target.playsound_local(source, 'sound/weapons/saberon.ogg',15, 1) + for(var/i in 1 to rand(4, 8)) + target.playsound_local(source, 'sound/weapons/blade1.ogg', 50, 1) + if(i == 4) + target.playsound_local(source, get_sfx("bodyfall"), 25, 1) + sleep(rand(CLICK_CD_MELEE, CLICK_CD_MELEE + 6)) + target.playsound_local(source, 'sound/weapons/saberoff.ogg', 15, 1) + if("gun") + var/hits = 0 + for(var/i in 1 to rand(3, 6)) + target.playsound_local(source, get_sfx("gunshot"), 25) if(prob(60)) - addtimer(CALLBACK(target, /mob/.proc/playsound_local, null, 'sound/weapons/pierce.ogg', 25, 1), rand(10,20)) + addtimer(CALLBACK(target, /mob/.proc/playsound_local, source, 'sound/weapons/pierce.ogg', 25, 1), rand(5,10)) + hits++ else - addtimer(CALLBACK(target, /mob/.proc/playsound_local, null, "ricochet", 25, 1), rand(10,20)) - sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8)) - target.playsound_local(null, get_sfx("bodyfall"), 25, 1) + addtimer(CALLBACK(target, /mob/.proc/playsound_local, source, "ricochet", 25, 1), rand(5,10)) + sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 6)) + if(hits >= 2 && prob(80)) + target.playsound_local(source, get_sfx("bodyfall"), 25, 1) + break if("stunprod") //Stunprod + cablecuff - target.playsound_local(null, 'sound/weapons/egloves.ogg', 40, 1) - target.playsound_local(null, get_sfx("bodyfall"), 25, 1) + target.playsound_local(source, 'sound/weapons/egloves.ogg', 40, 1) + target.playsound_local(source, get_sfx("bodyfall"), 25, 1) sleep(20) - target.playsound_local(null, 'sound/weapons/cablecuff.ogg', 15, 1) + target.playsound_local(source, 'sound/weapons/cablecuff.ogg', 15, 1) + if("harmbaton") //zap n slap + target.playsound_local(source, 'sound/weapons/egloves.ogg', 40, 1) + target.playsound_local(source, get_sfx("bodyfall"), 25, 1) + sleep(20) + for(var/i in 1 to rand(5, 12)) + target.playsound_local(source, "swing_hit", 50, 1) + sleep(rand(CLICK_CD_MELEE, CLICK_CD_MELEE + 4)) if("bomb") // Tick Tock - for(var/i in 1 to hits) - target.playsound_local(null, 'sound/items/timer.ogg', 25, 0) + for(var/i in 1 to rand(3, 11)) + target.playsound_local(source, 'sound/items/timer.ogg', 25, 0) sleep(15) qdel(src) /datum/hallucination/items_other - cost = 10 -/datum/hallucination/items_other/New(mob/living/carbon/T, forced = TRUE, item_type) +/datum/hallucination/items_other/New(mob/living/carbon/C, forced = TRUE, item_type) set waitfor = FALSE ..() var/item if(!item_type) - item = pick(list("esword","dual_esword","stunpaper","clockspear","ttv","flash","armblade")) + item = pick(list("esword","taser","ebow","baton","dual_esword","clockspear","ttv","flash","armblade")) else item = item_type feedback_details += "Item: [item]" + var/side var/image_file var/image/A = null - for(var/mob/living/carbon/human/H in view(7,target)) - if(H != target) - var/free_hand = H.get_empty_held_index_for_side(side = "left") - if(free_hand) - image_file = 'icons/mob/inhands/items_lefthand.dmi' - else - free_hand = H.get_empty_held_index_for_side(side = "right") - if(free_hand) - image_file = 'icons/mob/inhands/items_righthand.dmi' - if(image_file) - switch(item) - if("esword") - target.playsound_local(H, 'sound/weapons/saberon.ogg',35,1) - A = image(image_file,H,"swordred", layer=ABOVE_MOB_LAYER) - if("dual_esword") - target.playsound_local(H, 'sound/weapons/saberon.ogg',35,1) - A = image(image_file,H,"dualsaberred1", layer=ABOVE_MOB_LAYER) - if("stunpaper") - A = image(image_file,H,"paper", layer=ABOVE_MOB_LAYER) - A.color = rgb(255,0,0) - if("clockspear") - A = image(image_file,H,"ratvarian_spear", layer=ABOVE_MOB_LAYER) - if("ttv") - A = image(image_file,H,"ttv", layer=ABOVE_MOB_LAYER) - if("flash") - A = image(image_file,H,"flashtool", layer=ABOVE_MOB_LAYER) - if("armblade") - A = image(image_file,H,"arm_blade", layer=ABOVE_MOB_LAYER) - if(target.client) - target.client.images |= A - sleep(rand(150,250)) - if(item == "esword" || item == "dual_esword") - target.playsound_local(H, 'sound/weapons/saberoff.ogg',35,1) - target.client.images.Remove(A) - break + var/list/mob_pool = list() + + for(var/mob/living/carbon/human/M in view(7,target)) + if(M != target) + mob_pool += M + if(!mob_pool.len) + return + + var/mob/living/carbon/human/H = pick(mob_pool) + feedback_details += " Mob: [H.real_name]" + + var/free_hand = H.get_empty_held_index_for_side(side = "left") + if(free_hand) + side = "left" + else + free_hand = H.get_empty_held_index_for_side(side = "right") + if(free_hand) + side = "right" + + if(side) + switch(item) + if("esword") + if(side == "right") + image_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + else + image_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + target.playsound_local(H, 'sound/weapons/saberon.ogg',35,1) + A = image(image_file,H,"swordred", layer=ABOVE_MOB_LAYER) + if("dual_esword") + if(side == "right") + image_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + else + image_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + target.playsound_local(H, 'sound/weapons/saberon.ogg',35,1) + A = image(image_file,H,"dualsaberred1", layer=ABOVE_MOB_LAYER) + if("taser") + if(side == "right") + image_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + else + image_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + A = image(image_file,H,"advtaserstun4", layer=ABOVE_MOB_LAYER) + if("ebow") + if(side == "right") + image_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + else + image_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + A = image(image_file,H,"crossbow", layer=ABOVE_MOB_LAYER) + if("baton") + if(side == "right") + image_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + else + image_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + target.playsound_local(H, "sparks",75,1,-1) + A = image(image_file,H,"baton", layer=ABOVE_MOB_LAYER) + if("clockspear") + if(side == "right") + image_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' + else + image_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi' + A = image(image_file,H,"ratvarian_spear", layer=ABOVE_MOB_LAYER) + if("ttv") + if(side == "right") + image_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi' + else + image_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi' + A = image(image_file,H,"ttv", layer=ABOVE_MOB_LAYER) + if("flash") + if(side == "right") + image_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + else + image_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + A = image(image_file,H,"flashtool", layer=ABOVE_MOB_LAYER) + if("armblade") + if(side == "right") + image_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' + else + image_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' + target.playsound_local(H, 'sound/effects/blobattack.ogg',30,1) + A = image(image_file,H,"arm_blade", layer=ABOVE_MOB_LAYER) + if(target.client) + target.client.images |= A + sleep(rand(150,250)) + if(item == "esword" || item == "dual_esword") + target.playsound_local(H, 'sound/weapons/saberoff.ogg',35,1) + if(item == "armblade") + target.playsound_local(H, 'sound/effects/blobattack.ogg',30,1) + target.client.images.Remove(A) qdel(src) /datum/hallucination/delusion var/list/image/delusions = list() - cost = 50 -/datum/hallucination/delusion/New(mob/living/carbon/T, forced, force_kind = null , duration = 300,skip_nearby = 1, custom_icon = null, custom_icon_file = null, custom_name = null) +/datum/hallucination/delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = 300,skip_nearby = TRUE, custom_icon = null, custom_icon_file = null, custom_name = null) set waitfor = FALSE . = ..() var/image/A = null - var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie") + var/kind = force_kind ? force_kind : pick("nothing","monkey","corgi","carp","skeleton","demon","zombie") feedback_details += "Type: [kind]" var/list/nearby if(skip_nearby) @@ -480,6 +517,9 @@ GLOBAL_LIST_INIT(hallucinations_major, list( if(skip_nearby && (H in nearby)) continue switch(kind) + if("nothing") + A = image('icons/effects/effects.dmi',H,"nothing") + A.name = "..." if("monkey")//Monkey A = image('icons/mob/monkey.dmi',H,"monkey1") A.name = "Monkey ([rand(1,999)])" @@ -516,9 +556,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( /datum/hallucination/self_delusion var/image/delusion - cost = 40 -/datum/hallucination/self_delusion/New(mob/living/carbon/T, forced, force_kind = null , duration = 300, custom_icon = null, custom_icon_file = null, wabbajack = TRUE) //set wabbajack to false if you want to use another fake source +/datum/hallucination/self_delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = 300, custom_icon = null, custom_icon_file = null, wabbajack = TRUE) //set wabbajack to false if you want to use another fake source set waitfor = FALSE ..() var/image/A = null @@ -556,176 +595,14 @@ GLOBAL_LIST_INIT(hallucinations_major, list( target.client.images.Remove(delusion) return ..() -/datum/hallucination/fakeattacker/New(mob/living/carbon/T, forced = TRUE) - set waitfor = FALSE - ..() - var/mob/living/carbon/human/clone = null - var/clone_weapon = null - - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(H.stat || H.lying) - continue - clone = H - feedback_details += "Clone of: [H.real_name]" - break - - if(!clone) - return - - var/static/list/non_fakeattack_weapons = list(/obj/item/gun/ballistic, /obj/item/ammo_box/a357,\ - /obj/item/gun/energy/kinetic_accelerator/crossbow, /obj/item/melee/transforming/energy/sword/saber,\ - /obj/item/storage/box/syndicate, /obj/item/storage/box/emps,\ - /obj/item/cartridge/virus/syndicate, /obj/item/clothing/under/chameleon,\ - /obj/item/clothing/shoes/chameleon/noslip, /obj/item/card/id/syndicate,\ - /obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\ - /obj/item/chameleon, /obj/item/card/emag, /obj/item/grenade/plastic/x4,\ - /obj/item/storage/toolbox/syndicate, /obj/item/aiModule,\ - /obj/item/radio/headset/syndicate, /obj/item/grenade/plastic/c4,\ - /obj/item/powersink, /obj/item/storage/box/syndie_kit,\ - /obj/item/toy/syndicateballoon, /obj/item/gun/energy/laser/captain,\ - /obj/item/hand_tele, /obj/item/construction/rcd, /obj/item/tank/jetpack,\ - /obj/item/clothing/under/rank/captain, /obj/item/aicard,\ - /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/disk/nuclear,\ - /obj/item/clothing/suit/space/nasavoid, /obj/item/tank) - - var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(get_turf(target),target) - - for(var/obj/item/I in clone.held_items) - if(!(locate(I) in non_fakeattack_weapons)) - clone_weapon = I.name - F.weap = I - - F.name = clone.name - F.my_target = target - F.weapon_name = clone_weapon - - F.left = image(clone,dir = WEST) - F.right = image(clone,dir = EAST) - F.up = image(clone,dir = NORTH) - F.down = image(clone,dir = SOUTH) - - F.updateimage() - qdel(src) - -/obj/effect/fake_attacker - icon = null - icon_state = null - name = "" - desc = "" - density = FALSE - anchored = TRUE - opacity = 0 - var/mob/living/carbon/human/my_target = null - var/weapon_name = null - var/obj/item/weap = null - var/image/stand_icon = null - var/image/currentimage = null - var/icon/base = null - var/skin_tone - var/mob/living/clone = null - var/image/left - var/image/right - var/image/up - var/collapse - var/image/down - - max_integrity = 100 - -/obj/effect/fake_attacker/attackby(obj/item/P, mob/living/user, params) - step_away(src,my_target,2) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - my_target.playsound_local(src, P.hitsound, 1) - my_target.visible_message("[my_target] flails around wildly.", \ - "[my_target] has attacked [src]!") - - obj_integrity -= P.force - -/obj/effect/fake_attacker/Crossed(mob/M, somenumber) - if(M == my_target) - step_away(src,my_target,2) - if(prob(30)) - for(var/mob/O in oviewers(world.view , my_target)) - to_chat(O, "[my_target] stumbles around.") - -/obj/effect/fake_attacker/Initialize(mapload, mob/living/carbon/T) - ..() - my_target = T - QDEL_IN(src, 300) - step_away(src,my_target,2) - INVOKE_ASYNC(src, .proc/attack_loop) - - -/obj/effect/fake_attacker/proc/updateimage() -// del src.currentimage - if(src.dir == NORTH) - del src.currentimage - src.currentimage = new /image(up,src) - else if(src.dir == SOUTH) - del src.currentimage - src.currentimage = new /image(down,src) - else if(src.dir == EAST) - del src.currentimage - src.currentimage = new /image(right,src) - else if(src.dir == WEST) - del src.currentimage - src.currentimage = new /image(left,src) - SEND_IMAGE(my_target, currentimage) - - -/obj/effect/fake_attacker/proc/attack_loop() - while(1) - sleep(rand(5,10)) - if(obj_integrity < 0 || my_target.stat) - collapse() - continue - if(get_dist(src,my_target) > 1) - src.setDir(get_dir(src,my_target)) - step_towards(src,my_target) - updateimage() - else - if(prob(15)) - if(weapon_name) - my_target.playsound_local(my_target, weap.hitsound, weap.get_clamped_volume(), 1) - my_target.show_message("[src.name] has attacked [my_target] with [weapon_name]!", 1) - my_target.staminaloss += 30 - if(prob(20)) - my_target.blur_eyes(3) - if(prob(33)) - if(!locate(/obj/effect/overlay) in my_target.loc) - fake_blood(my_target) - else - my_target.playsound_local(my_target, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 25, 1) - my_target.show_message("[src.name] has punched [my_target]!", 1) - my_target.staminaloss += 30 - if(prob(33)) - if(!locate(/obj/effect/overlay) in my_target.loc) - fake_blood(my_target) - - if(prob(15)) - step_away(src,my_target,2) - -/obj/effect/fake_attacker/proc/collapse() - collapse = 1 - updateimage() - qdel(src) - -/obj/effect/fake_attacker/proc/fake_blood(mob/target) - var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc) - O.name = "blood" - var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1) - SEND_IMAGE(target, I) - QDEL_IN(O, 300) - - /datum/hallucination/bolts - var/list/doors = list() - cost = 25 + var/list/locks = list() -/datum/hallucination/bolts/New(mob/living/carbon/T, forced, door_number=-1) //-1 for severe, 1-2 for subtle +/datum/hallucination/bolts/New(mob/living/carbon/C, forced, door_number) set waitfor = FALSE ..() - var/image/I = null + if(!door_number) + door_number = rand(0,4) //if 0 bolts all visible doors var/count = 0 feedback_details += "Door amount: [door_number]" for(var/obj/machinery/door/airlock/A in range(7, target)) @@ -734,46 +611,65 @@ GLOBAL_LIST_INIT(hallucinations_major, list( if(!A.density) continue count++ - I = image(A.overlays_file, get_turf(A), "lights_bolts",layer=A.layer+0.1) - doors += I - if(target.client) - target.client.images |= I - target.playsound_local(get_turf(A), 'sound/machines/boltsdown.ogg',30,0,3) - sleep(rand(6,12)) + var/obj/effect/hallucination/fake_door_lock/lock = new(get_turf(A)) + lock.target = target + lock.airlock = A + locks += lock + lock.lock() + sleep(rand(4,12)) sleep(100) - for(var/image/B in doors) - if(target.client) - target.client.images.Remove(B) - target.playsound_local(get_turf(B), 'sound/machines/boltsup.ogg',30,0,3) - sleep(rand(6,12)) + for(var/obj/effect/hallucination/fake_door_lock/lock in locks) + locks -= lock + lock.unlock() + sleep(rand(4,12)) qdel(src) -/datum/hallucination/whispers - cost = 15 +/obj/effect/hallucination/fake_door_lock + layer = CLOSED_DOOR_LAYER + 1 //for Collide priority + var/image/bolt_light + var/obj/machinery/door/airlock/airlock -/datum/hallucination/whispers/New(mob/living/carbon/T, forced = TRUE) +/obj/effect/hallucination/fake_door_lock/proc/lock() + bolt_light = image(airlock.overlays_file, get_turf(airlock), "lights_bolts",layer=airlock.layer+0.1) + if(target.client) + target.client.images |= bolt_light + target.playsound_local(get_turf(airlock), 'sound/machines/boltsdown.ogg',30,0,3) + +/obj/effect/hallucination/fake_door_lock/proc/unlock() + if(target.client) + target.client.images.Remove(bolt_light) + target.playsound_local(get_turf(airlock), 'sound/machines/boltsup.ogg',30,0,3) + qdel(src) + +/obj/effect/hallucination/fake_door_lock/CanPass(atom/movable/mover, turf/_target) + if(mover == target && airlock.density) + return FALSE + return TRUE + +/datum/hallucination/chat + +/datum/hallucination/chat/New(mob/living/carbon/C, forced = TRUE, force_radio, specific_message) set waitfor = FALSE ..() var/target_name = target.first_name() var/speak_messages = list("[pick_list_replacements(HAL_LINES_FILE, "suspicion")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "greetings")][target.first_name()]!",\ - "[pick_list_replacements(HAL_LINES_FILE, "getout")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "weird")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "didyouhearthat")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "imatraitor")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "doubt")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "aggressive")]",\ - "[pick_list_replacements(HAL_LINES_FILE, "help")]!!",\ - "[pick_list_replacements(HAL_LINES_FILE, "escape")]",\ - "I'm infected, [pick_list_replacements(HAL_LINES_FILE, "infection_advice")]!") + "[pick_list_replacements(HAL_LINES_FILE, "conversation")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "greetings")][target.first_name()]!",\ + "[pick_list_replacements(HAL_LINES_FILE, "getout")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "weird")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "didyouhearthat")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "doubt")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "aggressive")]",\ + "[pick_list_replacements(HAL_LINES_FILE, "help")]!!",\ + "[pick_list_replacements(HAL_LINES_FILE, "escape")]",\ + "I'm infected, [pick_list_replacements(HAL_LINES_FILE, "infection_advice")]!") - var/radio_messages = list("Set [target.first_name()] to arrest!",\ - "[pick_list_replacements(HAL_LINES_FILE, "people")] is [pick_list_replacements(HAL_LINES_FILE, "accusations")]!",\ - "Help!",\ - "[pick_list_replacements(HAL_LINES_FILE, "threat")] in [pick_list_replacements(HAL_LINES_FILE, "location")][prob(50)?"!":"!!"]",\ - "Where's [target.first_name()]?"\ - ,"[pick("C","Ai, c","Someone c","Rec")]all the shuttle!"\ - ,"AI [pick("rogue", "is dead")]!!") + var/radio_messages = list("[pick_list_replacements(HAL_LINES_FILE, "people")] is [pick_list_replacements(HAL_LINES_FILE, "accusations")]!",\ + "Help!",\ + "[pick_list_replacements(HAL_LINES_FILE, "threat")] in [pick_list_replacements(HAL_LINES_FILE, "location")][prob(50)?"!":"!!"]",\ + "[pick("Where's [target.first_name()]?", "Set [target.first_name()] to arrest!")]",\ + "[pick("C","Ai, c","Someone c","Rec")]all the shuttle!",\ + "AI [pick("rogue", "is dead")]!!") var/list/mob/living/carbon/people = list() var/list/mob/living/carbon/person = null @@ -787,8 +683,10 @@ GLOBAL_LIST_INIT(hallucinations_major, list( if(get_dist(target,H)The light burns you!", \ - "You don't feel like yourself.", \ - "You hear something squeezing through the ducts...", \ - "You hear a distant scream.", \ - "You feel invincible, nothing can hurt you!", \ - "You feel a tiny prick!", \ - "[target] sneezes.", \ - //The truth, revealed - "You're hallucinating.", \ - //Direct advice - "[pick_list_replacements(HAL_LINES_FILE, "advice")]") + var/list/mobpool = list() + var/mob/living/carbon/human/other + var/close_other = FALSE + for(var/mob/living/carbon/human/H in oview(target, 7)) + if(get_dist(H, target) <= 1) + other = H + close_other = TRUE + break + mobpool += H + if(!other && mobpool.len) + other = pick(mobpool) + + var/list/message_pool = list() + if(other) + if(close_other) //increase the odds + for(var/i in 1 to 5) + message_pool.Add("You feel a tiny prick!") + var/obj/item/storage/equipped_backpack = other.get_item_by_slot(SLOT_BACK) + if(istype(equipped_backpack)) + for(var/i in 1 to 5) //increase the odds + message_pool.Add("[other] puts the [pick(\ + "revolver","energy sword","cryptographic sequencer","power sink","energy bow",\ + "hybrid taser","stun baton","flash","syringe gun","circular saw","tank transfer valve",\ + "ritual dagger","clockwork slab","spellbook",\ + "pulse rifle","captain's spare ID","hand teleporter","hypospray","antique laser gun","X-01 MultiPhase Energy Gun","station's blueprints"\ + )] into [equipped_backpack].") + + message_pool.Add("[other] [pick("sneezes","coughs")].") + + message_pool.Add("You hear something squeezing through the ducts...", \ + "Your [pick("arm", "leg", "back", "head")] itches.",\ + "You feel [pick("hot","cold","dry","wet","woozy","faint")].", + "Your stomach rumbles.", + "Your head hurts.", + "You hear a faint buzz in your head.", + "[target] sneezes.") + if(prob(10)) + message_pool.Add("Behind you.",\ + "You hear a faint laughter.", + "You see something move.", + "You hear skittering on the ceiling.", + "You see an inhumanly tall silhouette moving in the distance.") + if(prob(10)) + message_pool.Add("[pick_list_replacements(HAL_LINES_FILE, "advice")]") + var/chosen = pick(message_pool) feedback_details += "Message: [chosen]" to_chat(target, chosen) qdel(src) /datum/hallucination/sounds - cost = 15 -/datum/hallucination/sounds/New(mob/living/carbon/T, forced = TRUE, sound_type) +/datum/hallucination/sounds/New(mob/living/carbon/C, forced = TRUE, sound_type) set waitfor = FALSE ..() + var/turf/source = random_far_turf() if(!sound_type) - sound_type = pick("airlock","explosion","far_explosion","glass","phone","summon_guns","alarm","beepsky","hallelujah","creepy","ratvar","shuttle_dock", - "wall_decon","door_hack","esword","blob_alert","tesla","malf_ai","meteors") + sound_type = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla") feedback_details += "Type: [sound_type]" //Strange audio switch(sound_type) if("airlock") - target.playsound_local(null,'sound/machines/airlock.ogg', 15, 1) + target.playsound_local(source,'sound/machines/airlock.ogg', 30, 1) + if("airlock_pry") + target.playsound_local(source,'sound/machines/airlock_alien_prying.ogg', 100, 1) + sleep(50) + target.playsound_local(source, 'sound/machines/airlockforced.ogg', 30, 1) + if("console") + target.playsound_local(source,'sound/machines/terminal_prompt.ogg', 25, 1) if("explosion") if(prob(50)) - target.playsound_local(null,'sound/effects/explosion1.ogg', 50, 1) + target.playsound_local(source,'sound/effects/explosion1.ogg', 50, 1) else - target.playsound_local(null, 'sound/effects/explosion2.ogg', 50, 1) + target.playsound_local(source, 'sound/effects/explosion2.ogg', 50, 1) if("far_explosion") - target.playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1) + target.playsound_local(source, 'sound/effects/explosionfar.ogg', 50, 1) if("glass") - target.playsound_local(null, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) - if("phone") - target.playsound_local(null, 'sound/weapons/ring.ogg', 15) - sleep(25) - target.playsound_local(null, 'sound/weapons/ring.ogg', 25) - sleep(25) - target.playsound_local(null, 'sound/weapons/ring.ogg', 35) - sleep(25) - target.playsound_local(null, 'sound/weapons/ring.ogg', 45) - if("summon_guns") - target.playsound_local(null, 'sound/magic/summon_guns.ogg', 50, 1) + target.playsound_local(source, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) if("alarm") - target.playsound_local(null, 'sound/machines/alarm.ogg', 100, 0) + target.playsound_local(source, 'sound/machines/alarm.ogg', 100, 0) if("beepsky") - target.playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0) - if("hallelujah") - target.playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50) - //Rare audio - if("creepy") - //These sounds are (mostly) taken from Hidden: Source - target.playsound_local(null, pick(CREEPY_SOUNDS), 50, 1) - if("ratvar") - target.playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) - sleep(150) - target.playsound_local(null, 'sound/effects/ratvar_reveal.ogg', 100) - if("shuttle_dock") - to_chat(target, "

Priority Announcement

") - to_chat(target, "

The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

") - target.playsound_local(null, 'sound/ai/shuttledock.ogg', 100) + target.playsound_local(source, 'sound/voice/bfreeze.ogg', 35, 0) + if("mech") + var/mech_dir = pick(GLOB.cardinals) + for(var/i in 1 to rand(4,9)) + if(prob(75)) + target.playsound_local(source, 'sound/mecha/mechstep.ogg', 40, 1) + source = get_step(source, mech_dir) + else + target.playsound_local(source, 'sound/mecha/mechturn.ogg', 40, 1) + mech_dir = pick(GLOB.cardinals) + sleep(10) //Deconstructing a wall if("wall_decon") - target.playsound_local(null, 'sound/items/welder.ogg', 15, 1) + target.playsound_local(source, 'sound/items/welder.ogg', 50, 1) sleep(105) - target.playsound_local(null, 'sound/items/welder2.ogg', 15, 1) + target.playsound_local(source, 'sound/items/welder2.ogg', 50, 1) sleep(15) - target.playsound_local(null, 'sound/items/ratchet.ogg', 15, 1) + target.playsound_local(source, 'sound/items/ratchet.ogg', 50, 1) //Hacking a door if("door_hack") - target.playsound_local(null, 'sound/items/screwdriver.ogg', 15, 1) - sleep(rand(10,30)) - for(var/i = rand(1,3), i>0, i--) - target.playsound_local(null, 'sound/weapons/empty.ogg', 15, 1) - sleep(rand(10,30)) - target.playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1) - if("esword") - target.playsound_local(null, 'sound/weapons/saberon.ogg',35,1) + target.playsound_local(source, 'sound/items/screwdriver.ogg', 50, 1) + sleep(rand(40,80)) + target.playsound_local(source, 'sound/machines/airlockforced.ogg', 30, 1) + qdel(src) + +/datum/hallucination/weird_sounds + +/datum/hallucination/weird_sounds/New(mob/living/carbon/C, forced = TRUE, sound_type) + set waitfor = FALSE + ..() + var/turf/source = random_far_turf() + if(!sound_type) + sound_type = pick("phone","hallelujah","highlander","hyperspace","game_over","creepy","tesla") + feedback_details += "Type: [sound_type]" + //Strange audio + switch(sound_type) + if("phone") + target.playsound_local(source, 'sound/weapons/ring.ogg', 15) + sleep(25) + target.playsound_local(source, 'sound/weapons/ring.ogg', 15) + sleep(25) + target.playsound_local(source, 'sound/weapons/ring.ogg', 15) + sleep(25) + target.playsound_local(source, 'sound/weapons/ring.ogg', 15) + if("hyperspace") + target.playsound_local(null, 'sound/effects/hyperspace_begin.ogg', 50) + if("hallelujah") + target.playsound_local(source, 'sound/effects/pray_chaplain.ogg', 50) + if("highlander") + target.playsound_local(null, 'sound/misc/highlander.ogg', 50) + if("game_over") + target.playsound_local(source, 'sound/misc/compiler-failure.ogg', 50) + if("laughter") + if(prob(50)) + target.playsound_local(source, 'sound/voice/human/womanlaugh.ogg', 50, 1) + else + target.playsound_local(source, pick('sound/voice/human/manlaugh1.ogg', 'sound/voice/human/manlaugh2.ogg'), 50, 1) + if("creepy") + //These sounds are (mostly) taken from Hidden: Source + target.playsound_local(source, pick(CREEPY_SOUNDS), 50, 1) + if("tesla") //Tesla loose! + target.playsound_local(source, 'sound/magic/lightningbolt.ogg', 35, 1) + sleep(30) + target.playsound_local(source, 'sound/magic/lightningbolt.ogg', 65, 1) + sleep(30) + target.playsound_local(source, 'sound/magic/lightningbolt.ogg', 100, 1) + + qdel(src) + +/datum/hallucination/stationmessage + +/datum/hallucination/stationmessage/New(mob/living/carbon/C, forced = TRUE, message) + set waitfor = FALSE + ..() + if(!message) + message = pick("ratvar","shuttle_dock","blob_alert","malf_ai","meteors","supermatter") + feedback_details += "Type: [message]" + switch(message) if("blob_alert") to_chat(target, "

Biohazard Alert

") to_chat(target, "

Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

") - target.playsound_local(null, 'sound/ai/outbreak5.ogg', 100, 0) - if("tesla") //Tesla loose! - target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1) - sleep(30) - target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1) - sleep(30) - target.playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1) + SEND_SOUND(target, 'sound/ai/outbreak5.ogg') + if("ratvar") + target.playsound_local(target, 'sound/machines/clockcult/ark_deathrattle.ogg', 50, FALSE, pressure_affected = FALSE) + target.playsound_local(target, 'sound/effects/clockcult_gateway_disrupted.ogg', 50, FALSE, pressure_affected = FALSE) + sleep(27) + target.playsound_local(target, 'sound/effects/explosion_distant.ogg', 50, FALSE, pressure_affected = FALSE) + if("shuttle_dock") + to_chat(target, "

Priority Announcement

") + to_chat(target, "

The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

") + SEND_SOUND(target, 'sound/ai/shuttledock.ogg') if("malf_ai") //AI is doomsdaying! to_chat(target, "

Anomaly Alert

") to_chat(target, "

Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

") - target.playsound_local(null, 'sound/ai/aimalf.ogg', 100, 0) + SEND_SOUND(target, 'sound/ai/aimalf.ogg') if("meteors") //Meteors inbound! to_chat(target, "

Meteor Alert

") to_chat(target, "

Meteors have been detected on collision course with the station.

") - target.playsound_local(null, 'sound/ai/meteors.ogg', 100, 0) - qdel(src) + SEND_SOUND(target, 'sound/ai/meteors.ogg') + if("supermatter") + SEND_SOUND(target, 'sound/magic/charge.ogg') + to_chat(target, "You feel reality distort for a moment...") /datum/hallucination/hudscrew - cost = 10 -/datum/hallucination/hudscrew/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/hudscrew/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() //Screwy HUD @@ -933,9 +911,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( qdel(src) /datum/hallucination/fake_alert - cost = 15 -/datum/hallucination/fake_alert/New(mob/living/carbon/T, forced = TRUE, specific, duration = 150) +/datum/hallucination/fake_alert/New(mob/living/carbon/C, forced = TRUE, specific, duration = 150) set waitfor = FALSE ..() var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") @@ -983,15 +960,14 @@ GLOBAL_LIST_INIT(hallucinations_major, list( if("hacked") target.throw_alert(alert_type, /obj/screen/alert/hacked, override = TRUE) if("charge") - target.throw_alert(alert_type,/obj/screen/alert/emptycell, override = TRUE) + target.throw_alert(alert_type, /obj/screen/alert/emptycell, override = TRUE) sleep(duration) target.clear_alert(alert_type, clear_override = TRUE) qdel(src) /datum/hallucination/items - cost = 15 -/datum/hallucination/items/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/items/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() //Strange items @@ -1052,9 +1028,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( qdel(src) /datum/hallucination/dangerflash - cost = 15 -/datum/hallucination/dangerflash/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/dangerflash/New(mob/living/carbon/C, forced = TRUE, danger_type) set waitfor = FALSE ..() //Flashes of danger @@ -1064,32 +1039,92 @@ GLOBAL_LIST_INIT(hallucinations_major, list( possible_points += F if(possible_points.len) var/turf/open/floor/danger_point = pick(possible_points) - - switch(rand(1,5)) - if(1) - target.halimage = image('icons/turf/space.dmi',danger_point,"[rand(1,25)]",TURF_LAYER) - if(2) - target.halimage = image('icons/turf/floors/lava.dmi',danger_point,"smooth",TURF_LAYER) - if(3) - target.halimage = image('icons/turf/floors/Chasms.dmi',danger_point,"smooth",TURF_LAYER) - if(4) - target.halimage = image('icons/effects/effects.dmi',danger_point,"anom",OBJ_LAYER+0.01) - if(5) - target.halimage = image('icons/effects/effects.dmi',danger_point,"electricity2",OBJ_LAYER+0.01) - - - if(target.client) - target.client.images += target.halimage - sleep(rand(200,450)) - if(target.client) - target.client.images -= target.halimage - QDEL_NULL(target.halimage) + if(!danger_type) + danger_type = pick("lava","chasm","anomaly") + switch(danger_type) + if("lava") + new /obj/effect/hallucination/danger/lava(danger_point, target) + if("chasm") + new /obj/effect/hallucination/danger/chasm(danger_point, target) + if("anomaly") + new /obj/effect/hallucination/danger/anomaly(danger_point, target) qdel(src) -/datum/hallucination/death - cost = 40 +/obj/effect/hallucination/danger + var/image/image -/datum/hallucination/death/New(mob/living/carbon/T, forced = TRUE) +/obj/effect/hallucination/danger/proc/show_icon() + return + +/obj/effect/hallucination/danger/proc/clear_icon() + if(image && target.client) + target.client.images -= image + +/obj/effect/hallucination/danger/Initialize(mapload, _target) + . = ..() + target = _target + show_icon() + QDEL_IN(src, rand(200, 450)) + +/obj/effect/hallucination/danger/Destroy() + clear_icon() + . = ..() + +/obj/effect/hallucination/danger/lava + name = "lava" + +/obj/effect/hallucination/danger/lava/show_icon() + image = image('icons/turf/floors/lava.dmi',src,"smooth",TURF_LAYER) + if(target.client) + target.client.images += image + +/obj/effect/hallucination/danger/lava/Crossed(atom/movable/AM) + if(AM == target) + target.adjustStaminaLoss(20) + new /datum/hallucination/fire(target) + +/obj/effect/hallucination/danger/chasm + name = "chasm" + +/obj/effect/hallucination/danger/chasm/show_icon() + image = image('icons/turf/floors/Chasms.dmi',src,"smooth",TURF_LAYER) + if(target.client) + target.client.images += image + +/obj/effect/hallucination/danger/chasm/Crossed(atom/movable/AM) + if(AM == target) + to_chat(target, "You fall into the chasm!") + target.Knockdown(40) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, target, "It's surprisingly shallow."), 15) + QDEL_IN(src, 30) + +/obj/effect/hallucination/danger/anomaly + name = "flux wave anomaly" + +/obj/effect/hallucination/danger/anomaly/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/effect/hallucination/danger/anomaly/process() + if(prob(70)) + step(src,pick(GLOB.alldirs)) + +/obj/effect/hallucination/danger/anomaly/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/effect/hallucination/danger/anomaly/show_icon() + image = image('icons/effects/effects.dmi',src,"electricity2",OBJ_LAYER+0.01) + if(target.client) + target.client.images += image + +/obj/effect/hallucination/danger/anomaly/Crossed(atom/movable/AM) + if(AM == target) + new /datum/hallucination/shock(target) + +/datum/hallucination/death + +/datum/hallucination/death/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() target.set_screwyhud(SCREWYHUD_DEAD) @@ -1107,8 +1142,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( fakemob = target //ever been so lonely you had to haunt yourself? if(fakemob) sleep(rand(20, 50)) - to_chat(target, "DEAD: [fakemob.name] says, \"[pick("rip","hey [target.first_name()]","you too?","is the AI rogue?",\ - "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "abductors","double agents","viruses","badmins","you")]")]\"") + to_chat(target, "DEAD: [fakemob.name] says, \"[pick("rip","why did i just drop dead?","hey [target.first_name()]","git gud","you too?","is the AI rogue?",\ + "i[prob(50)?" fucking":""] hate [pick("blood cult", "clock cult", "revenants", "this round","this","myself","admins","you")]")]\"") sleep(rand(70,90)) target.set_screwyhud(SCREWYHUD_NONE) target.SetKnockdown(0) @@ -1116,38 +1151,93 @@ GLOBAL_LIST_INIT(hallucinations_major, list( qdel(src) /datum/hallucination/fire - cost = 25 + var/active = TRUE + var/stage = 0 + var/image/fire_overlay -/datum/hallucination/fire/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/fire/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() - var/image/fire_overlay = image('icons/mob/OnFire.dmi', target, "Standing", ABOVE_MOB_LAYER) + target.fire_stacks = max(target.fire_stacks, 0.1) //Placebo flammability + fire_overlay = image('icons/mob/OnFire.dmi', target, "Standing", ABOVE_MOB_LAYER) if(target.client) target.client.images += fire_overlay to_chat(target, "You're set on fire!") target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE) sleep(20) - target.throw_alert("temp", /obj/screen/alert/hot, 1, override = TRUE) - sleep(30) - target.clear_alert("temp", clear_override = TRUE) - target.throw_alert("temp", /obj/screen/alert/hot, 2, override = TRUE) - sleep(30) - target.clear_alert("temp", clear_override = TRUE) - target.throw_alert("temp", /obj/screen/alert/hot, 3, override = TRUE) + for(var/i in 1 to 3) + if(target.fire_stacks <= 0) + clear_fire() + return + stage++ + update_temp() + sleep(30) for(var/i in 1 to rand(5, 10)) + if(target.fire_stacks <= 0) + clear_fire() + return target.adjustStaminaLoss(15) - sleep(25) + sleep(20) + clear_fire() + +/datum/hallucination/fire/proc/update_temp() + if(stage <= 0) + target.clear_alert("temp", clear_override = TRUE) + else + target.clear_alert("temp", clear_override = TRUE) + target.throw_alert("temp", /obj/screen/alert/hot, stage, override = TRUE) + +/datum/hallucination/fire/proc/clear_fire() + if(!active) + return + active = FALSE target.clear_alert("fire", clear_override = TRUE) - target.clear_alert("temp", clear_override = TRUE) if(target.client) target.client.images -= fire_overlay QDEL_NULL(fire_overlay) + while(stage > 0) + stage-- + update_temp() + sleep(30) qdel(src) -/datum/hallucination/husks - cost = 20 +/datum/hallucination/shock + var/image/shock_image + var/image/electrocution_skeleton_anim -/datum/hallucination/husks/New(mob/living/carbon/T, forced = TRUE) +/datum/hallucination/shock/New(mob/living/carbon/C, forced = TRUE) + set waitfor = FALSE + ..() + shock_image = image(target, target, dir = target.dir) + shock_image.appearance_flags |= KEEP_APART + shock_image.color = rgb(0,0,0) + shock_image.override = TRUE + electrocution_skeleton_anim = image('icons/mob/human.dmi', target, icon_state = "electrocuted_base", layer=ABOVE_MOB_LAYER) + electrocution_skeleton_anim.appearance_flags |= RESET_COLOR|KEEP_APART + to_chat(target, "You feel a powerful shock course through your body!") + if(target.client) + target.client.images |= shock_image + target.client.images |= electrocution_skeleton_anim + addtimer(CALLBACK(src, .proc/reset_shock_animation), 40) + target.playsound_local(get_turf(src), "sparks", 100, 1) + target.staminaloss += 50 + target.Stun(40) + target.jitteriness += 1000 + target.do_jitter_animation(target.jitteriness) + addtimer(CALLBACK(src, .proc/shock_drop), 20) + +/datum/hallucination/shock/proc/reset_shock_animation() + if(target.client) + target.client.images.Remove(shock_image) + target.client.images.Remove(electrocution_skeleton_anim) + +/datum/hallucination/shock/proc/shock_drop() + target.jitteriness = max(target.jitteriness - 990, 10) //Still jittery, but vastly less + target.Knockdown(60) + +/datum/hallucination/husks + +/datum/hallucination/husks/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE ..() if(!target.halbody) @@ -1178,7 +1268,6 @@ GLOBAL_LIST_INIT(hallucinations_major, list( //hallucination projectile code in code/modules/projectiles/projectile/special.dm /datum/hallucination/stray_bullet - cost = 15 /datum/hallucination/stray_bullet/New(mob/living/carbon/C, forced = TRUE) set waitfor = FALSE @@ -1194,29 +1283,4 @@ GLOBAL_LIST_INIT(hallucinations_major, list( H.hal_target = target H.preparePixelProjectile(target, start) H.fire() - qdel(src) - -//Reality Dissociation Syndrome hallucinations only trigger in special cases and have no cost -/datum/hallucination/rds - cost = 0 - -/datum/hallucination/rds/fourth_wall/New(mob/living/carbon/C, forced = TRUE) - ..() - to_chat(C, "[pick("Leave the server" , "Close the game window")] [pick("immediately", "right now")].") - -/datum/hallucination/rds/supermatter/New(mob/living/carbon/C, forced = TRUE) - ..() - SEND_SOUND(C, 'sound/magic/charge.ogg') - to_chat(C, "You feel reality distort for a moment...") - -/datum/hallucination/rds/narsie/New(mob/living/carbon/C, forced = TRUE) - C.playsound_local(C, 'sound/creatures/narsie_rises.ogg', 50, FALSE, pressure_affected = FALSE) - to_chat(C, "NAR-SIE HAS RISEN") - -/datum/hallucination/rds/ark/New(mob/living/carbon/C, forced = TRUE) - set waitfor = FALSE - ..() - C.playsound_local(C, 'sound/machines/clockcult/ark_deathrattle.ogg', 50, FALSE, pressure_affected = FALSE) - C.playsound_local(C, 'sound/effects/clockcult_gateway_disrupted.ogg', 50, FALSE, pressure_affected = FALSE) - sleep(27) - C.playsound_local(C, 'sound/effects/explosion_distant.ogg', 50, FALSE, pressure_affected = FALSE) + qdel(src) \ No newline at end of file diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 664d2e0bc2..8972ceba12 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -298,6 +298,29 @@ icon_state = "grappabottle" list_reagents = list("grappa" = 100) +/obj/item/reagent_containers/food/drinks/bottle/sake + name = "Ryo's traditional sake" + desc = "Sweet as can be, and burns like fire going down." + icon_state = "sakebottle" + list_reagents = list("sake" = 100) + +/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize() + . = ..() + if(prob(10)) + name = "Fluffy Tail Sake" + desc += " On the bottle is a picture of a kitsune with nine touchable tails." + icon_state = "sakebottle_k" + else if(prob(10)) + name = "Inubashiri's Home Brew" + desc += " Awoo." + icon_state = "sakebottle_i" + +/obj/item/reagent_containers/food/drinks/bottle/fernet + name = "Fernet Bronca" + desc = "A bottle of pure Fernet Bronca, produced in Cordoba Space Station" + icon_state = "fernetbottle" + list_reagents = list("fernet" = 100) + //////////////////////////JUICES AND STUFF /////////////////////// /obj/item/reagent_containers/food/drinks/bottle/orangejuice diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 2a081f3a2f..0ee01ae9e2 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -662,3 +662,22 @@ id = "mojito" results = list("mojito" = 5) required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1, "menthol" = 1) + +/datum/chemical_reaction/fernet_cola + name = "Fernet Cola" + id = "fernet_cola" + results = list("fernet_cola" = 2) + required_reagents = list("fernet" = 1, "cola" = 1) + + +/datum/chemical_reaction/fanciulli + name = "Fanciulli" + id = "fanciulli" + results = list("fanciulli" = 2) + required_reagents = list("manhattan" = 1, "fernet" = 1) + +/datum/chemical_reaction/branca_menta + name = "Branca Menta" + id = "branca_menta" + results = list("branca_menta" = 3) + required_reagents = list("fernet" = 1, "creme_de_menthe" = 1, "ice" = 1) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index d44682991a..0844070dd6 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -17,6 +17,7 @@ var/obj/item/stock_parts/cell/battery // Internal cell which most circuits need to work. var/cell_type = /obj/item/stock_parts/cell var/can_charge = TRUE //Can it be charged in a recharger? + var/can_fire_equipped = FALSE //Can it fire/throw weapons when the assembly is being held? var/charge_sections = 4 var/charge_tick = FALSE var/charge_delay = 4 @@ -603,7 +604,11 @@ /obj/item/electronic_assembly/medium/gun name = "type-e electronic mechanism" icon_state = "setup_medium_gun" - desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, if you're feeling optimistic." + item_state = "circuitgun" + desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, if you're feeling optimistic. It can fire guns and throw items while the user is holding it." + lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + can_fire_equipped = TRUE /obj/item/electronic_assembly/medium/radio name = "type-f electronic mechanism" diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 859c8910f3..244b4cb71b 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -73,7 +73,7 @@ // For really fat machines. /obj/item/integrated_circuit/passive/power/relay/large name = "large tesla power relay" - desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them, now in industiral size!" + desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them, now in industrial size!" w_class = WEIGHT_CLASS_BULKY extended_desc = "The siphon drains 2 kW of power from an APC in the same room as it as long as it has charge remaining. It will always drain \ from the 'equipment' power channel." @@ -89,7 +89,7 @@ desc = "Produces electricity from chemicals." icon_state = "chemical_cell" extended_desc = "This is effectively an internal beaker. It will consume and produce power from plasma, slime jelly, welding fuel, carbon,\ - ethanol, nutriments, and blood in order of decreasing efficiency. It will consume fuel only if the battery can take more energy." + ethanol, nutriment, and blood in order of decreasing efficiency. It will consume fuel only if the battery can take more energy." container_type = OPENCONTAINER complexity = 4 inputs = list() diff --git a/code/modules/integrated_electronics/subtypes/access.dm b/code/modules/integrated_electronics/subtypes/access.dm index 63b258d782..bf710be0e2 100644 --- a/code/modules/integrated_electronics/subtypes/access.dm +++ b/code/modules/integrated_electronics/subtypes/access.dm @@ -1,6 +1,6 @@ /obj/item/integrated_circuit/input/card_reader name = "card reader" - desc = "A circuit that can read registred name, assignment and a PassKey string from an ID card." + desc = "A circuit that can read the registred name, assignment, and PassKey string from an ID card." icon_state = "card_reader" complexity = 4 diff --git a/code/modules/integrated_electronics/subtypes/arithmetic.dm b/code/modules/integrated_electronics/subtypes/arithmetic.dm index 3a28c7b051..d4b854268b 100644 --- a/code/modules/integrated_electronics/subtypes/arithmetic.dm +++ b/code/modules/integrated_electronics/subtypes/arithmetic.dm @@ -94,7 +94,7 @@ /obj/item/integrated_circuit/arithmetic/division name = "division circuit" - desc = "This circuit can divide numbers, just don't think about trying to divide by zero!" + desc = "This circuit can divide numbers. Don't even think about trying to divide by zero!" extended_desc = "The order that the calculation goes is;
\ result = ((((A / B) / C) / D) ... ) and so on, until all pins have been divided. \ Null pins, and pins containing 0, are ignored. Pin A must be a number or the circuit will not function." @@ -142,8 +142,8 @@ /obj/item/integrated_circuit/arithmetic/sign name = "sign circuit" - desc = "This will say if a number is positive, negative, or zero." - extended_desc = "Will output 1, -1, or 0, depending on if A is a postive number, a negative number, or zero, respectively." + desc = "This circuit can tell if a number is positive, negative, or zero." + extended_desc = "Will output 1, -1, or 0, depending on if A is a positive number, a negative number, or zero, respectively." icon_state = "sign" inputs = list("A" = IC_PINTYPE_NUMBER) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -212,8 +212,8 @@ /obj/item/integrated_circuit/arithmetic/average name = "average circuit" - desc = "This circuit is of average quality, however it will compute the average for numbers you give it." - extended_desc = "Note that null pins are ignored, where as a pin containing 0 is included in the averaging calculation." + desc = "This circuit is of average quality. It will compute the average of the numbers you give it." + extended_desc = "Note that null pins are ignored, whereas a pin containing 0 is included in the averaging calculation." icon_state = "average" spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -240,7 +240,7 @@ icon_state = "pi" inputs = list() spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - + /obj/item/integrated_circuit/arithmetic/pi/Initialize() . = ..() desc = "Not recommended for cooking. Outputs '[PI]' when it receives a pulse." @@ -276,7 +276,7 @@ /obj/item/integrated_circuit/arithmetic/square_root name = "square root circuit" - desc = "This outputs the square root of a number you input." + desc = "This outputs the square root of the number you input." icon_state = "square_root" inputs = list("A" = IC_PINTYPE_NUMBER) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm index 6937857be0..9382f70066 100644 --- a/code/modules/integrated_electronics/subtypes/converters.dm +++ b/code/modules/integrated_electronics/subtypes/converters.dm @@ -69,7 +69,7 @@ /obj/item/integrated_circuit/converter/refcode name = "reference encoder" - desc = "This circuit can encode a reference into a string, which can then be read by an EPV2 circuit." + desc = "This circuit can encode a reference into a string, which can then be read by a reference decoder circuit." icon_state = "ref-string" inputs = list("input" = IC_PINTYPE_REF) outputs = list("output" = IC_PINTYPE_STRING) @@ -88,7 +88,7 @@ /obj/item/integrated_circuit/converter/refdecode name = "reference decoder" - desc = "This circuit can convert an encoded reference to actual reference." + desc = "This circuit can convert an encoded reference to an actual reference." icon_state = "ref-string" inputs = list("input" = IC_PINTYPE_STRING) outputs = list("output" = IC_PINTYPE_REF) @@ -180,8 +180,8 @@ /obj/item/integrated_circuit/converter/separator name = "separator" - desc = "This splits as single string into two at the relative split point." - extended_desc = "This circuits splits a given string into two, based on the string, and the index value. \ + desc = "This splits a single string into two at the relative split point." + extended_desc = "This circuit splits a given string into two, based on the string and the index value. \ The index splits the string after the given index, including spaces. So 'a person' with an index of '3' \ will split into 'a p' and 'erson'." icon_state = "split" @@ -240,9 +240,10 @@ /obj/item/integrated_circuit/converter/findstring name = "find text" - desc = "This gives position of sample in the string. Or returns 0." + desc = "This outputs the position of the sample in the string, or returns 0." extended_desc = "The first pin is the string to be examined. The second pin is the sample to be found. \ - For example, 'eat this burger' will give you position 4. This circuit isn't case sensitive." + For example, inputting 'my wife has caught on fire' with 'has' as the sample will give you position 9. \ + This circuit isn't case sensitive, and it does not ignore spaces." complexity = 4 inputs = list( "string" = IC_PINTYPE_STRING, @@ -413,7 +414,7 @@ /obj/item/integrated_circuit/converter/rgb2hex name = "rgb to hexadecimal" desc = "This circuit can convert a RGB (Red, Green, Blue) color to a Hexadecimal RGB color." - extended_desc = "The first pin controls red amount, the second pin controls green amount, and the third controls blue amount. All go from 0-255." + extended_desc = "The first pin controls red amount, the second pin controls green amount, and the third controls blue amount. They all go from 0-255." icon_state = "rgb-hex" inputs = list( "red" = IC_PINTYPE_NUMBER, diff --git a/code/modules/integrated_electronics/subtypes/data_transfer.dm b/code/modules/integrated_electronics/subtypes/data_transfer.dm index 481360f6cf..682d982373 100644 --- a/code/modules/integrated_electronics/subtypes/data_transfer.dm +++ b/code/modules/integrated_electronics/subtypes/data_transfer.dm @@ -4,7 +4,7 @@ /obj/item/integrated_circuit/transfer/multiplexer name = "two multiplexer" - desc = "This is what those in the business tend to refer to as a 'mux' or data selector. It moves data from one of the selected inputs to the output." + desc = "This is what those in the business tend to refer to as a 'mux', or data selector. It moves data from one of the selected inputs to the output." extended_desc = "The first input pin is used to select which of the other input pins which has its data moved to the output. \ If the input selection is outside the valid range then no output is given." complexity = 2 @@ -147,7 +147,7 @@ /obj/item/integrated_circuit/transfer/wire_node name = "wire node" - desc = "Just wire node to make wiring more easy.Transfer pulse from in to out." + desc = "Just a wire node to make wiring easier. Transfers the pulse from in to out." icon_state = "wire_node" activators = list("pulse in" = IC_PINTYPE_PULSE_IN, "pulse out" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index c810f87468..70e3bed5a7 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -150,7 +150,7 @@ /obj/item/integrated_circuit/input/slime_scanner name = "slime_scanner" - desc = "A very small version of the xenobio analyser. This allows the machine to know every needed properties of slime. Output mutation list is non associative." + desc = "A very small version of the xenobio analyser. This allows the machine to know every needed properties of slime. Output mutation list is non-associative." icon_state = "medscan_adv" complexity = 12 inputs = list("target" = IC_PINTYPE_REF) @@ -193,8 +193,8 @@ /obj/item/integrated_circuit/input/plant_scanner name = "integrated plant analyzer" - desc = "A very small version of the plant analyser. This allows the machine to know all valuable params of plants in trays. \ - It cannot scan seeds nor fruits, only plants." + desc = "A very small version of the plant analyser. This allows the machine to know all valuable parameters of plants in trays. \ + It can only scan plants, not seeds or fruits." icon_state = "medscan_adv" complexity = 12 inputs = list("target" = IC_PINTYPE_REF) @@ -259,9 +259,9 @@ /obj/item/integrated_circuit/input/gene_scanner name = "gene scanner" - desc = "This circuit will scan plant for traits and reagent genes. Output is non-associative." + desc = "This circuit will scan the target plant for traits and reagent genes. Output is non-associative." extended_desc = "This allows the machine to scan plants in trays for reagent and trait genes. \ - It cannot scan seeds nor fruits, only plants." + It can only scan plants, not seeds or fruits." inputs = list( "target" = IC_PINTYPE_REF ) @@ -358,9 +358,9 @@ /obj/item/integrated_circuit/input/turfpoint name = "Tile pointer" - desc = "This circuit will get tile ref with given absolute coordinates." + desc = "This circuit will get a tile ref with the provided absolute coordinates." extended_desc = "If the machine cannot see the target, it will not be able to calculate the correct direction.\ - This circuit works only inside an assembly." + This circuit only works while inside an assembly." icon_state = "numberpad" complexity = 5 inputs = list("X" = IC_PINTYPE_NUMBER,"Y" = IC_PINTYPE_NUMBER) @@ -461,7 +461,7 @@ /obj/item/integrated_circuit/input/adjacent_locator name = "adjacent locator" desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ - that is standing a meter away from the machine." + that is standing up to a meter away from the machine." extended_desc = "The first pin requires a ref to the kind of object that you want the locator to acquire. This means that it will \ give refs to nearby objects that are similar. If more than one valid object is found nearby, it will choose one of them at \ random." @@ -500,9 +500,9 @@ /obj/item/integrated_circuit/input/advanced_locator_list complexity = 6 name = "list advanced locator" - desc = "This is needed for certain devices that demand list of names for a targets to act upon. This type locates something \ - that is standing in given radius up to 8 meters. Output is non-associative. Input will only consider keys if associative." - extended_desc = "The first pin requires a list of kinds of objects that you want the locator to acquire. It will locate nearby objects by name and description, \ + desc = "This is needed for certain devices that demand list of names for a target to act upon. This type locates something \ + that is standing in given radius of up to 8 meters. Output is non-associative. Input will only consider keys if associative." + extended_desc = "The first pin requires a list of the kinds of objects that you want the locator to acquire. It will locate nearby objects by name and description, \ and will then provide a list of all found objects which are similar. \ The second pin is a radius." inputs = list("desired type ref" = IC_PINTYPE_LIST, "radius" = IC_PINTYPE_NUMBER) @@ -564,10 +564,10 @@ complexity = 6 name = "advanced locator" desc = "This is needed for certain devices that demand a reference for a target to act upon. This type locates something \ - that is standing in given radius up to 8 meters" - extended_desc = "The first pin requires a ref to a kind of object that you want the locator to acquire. This means that it will \ - give refs to nearby objects which are similar. If this pin is string, this locator will search for an \ - item by matching desired text in it's name and description. If more than one valid object is found nearby, it will choose one of them at \ + that is standing in given radius of up to 8 meters" + extended_desc = "The first pin requires a ref to the kind of object that you want the locator to acquire. This means that it will \ + give refs to nearby objects which are similar. If this pin is a string, the locator will search for an \ + item matching the desired text in its name and description. If more than one valid object is found nearby, it will choose one of them at \ random. The second pin is a radius." inputs = list("desired type" = IC_PINTYPE_ANY, "radius" = IC_PINTYPE_NUMBER) outputs = list("located ref" = IC_PINTYPE_REF) @@ -617,7 +617,7 @@ /obj/item/integrated_circuit/input/signaler name = "integrated signaler" - desc = "Signals from a signaler can be received with this, allowing for remote control. Additionally, it can send signals as well." + desc = "Signals from a signaler can be received with this, allowing for remote control. It can also send signals." extended_desc = "When a signal is received from another signaler, the 'on signal received' activator pin will be pulsed. \ The two input pins are to configure the integrated signaler's settings. Note that the frequency should not have a decimal in it, \ meaning the default frequency is expressed as 1457, not 145.7. To send a signal, pulse the 'send signal' activator pin." @@ -699,11 +699,11 @@ /obj/item/integrated_circuit/input/ntnet_packet name = "NTNet networking circuit" - desc = "Enables the sending and receiving of messages on NTNet via packet data protocol." - extended_desc = "Data can be send or received using the second pin on each side, \ + desc = "Enables the sending and receiving of messages over NTNet via packet data protocol." + extended_desc = "Data can be sent or received using the second pin on each side, \ with additonal data reserved for the third pin. When a message is received, the second activation pin \ - will pulse whatever's connected to it. Pulsing the first activation pin will send a message. Message \ - can be send to multiple recepients. Addresses must be separated with ; symbol." + will pulse whatever is connected to it. Pulsing the first activation pin will send a message. Messages \ + can be sent to multiple recepients. Addresses must be separated with a semicolon, like this: Address1;Address2;Etc." icon_state = "signal" complexity = 2 cooldown_per_use = 1 @@ -756,11 +756,11 @@ /obj/item/integrated_circuit/input/ntnet_advanced name = "Low level NTNet transreciever" - desc = "Enables the sending and receiving of messages on NTNet via packet data protocol. Allows advanced control of message contents and signalling. Must use associative lists. Outputs associative list. Has a slower transmission rate than normal NTNet circuits, due to increased data processing complexity.." - extended_desc = "Data can be send or received using the second pin on each side, \ + desc = "Enables the sending and receiving of messages over NTNet via packet data protocol. Allows advanced control of message contents and signalling. Must use associative lists. Outputs associative list. Has a slower transmission rate than normal NTNet circuits, due to increased data processing complexity." + extended_desc = "Data can be sent or received using the second pin on each side, \ with additonal data reserved for the third pin. When a message is received, the second activation pin \ - will pulse whatever's connected to it. Pulsing the first activation pin will send a message. Message \ - can be send to multiple recepients. Addresses must be separated with ; symbol." + will pulse whatever is connected to it. Pulsing the first activation pin will send a message. Messages \ + can be sent to multiple recepients. Addresses must be separated with a semicolon, like this: Address1;Address2;Etc." icon_state = "signal" complexity = 4 cooldown_per_use = 10 @@ -802,7 +802,7 @@ /obj/item/integrated_circuit/input/gps name = "global positioning system" desc = "This allows you to easily know the position of a machine containing this device." - extended_desc = "The GPS's coordinates it gives is absolute, not relative." + extended_desc = "The coordinates that the GPS outputs are absolute, not relative." icon_state = "gps" complexity = 4 inputs = list() @@ -829,7 +829,7 @@ /obj/item/integrated_circuit/input/microphone name = "microphone" - desc = "Useful for spying on people or for voice activated machines." + desc = "Useful for spying on people, or for voice-activated machines." extended_desc = "This will automatically translate most languages it hears to Galactic Common. \ The first activation pin is always pulsed when the circuit hears someone talk, while the second one \ is only triggered if it hears someone speaking a language other than Galactic Common." @@ -921,7 +921,7 @@ /obj/item/integrated_circuit/input/obj_scanner name = "scanner" desc = "Scans and obtains a reference for any objects you use on the assembly." - extended_desc = "If the 'put down' pin is set to true, the assembly will take the scanned object from your hands to it's location. \ + extended_desc = "If the 'put down' pin is set to true, the assembly will take the scanned object from your hands to its location. \ Useful for interaction with the grabber. The scanner only works using the help intent." icon_state = "recorder" complexity = 4 @@ -948,7 +948,7 @@ name = "internal battery monitor" desc = "This monitors the charge level of an internal battery." icon_state = "internalbm" - extended_desc = "This circuit will give you values of charge, max charge, and percentage of the internal battery on demand." + extended_desc = "This circuit will give you the values of charge, max charge, and the current percentage of the internal battery on demand." w_class = WEIGHT_CLASS_TINY complexity = 1 inputs = list() @@ -981,9 +981,9 @@ /obj/item/integrated_circuit/input/externalbm name = "external battery monitor" - desc = "This can help to watch battery state of any device in view" + desc = "This can read the battery state of any device in view." icon_state = "externalbm" - extended_desc = "This circuit will give you values of charge, max charge, and percentage of any device or battery in view" + extended_desc = "This circuit will give you the charge, max charge, and the current percentage values of any device or battery in view." w_class = WEIGHT_CLASS_TINY complexity = 2 inputs = list("target" = IC_PINTYPE_REF) @@ -1016,7 +1016,7 @@ /obj/item/integrated_circuit/input/ntnetsc name = "NTNet scanner" - desc = "This can return NTNet IDs of a component inside the given object, if there are any." + desc = "This can return the NTNet IDs of a component inside the given object, if there are any." icon_state = "signalsc" w_class = WEIGHT_CLASS_TINY complexity = 2 diff --git a/code/modules/integrated_electronics/subtypes/lists.dm b/code/modules/integrated_electronics/subtypes/lists.dm index c9744cc41c..a5c482c7de 100644 --- a/code/modules/integrated_electronics/subtypes/lists.dm +++ b/code/modules/integrated_electronics/subtypes/lists.dm @@ -17,8 +17,8 @@ /obj/item/integrated_circuit/lists/pick name = "pick circuit" - desc = "This circuit will pick a random element from the input list, and output said element." - extended_desc = "Input list is unmodified." + desc = "This circuit will pick a random element from the input list, and output that element." + extended_desc = "The input list is not modified." icon_state = "addition" outputs = list( "result" = IC_PINTYPE_ANY @@ -70,7 +70,7 @@ /obj/item/integrated_circuit/lists/search name = "search circuit" desc = "This circuit will get the index location of the desired element in a list." - extended_desc = "Search will start at 1 position and will return first matching position." + extended_desc = "Search will start at position 1 and will return the first matching position." inputs = list( "list" = IC_PINTYPE_LIST, "item" = IC_PINTYPE_ANY @@ -104,8 +104,8 @@ /obj/item/integrated_circuit/lists/filter name = "filter circuit" desc = "This circuit will search through a list for anything matching the desired element(s) and outputs two lists: \ - one containing just matching elements, and one with matching elements filtered out." - extended_desc = "Sample accepts lists. If no match is found, original list is sent to output 1." + one containing only the matching elements, and one with the matching elements filtered out." + extended_desc = "Sample accepts lists. If no match is found, the original list is sent to output 1." inputs = list( "input list" = IC_PINTYPE_LIST, "sample" = IC_PINTYPE_ANY @@ -168,7 +168,7 @@ /obj/item/integrated_circuit/lists/listset name = "list set circuit" desc = "This circuit will remove any duplicate entries from a list." - extended_desc = "If there are no duplicate entries, result list will be unchanged." + extended_desc = "If there are no duplicate entries, the output list will be unchanged." inputs = list( "list" = IC_PINTYPE_LIST ) @@ -189,7 +189,7 @@ /obj/item/integrated_circuit/lists/at name = "at circuit" desc = "This circuit will pick an element from a list by the input index." - extended_desc = "If there is no element with such index, result will be null." + extended_desc = "If there is no element at the given index, the result will be null." inputs = list( "list" = IC_PINTYPE_LIST, "index" = IC_PINTYPE_INDEX @@ -225,7 +225,7 @@ /obj/item/integrated_circuit/lists/delete name = "delete circuit" desc = "This circuit will remove an element from a list by the index." - extended_desc = "If there is no element with such index, result list will be unchanged." + extended_desc = "If there is no element at the given index, the result list will be unchanged." inputs = list( "list" = IC_PINTYPE_LIST, "index" = IC_PINTYPE_INDEX @@ -254,7 +254,7 @@ /obj/item/integrated_circuit/lists/write name = "write circuit" desc = "This circuit will write an element to a list at the given index location." - extended_desc = "If there is no element with such index, it will give the same list as before." + extended_desc = "If there is no element at the given index, it will output the same list as before." inputs = list( "list" = IC_PINTYPE_LIST, "index" = IC_PINTYPE_INDEX, @@ -313,7 +313,7 @@ /obj/item/integrated_circuit/lists/jointext name = "join text circuit" - desc = "This circuit will combine two lists into one and output it as a string." + desc = "This circuit will combine two lists into one, and output it as a string." extended_desc = "Default settings will encode the entire list into a string." icon_state = "join" inputs = list( @@ -351,7 +351,7 @@ /obj/item/integrated_circuit/lists/constructor name = "large list constructor" - desc = "This circuit will build a list out of sixteen input values." + desc = "This circuit will build a list out of up to sixteen input values." icon_state = "constr8" inputs = list() outputs = list( @@ -383,20 +383,20 @@ /obj/item/integrated_circuit/lists/constructor/small name = "list constructor" - desc = "This circuit will build a list out of four input values." + desc = "This circuit will build a list out of up to four input values." icon_state = "constr" number_of_pins = 4 /obj/item/integrated_circuit/lists/constructor/medium name = "medium list constructor" - desc = "This circuit will build a list out of eight input values." + desc = "This circuit will build a list out of up to eight input values." icon_state = "constr8" number_of_pins = 8 /obj/item/integrated_circuit/lists/deconstructor name = "large list deconstructor" - desc = "This circuit will write first sixteen entries of input list, starting with index, into the output values." + desc = "This circuit will write the first sixteen entries of its input list, starting with the index, into the output values." icon_state = "deconstr8" inputs = list( "input" = IC_PINTYPE_LIST, @@ -428,11 +428,11 @@ /obj/item/integrated_circuit/lists/deconstructor/small name = "list deconstructor" - desc = "This circuit will write first four entries of input list, starting with index, into the output values." + desc = "This circuit will write the first four entries of its input list, starting with the index, into the output values." icon_state = "deconstr" number_of_pins = 4 /obj/item/integrated_circuit/lists/deconstructor/medium name = "medium list deconstructor" - desc = "This circuit will write first eight entries of input list, starting with index, into the output values." + desc = "This circuit will write the first eight entries of its input list, starting with the index, into the output values." number_of_pins = 8 diff --git a/code/modules/integrated_electronics/subtypes/logic.dm b/code/modules/integrated_electronics/subtypes/logic.dm index 41917f2a44..e9dca8c330 100644 --- a/code/modules/integrated_electronics/subtypes/logic.dm +++ b/code/modules/integrated_electronics/subtypes/logic.dm @@ -89,7 +89,7 @@ /obj/item/integrated_circuit/logic/binary/rslatch name = "RS latch" - desc = "This gate is a synchronized RS latch. If both R and S are true, state will not change." + desc = "This gate is a synchronized RS latch. If both R and S are true, its state will not change." icon_state = "sr_nor" inputs = list("S" = IC_PINTYPE_ANY,"R" = IC_PINTYPE_ANY) outputs = list("Q" = IC_PINTYPE_BOOLEAN,"!Q" = IC_PINTYPE_BOOLEAN) diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index db859ab649..f4cc363afb 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -6,8 +6,9 @@ desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it." extended_desc = "The firing mechanism can slot in any energy weapon. \ The first and second inputs need to be numbers which correspond to coordinates for the gun to fire at relative to the machine itself. \ - The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode is switch between \ - lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon." + The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode will switch between \ + lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon itself, not the assembly. If you wish to fire the gun while the circuit is in \ + hand, you will need to use an assembly that is a gun." complexity = 20 w_class = WEIGHT_CLASS_SMALL size = 3 @@ -80,7 +81,7 @@ /obj/item/integrated_circuit/manipulation/weapon_firing/do_work() if(!installed_gun || !installed_gun.handle_pins()) return - if(!isturf(assembly.loc)) + if(!isturf(assembly.loc) && !(assembly.can_fire_equipped && ishuman(assembly.loc))) return set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun)) push_data() @@ -99,6 +100,7 @@ var/target_x = CLAMP(T.x + xo.data, 0, world.maxx) var/target_y = CLAMP(T.y + yo.data, 0, world.maxy) + assembly.visible_message("[assembly] fires [installed_gun]!") shootAt(locate(target_x, target_y, T.z)) /obj/item/integrated_circuit/manipulation/weapon_firing/proc/shootAt(turf/target) @@ -134,8 +136,8 @@ desc = "This allows a machine to move in a given direction." icon_state = "locomotion" extended_desc = "The circuit accepts a 'dir' number as a direction to move towards.
\ - Pulsing the 'step towards dir' activator pin will cause the machine to move a meter in that direction, assuming it is not \ - being held, or anchored in some way. It should be noted that the ability to move is dependant on the type of assembly that this circuit inhabits." + Pulsing the 'step towards dir' activator pin will cause the machine to move one step in that direction, assuming it is not \ + being held, or anchored in some way. It should be noted that the ability to move is dependant on the type of assembly that this circuit inhabits; only drone assemblies can move." w_class = WEIGHT_CLASS_SMALL complexity = 10 cooldown_per_use = 1 @@ -169,9 +171,9 @@ /obj/item/integrated_circuit/manipulation/grenade name = "grenade primer" desc = "This circuit comes with the ability to attach most types of grenades and prime them at will." - extended_desc = "Time between priming and detonation is limited to between 1 to 12 seconds but is optional. \ - If unset, not a number, or a number less than 1 then the grenade's built-in timing will be used. \ - Beware: Once primed there is no aborting the process!" + extended_desc = "The time between priming and detonation is limited to between 1 to 12 seconds, but is optional. \ + If the input is not set, not a number, or a number less than 1, the grenade's built-in timing will be used. \ + Beware: Once primed, there is no aborting the process!" icon_state = "grenade" complexity = 30 cooldown_per_use = 10 @@ -243,9 +245,9 @@ name = "plant manipulation module" desc = "Used to uproot weeds and harvest/plant trays." icon_state = "plant_m" - extended_desc = "The circuit accepts a reference to a hydroponic tray or an item in an adjacent tile. \ - Mode input(0-harvest, 1-uproot weeds, 2-uproot plant, 3-plant seed) determines action. \ - Harvesting returns a list of the harvested plants." + extended_desc = "The circuit accepts a reference to a hydroponic tray or an item on an adjacent tile. \ + Mode input (0-harvest, 1-uproot weeds, 2-uproot plant, 3-plant seed) determines action. \ + Harvesting outputs a list of the harvested plants." w_class = WEIGHT_CLASS_TINY complexity = 10 inputs = list("tray" = IC_PINTYPE_REF,"mode" = IC_PINTYPE_NUMBER,"item" = IC_PINTYPE_REF) @@ -345,9 +347,9 @@ /obj/item/integrated_circuit/manipulation/grabber name = "grabber" - desc = "A circuit with it's own inventory for items, used to grab and store things." + desc = "A circuit with its own inventory for items. Used to grab and store things." icon_state = "grabber" - extended_desc = "The circuit accepts a reference to an object to be grabbed and can store up to 10 objects. Modes: 1 to grab, 0 to eject the first object, and -1 to eject all objects." + extended_desc = "This circuit accepts a reference to an object to be grabbed, and can store up to 10 objects. Modes: 1 to grab, 0 to eject the first object, and -1 to eject all objects. If you throw something from a grabber's inventory with a thrower, the grabber will update its outputs accordingly." w_class = WEIGHT_CLASS_SMALL size = 3 cooldown_per_use = 5 @@ -384,6 +386,10 @@ var/obj/item/U for(U in contents) U.forceMove(T) + update_outputs() + activate_pin(2) + +/obj/item/integrated_circuit/manipulation/grabber/proc/update_outputs() if(contents.len) set_pin_data(IC_OUTPUT, 1, WEAKREF(contents[1])) set_pin_data(IC_OUTPUT, 2, WEAKREF(contents[contents.len])) @@ -393,7 +399,6 @@ set_pin_data(IC_OUTPUT, 3, contents.len) set_pin_data(IC_OUTPUT, 4, contents) push_data() - activate_pin(2) /obj/item/integrated_circuit/manipulation/grabber/attack_self(var/mob/user) if(contents.len) @@ -401,16 +406,14 @@ var/obj/item/U for(U in contents) U.forceMove(T) - set_pin_data(IC_OUTPUT, 1, null) - set_pin_data(IC_OUTPUT, 2, null) - set_pin_data(IC_OUTPUT, 3, contents.len) + update_outputs() push_data() /obj/item/integrated_circuit/manipulation/claw name = "pulling claw" desc = "Circuit which can pull things.." icon_state = "pull_claw" - extended_desc = "The circuit accepts a reference to thing to be pulled. Modes: 0 for release. 1 for pull." + extended_desc = "This circuit accepts a reference to a thing to be pulled. Modes: 0 for release. 1 for pull." w_class = WEIGHT_CLASS_SMALL size = 3 cooldown_per_use = 5 @@ -464,9 +467,10 @@ /obj/item/integrated_circuit/manipulation/thrower name = "thrower" desc = "A compact launcher to throw things from inside or nearby tiles." - extended_desc = "The first and second inputs need to be numbers which correspond to coordinates to throw objects at relative to the machine itself. \ + extended_desc = "The first and second inputs need to be numbers which correspond to the coordinates to throw objects at relative to the machine itself. \ The 'fire' activator will cause the mechanism to attempt to throw objects at the coordinates, if possible. Note that the \ - projectile need to be inside the machine, or to be on an adjacent tile, and must be medium sized or smaller." + projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \ + must also be a gun if you wish to throw something while the assembly is in hand." complexity = 25 w_class = WEIGHT_CLASS_SMALL size = 2 @@ -497,6 +501,9 @@ if(max_w_class && (A.w_class > max_w_class)) return + if(!assembly.can_fire_equipped && ishuman(assembly.loc)) + return + // Is the target inside the assembly or close to it? if(!check_target(A, exclude_components = TRUE)) return @@ -511,13 +518,21 @@ if(!M.temporarilyRemoveItemFromInventory(A)) return + // If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it. + var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc + var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx) var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy) var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) + assembly.visible_message("[assembly] has thrown [A]!") A.forceMove(drop_location()) A.throw_at(locate(x_abs, y_abs, T.z), range, 3) + // If the item came from a grabber now we can update the outputs since we've thrown it. + if(G) + G.update_outputs() + /obj/item/integrated_circuit/manipulation/matman name = "material manager" desc = "This circuit is designed for automatic storage and distribution of materials." diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index e43401f2a8..fe74657532 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -56,14 +56,14 @@ /obj/item/integrated_circuit/memory/large name = "large memory circuit" - desc = "This big circuit can hold eight pieces of data." + desc = "This big circuit can store eight pieces of data." icon_state = "memory8" power_draw_per_use = 4 number_of_pins = 8 /obj/item/integrated_circuit/memory/huge name = "large memory stick" - desc = "This stick of memory can hold up up to sixteen pieces of data." + desc = "This stick of memory can store up up to sixteen pieces of data." icon_state = "memory16" w_class = WEIGHT_CLASS_SMALL spawn_flags = IC_SPAWN_RESEARCH diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 6f7fd6eef5..2d820b016e 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -92,7 +92,7 @@ /obj/item/integrated_circuit/output/light/advanced name = "advanced light" - desc = "A light that takes a hexadecimal color value and a brightness value, and can be toggled on/off with a pulse." + desc = "A light that takes a hexadecimal color value and a brightness value, and can be toggled on/off by pulsing it." icon_state = "light_adv" complexity = 8 inputs = list( diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm index 018cd71006..e760b21f72 100644 --- a/code/modules/integrated_electronics/subtypes/power.dm +++ b/code/modules/integrated_electronics/subtypes/power.dm @@ -28,8 +28,8 @@ extended_desc = "This circuit transmits 20 kJ of electricity every time the activator pin is pulsed. The input pin must be \ a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ - some power is lost due to ineffiency.Warning!Don't stack more than 1 power transmittors.it becomes less efficient for every other \ - transmission circuit in its own assembly and other nearby ones. " + some power is lost due to ineffiency. Warning! Don't stack more than 1 power transmitter, as it becomes less efficient for every other \ + transmission circuit in its own assembly and other nearby ones." w_class = WEIGHT_CLASS_BULKY complexity = 32 power_draw_per_use = 2000 diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 9f57dd6f43..73d162ff3a 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -21,7 +21,7 @@ desc = "Unlike most electronics, creating smoke is completely intentional." icon_state = "smoke" extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \ - into the smoke clouds when activated. The reagents are consumed when smoke is made." + into the smoke clouds when activated. The reagents are consumed when the smoke is made." ext_cooldown = 1 container_type = OPENCONTAINER volume = 100 @@ -99,10 +99,10 @@ /obj/item/integrated_circuit/reagent/injector name = "integrated hypo-injector" - desc = "This scary looking thing is able to pump liquids into whatever it's pointed at." + desc = "This scary looking thing is able to pump liquids into, or suck liquids out of, whatever it's pointed at." icon_state = "injector" - extended_desc = "This autoinjector can push reagents into another container or someone else outside of the machine. The target \ - must be adjacent to the machine, and if it is a person, they cannot be wearing thick clothing. Negative given amount makes injector suck out reagents." + extended_desc = "This autoinjector can push up to 30 units of reagents into another container or someone else outside of the machine. The target \ + must be adjacent to the machine, and if it is a person, they cannot be wearing thick clothing. Negative given amounts makes the injector suck out reagents instead." container_type = OPENCONTAINER volume = 30 @@ -252,7 +252,7 @@ icon_state = "reagent_pump" extended_desc = "This is a pump which will move liquids from the source ref to the target ref. The third pin determines \ how much liquid is moved per pulse, between 0 and 50. The pump can move reagents to any open container inside the machine, or \ - outside the machine if it is next to the machine." + outside the machine if it is adjacent to the machine." complexity = 8 inputs = list("source" = IC_PINTYPE_REF, "target" = IC_PINTYPE_REF, "injection amount" = IC_PINTYPE_NUMBER) @@ -346,7 +346,7 @@ /obj/item/integrated_circuit/reagent/storage/cryo name = "cryo reagent storage" - desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. This will also suppress reactions." + desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. This will also prevent reactions." icon_state = "reagent_storage_cryo" extended_desc = "This is effectively an internal cryo beaker." @@ -359,7 +359,7 @@ /obj/item/integrated_circuit/reagent/storage/grinder name = "reagent grinder" - desc = "This is reagent grinder. It accepts a ref to something and refines it into reagents. It can store up to 100u." + desc = "This is a reagent grinder. It accepts a ref to something, and refines it into reagents. It can store up to 100u." icon_state = "blender" extended_desc = "" inputs = list( @@ -406,7 +406,7 @@ obj/item/integrated_circuit/reagent/storage/juicer name = "reagent juicer" - desc = "This is reagent juicer. It accepts a ref to something and refines it into reagents. It can store up to 100u." + desc = "This is a reagent juicer. It accepts a ref to something and refines it into reagents. It can store up to 100u." icon_state = "blender" extended_desc = "" inputs = list( @@ -454,7 +454,7 @@ obj/item/integrated_circuit/reagent/storage/juicer name = "reagent scanner" desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. On pulse this beaker will send list of contained reagents." icon_state = "reagent_scan" - extended_desc = "Mostly useful for reagent filter." + extended_desc = "Mostly useful for filtering reagents." complexity = 8 outputs = list( @@ -482,12 +482,12 @@ obj/item/integrated_circuit/reagent/storage/juicer /obj/item/integrated_circuit/reagent/filter name = "reagent filter" - desc = "Filtering liquids by list of desired or unwanted reagents." + desc = "Filters liquids by list of desired or unwanted reagents." icon_state = "reagent_filter" - extended_desc = "This is a filter which will move liquids from the source to the target. \ - It will move all reagents, except those in the unwanted list, given the fourth pin if amount value is positive, \ - or it will move only desired reagents if amount is negative. The third pin determines \ - how much reagent is moved per pulse, between 0 and 50. Amount is given for each separate reagent." + extended_desc = "This is a filter which will move liquids from the source to its target. \ + If the amount in the fourth pin is positive, it will move all reagents except those in the unwanted list. \ + If the amount in the fourth pin is negative, it will only move the reagents in the wanted list. \ + The third pin determines how many reagents are moved per pulse, between 0 and 50. Amount is given for each separate reagent." complexity = 8 inputs = list( diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index e0775f1a23..4445c1e1f3 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -37,10 +37,11 @@ activate_pin(2) /obj/item/integrated_circuit/smart/coord_basic_pathfinder - name = "coordinte pathfinder" + name = "coordinate pathfinder" desc = "This complex circuit is able to determine what direction a given target is." - extended_desc = "This circuit uses absolute coordintes to determine where the target is. If the machine \ - cannot see the target, it will not be able to calculate the correct direction.This circuit is working only in assembly." + extended_desc = "This circuit uses absolute coordinates to determine where the target is. If the machine \ + cannot see the target, it will not be able to calculate the correct direction. \ + This circuit will only work while inside an assembly." icon_state = "numberpad" complexity = 5 inputs = list("X" = IC_PINTYPE_NUMBER,"Y" = IC_PINTYPE_NUMBER,"ignore obstacles" = IC_PINTYPE_BOOLEAN) @@ -74,8 +75,8 @@ /obj/item/integrated_circuit/smart/advanced_pathfinder name = "advanced pathfinder" desc = "This circuit uses a complex processor for long-range pathfinding." - extended_desc = "This circuit uses absolute coordinates for target. A path will be generated taking obstacle input into account, \ - pathing around any instances of said input. The passkey provided from a card reader is used to create a valid path through doorways." + extended_desc = "This circuit uses absolute coordinates to find its target. A path will be generated to the target, taking obstacles into account, \ + and pathing around any instances of said input. The passkey provided from a card reader is used to calculate a valid path through airlocks." icon_state = "numberpad" complexity = 40 cooldown_per_use = 50 @@ -117,4 +118,4 @@ set_pin_data(IC_OUTPUT, 1, Xn) set_pin_data(IC_OUTPUT, 2, Yn) push_data() - activate_pin(2) \ No newline at end of file + activate_pin(2) diff --git a/code/modules/integrated_electronics/subtypes/time.dm b/code/modules/integrated_electronics/subtypes/time.dm index 26bd1fc1d6..f72f5dbd74 100644 --- a/code/modules/integrated_electronics/subtypes/time.dm +++ b/code/modules/integrated_electronics/subtypes/time.dm @@ -53,8 +53,10 @@ /obj/item/integrated_circuit/time/delay/custom name = "custom delay circuit" - desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \ - This circuit's delay can be customized, between 1/10th of a second to one hour. The delay is updated upon receiving a pulse." + desc = "This sends a pulse signal out after a delay defined in tenths of a second, critical for ensuring proper control \ + flow in a complex machine. This circuit's delay can be customized, between 1/10th of a second to one hour. \ + The delay is updated upon receiving a pulse." + extended_desc = "The delay is defined in tenths of a second. For instance, 4 will be a delay of 0.4 seconds, or 15 for 1.5 seconds." icon_state = "delay" inputs = list("delay time" = IC_PINTYPE_NUMBER) spawn_flags = IC_SPAWN_RESEARCH @@ -104,7 +106,9 @@ /obj/item/integrated_circuit/time/ticker/custom name = "custom ticker" - desc = "This advanced circuit sends an automatic pulse every given interval." + desc = "This advanced circuit sends an automatic pulse every given interval, defined in tenths of a second." + extended_desc ="This advanced circuit sends an automatic pulse every given interval, defined in tenths of a second. \ + For example, setting the time pin to 4 will send a pulse every 0.4 seconds, or 15 for every 1.5 seconds." icon_state = "tick-f" complexity = 8 delay = 2 SECONDS @@ -115,7 +119,7 @@ /obj/item/integrated_circuit/time/ticker/custom/on_data_written() var/delay_input = get_pin_data(IC_INPUT, 2) if(delay_input && isnum(delay_input) ) - var/new_delay = CLAMP(delay_input ,1 ,1 HOURS) + var/new_delay = CLAMP(delay_input ,1 ,1 HOURS) delay = new_delay ..() diff --git a/code/modules/keybindings/readme.md b/code/modules/keybindings/readme.md index 1170804436..6c0369d7c7 100644 --- a/code/modules/keybindings/readme.md +++ b/code/modules/keybindings/readme.md @@ -1,7 +1,7 @@ # In-code keypress handling system This whole system is heavily based off of forum_account's keyboard library. -Thanks to forum_account for saving the day, the library can be found [here](http://www.byond.com/developer/Forum_account/Keyboard)! +Thanks to forum_account for saving the day, the library can be found [here](https://secure.byond.com/developer/Forum_account/Keyboard)! .dmf macros have some very serious shortcomings. For example, they do not allow reusing parts of one macro in another, so giving cyborgs their own shortcuts to swap active module couldn't diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index f566a8f4a9..0f84d11082 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -7,20 +7,23 @@ desc = "Controls a stacking machine... in theory." density = FALSE anchored = TRUE - var/obj/machinery/mineral/stacking_machine/machine = null + circuit = /obj/item/circuitboard/machine/stacking_unit_console + var/obj/machinery/mineral/stacking_machine/machine var/machinedir = SOUTHEAST - speed_process = TRUE /obj/machinery/mineral/stacking_unit_console/Initialize() . = ..() machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) if (machine) machine.CONSOLE = src - else - qdel(src) /obj/machinery/mineral/stacking_unit_console/ui_interact(mob/user) . = ..() + + if(!machine) + to_chat(user, "[src] is not linked to a machine!") + return + var/obj/item/stack/sheet/s var/dat @@ -35,6 +38,13 @@ user << browse(dat, "window=console_stacking_machine") +/obj/machinery/mineral/stacking_unit_console/multitool_act(mob/living/user, obj/item/I) + if(istype(I, /obj/item/multitool)) + var/obj/item/multitool/M = I + M.buffer = src + to_chat(user, "You store linkage information in [I]'s buffer.") + return TRUE + /obj/machinery/mineral/stacking_unit_console/Topic(href, href_list) if(..()) return @@ -62,6 +72,7 @@ desc = "A machine that automatically stacks acquired materials. Controlled by a nearby console." density = TRUE anchored = TRUE + circuit = /obj/item/circuitboard/machine/stacking_machine var/obj/machinery/mineral/stacking_unit_console/CONSOLE var/stk_types = list() var/stk_amt = list() @@ -78,6 +89,18 @@ if(istype(AM, /obj/item/stack/sheet) && AM.loc == get_step(src, input_dir)) process_sheet(AM) +/obj/machinery/mineral/stacking_machine/multitool_act(mob/living/user, obj/item/I) + if(istype(I, /obj/item/multitool)) + var/obj/item/multitool/M = I + if(!istype(M.buffer, /obj/machinery/mineral/stacking_unit_console)) + to_chat(user, "The [I] has no linkage data in its buffer.") + return FALSE + else + CONSOLE = M.buffer + CONSOLE.machine = src + to_chat(user, "You link [src] to the console in [I]'s buffer.") + return TRUE + /obj/machinery/mineral/stacking_machine/proc/process_sheet(obj/item/stack/sheet/inp) if(!(inp.type in stack_list)) //It's the first of this sheet added var/obj/item/stack/sheet/s = new inp.type(src, 0) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 6ca1eb0218..6758f7aac7 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1559,9 +1559,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.gain_trauma(/datum/brain_trauma/mild/concussion) else if(!I.is_sharp()) - H.adjustBrainLoss(I.force / 5) + H.adjustBrainLoss(I.force * 0.2) - if(prob(I.force + ((100 - H.health)/2)) && H != user) + if(!I.is_sharp() && prob(I.force + ((100 - H.health) * 0.5)) && H != user) // rev deconversion through blunt trauma. var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev) if(rev) rev.remove_revolutionary(FALSE, user) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 8194296099..6b72506c02 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -207,9 +207,9 @@ if(breath_gases[/datum/gas/bz]) var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.total_moles())*breath_pressure if(bz_partialpressure > 1) - hallucination += 20 + hallucination += 10 else if(bz_partialpressure > 0.01) - hallucination += 5//Removed at 2 per tick so this will slowly build up + hallucination += 5 //TRITIUM if(breath_gases[/datum/gas/tritium]) var/tritium_partialpressure = (breath_gases[/datum/gas/tritium][MOLES]/breath.total_moles())*breath_pressure diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e4aee188e0..abf8302590 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -494,7 +494,7 @@ update_canmove() GET_COMPONENT(mood, /datum/component/mood) if (mood) - QDEL_LIST(mood.mood_events) + QDEL_LIST_ASSOC_VAL(mood.mood_events) mood.sanity = SANITY_GREAT mood.update_mood() @@ -941,7 +941,7 @@ /mob/living/rad_act(amount) . = ..() - if(!amount || amount < RAD_MOB_SKIN_PROTECTION) + if(!amount || (amount < RAD_MOB_SKIN_PROTECTION) || has_trait(TRAIT_RADIMMUNE)) return amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index b70547b917..bc8dd0c3ab 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -148,9 +148,14 @@ if(loc == get_turf(target)) if(!(check_bot(target) && prob(50))) //Target is not defined at the parent. 50% chance to still try and clean so we dont get stuck on the last blood drop. UnarmedAttack(target) //Rather than check at every step of the way, let's check before we do an action, so we can rescan before the other bot. + if(QDELETED(target)) //We done here. + target = null + mode = BOT_IDLE + return else shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way. path = list() + if(!path || path.len == 0) //No path, need a new one //Try to produce a path to the target, and ignore airlocks to which it has access. path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 0a0f27f123..47de9a0896 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -204,8 +204,25 @@ /mob/living/proc/has_quirk(quirk) return roundstart_quirks[quirk] -/mob/living/proc/remove_all_traits() - status_traits = list() +/mob/living/proc/remove_all_traits(remove_species_traits = FALSE, remove_organ_traits = FALSE, remove_quirks = FALSE) + + var/list/blacklisted_sources = list() + if(!remove_species_traits) + blacklisted_sources += SPECIES_TRAIT + if(!remove_organ_traits) + blacklisted_sources += ORGAN_TRAIT + if(!remove_quirks) + blacklisted_sources += ROUNDSTART_TRAIT + + for(var/kebab in status_traits) + var/skip + for(var/S in blacklisted_sources) + if(S in status_traits[kebab]) + skip = TRUE + break + if(!skip) + remove_trait(kebab, null, TRUE) + CHECK_TICK /////////////////////////////////// TRAIT PROCS //////////////////////////////////// diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9d5e5955e7..c98f3f4afb 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -289,7 +289,7 @@ /mob/proc/show_inv(mob/user) return -//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() +//mob verbs are faster than object verbs. See https://secure.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() /mob/verb/examinate(atom/A as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why set name = "Examine" set category = "IC" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index d4e92ac43a..776dbf07d6 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -105,6 +105,9 @@ /obj/machinery/power/apc/unlocked locked = FALSE + +/obj/machinery/power/apc/syndicate //general syndicate access + req_access = list(ACCESS_SYNDICATE) /obj/machinery/power/apc/highcap/five_k cell_type = /obj/item/stock_parts/cell/upgraded/plus diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm index 343d62c283..9457026261 100644 --- a/code/modules/projectiles/ammunition/caseless/foam.dm +++ b/code/modules/projectiles/ammunition/caseless/foam.dm @@ -5,8 +5,9 @@ caliber = "foam_force" icon = 'icons/obj/guns/toy.dmi' icon_state = "foamdart" - var/modified = 0 + materials = list(MAT_METAL = 11.25) harmful = FALSE + var/modified = FALSE /obj/item/ammo_casing/caseless/foam_dart/update_icon() ..() @@ -25,8 +26,8 @@ /obj/item/ammo_casing/caseless/foam_dart/attackby(obj/item/A, mob/user, params) var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB if (istype(A, /obj/item/screwdriver) && !modified) - modified = 1 - FD.modified = 1 + modified = TRUE + FD.modified = TRUE FD.damage_type = BRUTE to_chat(user, "You pop the safety cap off [src].") update_icon() @@ -38,7 +39,7 @@ return FD.pen = A FD.damage = 5 - FD.nodamage = 0 + FD.nodamage = FALSE to_chat(user, "You insert [A] into [src].") else to_chat(user, "There's already something in [src].") @@ -61,4 +62,4 @@ desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/riot icon_state = "foamdart_riot" - materials = list(MAT_METAL = 1000) + materials = list(MAT_METAL = 1125) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 44bc721d59..c05f05ae59 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -60,7 +60,9 @@ icon_state = "foambox" ammo_type = /obj/item/ammo_casing/caseless/foam_dart max_ammo = 40 + materials = list(MAT_METAL = 500) /obj/item/ammo_box/foambox/riot icon_state = "foambox_riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot \ No newline at end of file + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot + materials = list(MAT_METAL = 50000) \ No newline at end of file diff --git a/code/modules/projectiles/projectile/reusable/foam_dart.dm b/code/modules/projectiles/projectile/reusable/foam_dart.dm index c7f99c75aa..d360c4f4c7 100644 --- a/code/modules/projectiles/projectile/reusable/foam_dart.dm +++ b/code/modules/projectiles/projectile/reusable/foam_dart.dm @@ -3,12 +3,12 @@ desc = "I hope you're wearing eye protection." damage = 0 // It's a damn toy. damage_type = OXY - nodamage = 1 + nodamage = TRUE icon = 'icons/obj/guns/toy.dmi' icon_state = "foamdart_proj" ammo_type = /obj/item/ammo_casing/caseless/foam_dart range = 10 - var/modified = 0 + var/modified = FALSE var/obj/item/pen/pen = null /obj/item/projectile/bullet/reusable/foam_dart/handle_drop() diff --git a/code/modules/projectiles/projectile/special/mindflayer.dm b/code/modules/projectiles/projectile/special/mindflayer.dm index eaa998f7e0..d717bed39e 100644 --- a/code/modules/projectiles/projectile/special/mindflayer.dm +++ b/code/modules/projectiles/projectile/special/mindflayer.dm @@ -6,4 +6,4 @@ if(ishuman(target)) var/mob/living/carbon/human/M = target M.adjustBrainLoss(20) - M.hallucination += 20 + M.hallucination += 30 diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 20db99fca1..a464c23294 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -467,7 +467,8 @@ obj/machinery/chem_dispenser/proc/work_animation() "creme_de_menthe", "creme_de_cacao", "triple_sec", - "sake" + "sake", + "fernet" ) emagged_reagents = list( "ethanol", diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 5230ea26f6..f65f1b50b6 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1238,7 +1238,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." /datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M) - M.dizziness +=6 + M.dizziness +=1.5 switch(current_cycle) if(15 to 45) if(!M.slurring) @@ -1267,7 +1267,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M) M.Knockdown(60, 1, 0) - M.dizziness +=6 + M.dizziness +=2 switch(current_cycle) if(15 to 45) if(!M.slurring) @@ -1613,3 +1613,91 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "mojito" glass_name = "Mojito" glass_desc = "A drink that looks as refreshing as it tastes." + +/datum/reagent/consumable/ethanol/fernet + name = "Fernet" + id = "fernet" + description = "An incredibly bitter herbal liqueur used as a digestif." + color = "#1B2E24" // rgb: 27, 46, 36 + boozepwr = 80 + taste_description = "utter bitterness" + glass_name = "glass of fernet" + glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum + +/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/M) + + if(M.nutrition <= NUTRITION_LEVEL_STARVING) + M.adjustToxLoss(1*REM, 0) + M.nutrition = max(M.nutrition - 5, 0) + M.overeatduration = 0 + return ..() + +/datum/reagent/consumable/ethanol/fernet_cola + name = "Fernet Cola" + id = "fernet_cola" + description = "A very popular and bittersweet digestif, ideal after a heavy meal. Best served on a sawed-off cola bottle as per tradition." + color = "#390600" // rgb: 57, 6, 0 + boozepwr = 25 + taste_description = "sweet relief" + glass_icon_state = "godlyblend" + glass_name = "glass of fernet cola" + glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass." + +/datum/reagent/consumable/ethanol/fernetcola/on_mob_life(mob/living/M) + + if(M.nutrition <= NUTRITION_LEVEL_STARVING) + M.adjustToxLoss(0.5*REM, 0) + M.nutrition = max(M.nutrition - 3, 0) + M.overeatduration = 0 + return ..() + +/datum/reagent/consumable/ethanol/fanciulli + + name = "Fanciulli" + id = "fanciulli" + description = "What if the Manhattan coctail ACTUALLY used a bitter herb liquour? Helps you sobers up." //also causes a bit of stamina damage to symbolize the afterdrink lazyness + color = "#CA933F" // rgb: 202, 147, 63 + boozepwr = -10 + taste_description = "a sweet sobering mix" + glass_icon_state = "fanciulli" + glass_name = "glass of fanciulli" + glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet." + +/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/M) + + M.nutrition = max(M.nutrition - 5, 0) + M.overeatduration = 0 + return ..() + +/datum/reagent/consumable/ethanol/fanciulli/on_mob_add(mob/living/M) + if(M.health > 0) + M.adjustStaminaLoss(20) + . = TRUE + ..() + + +/datum/reagent/consumable/ethanol/branca_menta + name = "Branca Menta" + id = "branca_menta" + description = "A refreshing mixture of bitter Fernet with mint creme liquour." + color = "#4B5746" // rgb: 75, 87, 70 + boozepwr = 35 + taste_description = "a bitter freshness" + glass_icon_state= "minted_fernet" + glass_name = "glass of branca menta" + glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this + + +/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/M) + M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) + if(M.nutrition <= NUTRITION_LEVEL_STARVING) + M.adjustToxLoss(1*REM, 0) + M.nutrition = max(M.nutrition - 5, 0) + M.overeatduration = 0 + return ..() + +/datum/reagent/consumable/ethanol/branca_menta/on_mob_add(mob/living/M) + if(M.health > 0) + M.adjustStaminaLoss(35) + . = TRUE + ..() diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 5d5fdf2183..b5a92af878 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -407,7 +407,7 @@ /datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) M.set_drugginess(30) - M.dizziness +=5 + M.dizziness +=1.5 M.drowsyness = 0 M.AdjustSleeping(-40, FALSE) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index dd932f6215..377ddc47fd 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -278,7 +278,7 @@ to_chat(M, "[high_message]") M.adjustStaminaLoss(-5, 0) M.adjustBrainLoss(4) - M.hallucination += 10 + M.hallucination += 5 if(M.canmove && !ismovableatom(M.loc)) step(M, pick(GLOB.cardinals)) step(M, pick(GLOB.cardinals)) @@ -286,7 +286,7 @@ . = 1 /datum/reagent/drug/bath_salts/overdose_process(mob/living/M) - M.hallucination += 10 + M.hallucination += 5 if(M.canmove && !ismovableatom(M.loc)) for(var/i in 1 to 8) step(M, pick(GLOB.cardinals)) @@ -332,7 +332,7 @@ ..() /datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M) - M.hallucination += 40 + M.hallucination += 30 if(M.canmove && !ismovableatom(M.loc)) for(var/i = 0, i < 16, i++) step(M, pick(GLOB.cardinals)) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index b4abc2e4b1..ddc9878546 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1093,7 +1093,7 @@ . = 1 /datum/reagent/medicine/earthsblood/overdose_process(mob/living/M) - M.hallucination = min(max(0, M.hallucination + 10), 50) + M.hallucination = min(max(0, M.hallucination + 5), 60) M.adjustToxLoss(5 * REM, 0) ..() . = 1 diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 30117d4ce3..07f19a8462 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -103,7 +103,7 @@ /datum/reagent/blackpowder/on_mob_life(mob/living/M) ..() if(isplasmaman(M)) - M.hallucination += 10 + M.hallucination += 5 /datum/reagent/blackpowder/on_ex_act() var/location = get_turf(holder.my_atom) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 9d5c6c5a0f..74ef9167c9 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -188,7 +188,7 @@ taste_description = "sourness" /datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/M) - M.hallucination += 10 + M.hallucination += 5 return ..() /datum/reagent/toxin/plantbgone @@ -626,16 +626,16 @@ /datum/reagent/toxin/lipolicide name = "Lipolicide" id = "lipolicide" - description = "A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. More deadly to those without nutriment in their body." + description = "A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. Deadly to those without nutriment in their body." taste_description = "mothballs" reagent_state = LIQUID color = "#F0FFF0" metabolization_rate = 0.5 * REAGENTS_METABOLISM - toxpwr = 0.5 + toxpwr = 0 /datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) - M.adjustToxLoss(0.5*REM, 0) + M.adjustToxLoss(1*REM, 0) M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time M.overeatduration = 0 return ..() diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index ef41c7951e..d384b7dd8d 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -179,8 +179,7 @@ Borg Shaker charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. recharge_time = 3 accepts_reagent_upgrades = FALSE - - reagent_ids = list("beer", "orangejuice", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale") + reagent_ids = list("beer", "orangejuice", "grenadine" ,"limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "fernet") /obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) return //Can't inject stuff with a shaker, can we? //not with that attitude diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index be3ec60637..5771ff9891 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -482,3 +482,19 @@ build_path = /obj/item/circuitboard/machine/dish_drive category = list ("Misc. Machinery") departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/board/stacking_unit_console + name = "Machine Design (Stacking Machine Console)" + desc = "The circuit board for a Stacking Machine Console." + id = "stack_console" + build_path = /obj/item/circuitboard/machine/stacking_unit_console + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/board/stacking_machine + name = "Machine Design (Stacking Machine)" + desc = "The circuit board for a Stacking Machine." + id = "stack_machine" + build_path = /obj/item/circuitboard/machine/stacking_machine + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING \ No newline at end of file diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 23b39de3fe..42831cc013 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -44,24 +44,21 @@ /obj/machinery/rnd/experimentor/proc/SetTypeReactions() - var/probWeight = 0 for(var/I in typesof(/obj/item)) if(istype(I, /obj/item/relic)) item_reactions["[I]"] = SCANTYPE_DISCOVER else item_reactions["[I]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE) + if(ispath(I, /obj/item/stock_parts) || ispath(I, /obj/item/grenade/chem_grenade) || ispath(I, /obj/item/kitchen)) var/obj/item/tempCheck = I if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way - valid_items += 15 - valid_items += I - probWeight++ + valid_items["[I]"] += 15 if(ispath(I, /obj/item/reagent_containers/food)) var/obj/item/tempCheck = I if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way - valid_items += rand(1,max(2,35-probWeight)) - valid_items += I + valid_items["[I]"] += rand(1,4) if(ispath(I, /obj/item/construction/rcd) || ispath(I, /obj/item/grenade) || ispath(I, /obj/item/aicard) || ispath(I, /obj/item/storage/backpack/holding) || ispath(I, /obj/item/slime_extract) || ispath(I, /obj/item/onetankbomb) || ispath(I, /obj/item/transfer_valve)) var/obj/item/tempCheck = I @@ -225,18 +222,6 @@ smoke.set_up(0, where) smoke.start() -/obj/machinery/rnd/experimentor/proc/pickWeighted(list/from) - var/result = FALSE - var/counter = 1 - while(!result) - var/probtocheck = from[counter] - if(prob(probtocheck)) - result = TRUE - return from[counter+1] - if(counter + 2 < from.len) - counter = counter + 2 - else - counter = 1 /obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on) recentlyExperimented = 1 @@ -283,13 +268,13 @@ visible_message("[src] malfunctions, spewing toxic waste!") for(var/turf/T in oview(1, src)) if(!T.density) - if(prob(EFFECT_PROB_VERYHIGH)) + if(prob(EFFECT_PROB_VERYHIGH) && !(locate(/obj/effect/decal/cleanable/greenglow) in T)) var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T) reagentdecal.reagents.add_reagent("radium", 7) else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) var/savedName = "[exp_on]" ejectItem(TRUE) - var/newPath = pickWeighted(valid_items) + var/newPath = text2path(pickweight(valid_items)) loaded_item = new newPath(src) visible_message("[src] malfunctions, transforming [savedName] into [loaded_item]!") investigate_log("Experimentor has transformed [savedName] into [loaded_item]", INVESTIGATE_EXPERIMENTOR) diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm index 5049a25893..c51288b685 100644 --- a/code/modules/research/machinery/departmental_circuit_imprinter.dm +++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm @@ -9,5 +9,6 @@ /obj/machinery/rnd/production/circuit_imprinter/department/science name = "department circuit imprinter (Science)" + circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE department_tag = "Science" \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index db08c9b950..81b59624d5 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -50,6 +50,7 @@ doesn't have toxins access. var/research_control = TRUE /obj/machinery/computer/rdconsole/production + circuit = /obj/item/circuitboard/computer/rdconsole/production research_control = FALSE /proc/CallMaterialName(ID) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index c29c8b7732..c69d0ad728 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -93,7 +93,8 @@ description = "A refresher course on modern engineering technology." prereq_ids = list("base") design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", - "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics") + "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", + "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine") research_cost = 7500 export_price = 5000 diff --git a/code/modules/server_tools/st_commands.dm b/code/modules/server_tools/st_commands.dm deleted file mode 100644 index 1e071550e0..0000000000 --- a/code/modules/server_tools/st_commands.dm +++ /dev/null @@ -1,76 +0,0 @@ -/datum/server_tools_command - var/name = "" //the string to trigger this command on a chat bot. e.g. TGS3_BOT: do_this_command - var/help_text = "" //help text for this command - var/required_parameters = 0 //number of parameters required for this command - var/admin_only = FALSE //set to TRUE if this command should only be usable by registered chat admins - -//override to implement command -//sender is the display name of who sent the command -//params is the trimmed string following the command name -/datum/server_tools_command/proc/Run(sender, params) - CRASH("[type] has no implementation for Run()") - -/world/proc/ListServiceCustomCommands(warnings_only) - if(!warnings_only) - . = list() - var/list/command_name_types = list() - var/list/warned_command_names = warnings_only ? list() : null - for(var/I in typesof(/datum/server_tools_command) - /datum/server_tools_command) - var/datum/server_tools_command/stc = I - var/command_name = initial(stc.name) - var/static/list/warned_server_tools_names = list() - if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) - if(warnings_only && !warned_command_names[command_name]) - SERVER_TOOLS_LOG("WARNING: Custom command [command_name] can't be used as it is empty or contains illegal characters!") - warned_command_names[command_name] = TRUE - continue - - if(command_name_types[command_name]) - if(warnings_only) - SERVER_TOOLS_LOG("WARNING: Custom commands [command_name_types[command_name]] and [stc] have the same name, only [command_name_types[command_name]] will be available!") - continue - command_name_types[stc] = command_name - - if(!warnings_only) - .[command_name] = list(SERVICE_JSON_PARAM_HELPTEXT = initial(stc.help_text), SERVICE_JSON_PARAM_ADMINONLY = initial(stc.admin_only), SERVICE_JSON_PARAM_REQUIREDPARAMETERS = initial(stc.required_parameters)) - -/world/proc/HandleServiceCustomCommand(command, sender, params) - var/static/list/cached_custom_server_tools_commands - if(!cached_custom_server_tools_commands) - cached_custom_server_tools_commands = list() - for(var/I in typesof(/datum/server_tools_command) - /datum/server_tools_command) - var/datum/server_tools_command/stc = I - cached_custom_server_tools_commands[lowertext(initial(stc.name))] = stc - - var/command_type = cached_custom_server_tools_commands[command] - if(!command_type) - return FALSE - var/datum/server_tools_command/stc = new command_type - return stc.Run(sender, params) || TRUE - -/* -The MIT License - -Copyright (c) 2017 Jordan Brown - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ diff --git a/code/modules/server_tools/st_interface.dm b/code/modules/server_tools/st_interface.dm deleted file mode 100644 index ca7d54695b..0000000000 --- a/code/modules/server_tools/st_interface.dm +++ /dev/null @@ -1,135 +0,0 @@ -SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(reboot_mode, REBOOT_MODE_NORMAL) -SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(server_tools_api_compatible, FALSE) - -/proc/GetTestMerges() - if(RunningService(TRUE) && fexists(SERVICE_PR_TEST_JSON)) - . = json_decode(file2text(SERVICE_PR_TEST_JSON)) - if(.) - return - return list() - -/world/proc/ServiceInit() - if(!RunningService(TRUE)) - return - ListServiceCustomCommands(TRUE) - ExportService("[SERVICE_REQUEST_API_VERSION] [SERVER_TOOLS_API_VERSION]", TRUE) - -/proc/RunningService(skip_compat_check = FALSE) - if(!skip_compat_check && !SERVER_TOOLS_READ_GLOBAL(server_tools_api_compatible)) - return FALSE - . = world.params[SERVICE_WORLD_PARAM] != null - if(. && world.system_type != MS_WINDOWS) - SERVER_TOOLS_LOG("Warning: Server tools world parameter detected but not running on Windows. Aborting initialization!") - return FALSE - -/proc/ServiceVersion() - if(RunningService(TRUE)) - return world.params[SERVICE_VERSION_PARAM] - -/proc/ServiceAPIVersion() - return SERVICE_API_VERSION_STRING - -/world/proc/ExportService(command, skip_compat_check = FALSE) - . = FALSE - if(!RunningService(skip_compat_check)) - return - if(skip_compat_check && !fexists(SERVICE_INTERFACE_DLL)) - CRASH("Service parameter present but no interface DLL detected. This is symptomatic of running a service less than version 3.1! Please upgrade.") - var/instance = params[SERVICE_INSTANCE_PARAM] - if(!instance) - instance = "TG Station Server" //maybe just upgraded - call(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance, command) //trust no retval - return TRUE - -/world/proc/ChatBroadcast(message) - ExportService("[SERVICE_REQUEST_IRC_BROADCAST] [message]") - -/world/proc/AdminBroadcast(message) - ExportService("[SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE] [message]") - -/world/proc/ServiceEndProcess() - SERVER_TOOLS_LOG("Sending shutdown request!"); - sleep(world.tick_lag) //flush the buffers - ExportService(SERVICE_REQUEST_KILL_PROCESS) - -//called at the exact moment the world is supposed to reboot -/world/proc/ServiceReboot() - switch(SERVER_TOOLS_READ_GLOBAL(reboot_mode)) - if(REBOOT_MODE_HARD) - SERVER_TOOLS_WORLD_ANNOUNCE("Hard reboot triggered, you will automatically reconnect...") - ServiceEndProcess() - if(REBOOT_MODE_SHUTDOWN) - SERVER_TOOLS_WORLD_ANNOUNCE("The server is shutting down...") - ServiceEndProcess() - else - ExportService(SERVICE_REQUEST_WORLD_REBOOT) //just let em know - -/world/proc/ServiceCommand(list/params) - var/their_sCK = params[SERVICE_CMD_PARAM_KEY] - if(!their_sCK || !RunningService(TRUE)) - return FALSE //continue world/Topic - - var/sCK = world.params[SERVICE_WORLD_PARAM] - if(their_sCK != sCK) - return "Invalid comms key!"; - - var/command = params[SERVICE_CMD_PARAM_COMMAND] - if(!command) - return "No command!" - - switch(command) - if(SERVICE_CMD_API_COMPATIBLE) - SERVER_TOOLS_WRITE_GLOBAL(server_tools_api_compatible, TRUE) - return SERVICE_RETURN_SUCCESS - if(SERVICE_CMD_HARD_REBOOT) - if(SERVER_TOOLS_READ_GLOBAL(reboot_mode) != REBOOT_MODE_HARD) - SERVER_TOOLS_WRITE_GLOBAL(reboot_mode, REBOOT_MODE_HARD) - SERVER_TOOLS_LOG("Hard reboot requested by service") - SERVER_TOOLS_NOTIFY_ADMINS("The world will hard reboot at the end of the game. Requested by service.") - if(SERVICE_CMD_GRACEFUL_SHUTDOWN) - if(SERVER_TOOLS_READ_GLOBAL(reboot_mode) != REBOOT_MODE_SHUTDOWN) - SERVER_TOOLS_WRITE_GLOBAL(reboot_mode, REBOOT_MODE_SHUTDOWN) - SERVER_TOOLS_LOG("Shutdown requested by service") - message_admins("The world will shutdown at the end of the game. Requested by service.") - if(SERVICE_CMD_WORLD_ANNOUNCE) - var/msg = params["message"] - if(!istext(msg) || !msg) - return "No message set!" - SERVER_TOOLS_WORLD_ANNOUNCE(msg) - return SERVICE_RETURN_SUCCESS - if(SERVICE_CMD_PLAYER_COUNT) - return "[SERVER_TOOLS_CLIENT_COUNT]" - if(SERVICE_CMD_LIST_CUSTOM) - return json_encode(ListServiceCustomCommands(FALSE)) - else - var/custom_command_result = HandleServiceCustomCommand(lowertext(command), params[SERVICE_CMD_PARAM_SENDER], params[SERVICE_CMD_PARAM_CUSTOM]) - if(custom_command_result) - return istext(custom_command_result) ? custom_command_result : SERVICE_RETURN_SUCCESS - return "Unknown command: [command]" - -/* -The MIT License - -Copyright (c) 2017 Jordan Brown - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm index c08557649b..ffdd270994 100644 --- a/code/modules/spells/spell_types/mind_transfer.dm +++ b/code/modules/spells/spell_types/mind_transfer.dm @@ -19,13 +19,15 @@ Urist: I don't feel like figuring out how you store object spells so I'm leaving Make sure spells that are removed from spell_list are actually removed and deleted when mind transferring. Also, you never added distance checking after target is selected. I've went ahead and did that. */ -/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets, mob/living/user = usr, distanceoverride) +/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets, mob/living/user = usr, distanceoverride, silent = FALSE) if(!targets.len) - to_chat(user, "No mind found!") + if(!silent) + to_chat(user, "No mind found!") return if(targets.len > 1) - to_chat(user, "Too many minds! You're not a hive damnit!") + if(!silent) + to_chat(user, "Too many minds! You're not a hive damnit!") return var/mob/living/target = targets[1] @@ -34,28 +36,34 @@ Also, you never added distance checking after target is selected. I've went ahea var/t_is = target.p_are() if(!(target in oview(range)) && !distanceoverride)//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it. - to_chat(user, "[t_He] [t_is] too far away!") + if(!silent) + to_chat(user, "[t_He] [t_is] too far away!") return if(ismegafauna(target)) - to_chat(user, "This creature is too powerful to control!") + if(!silent) + to_chat(user, "This creature is too powerful to control!") return if(target.stat == DEAD) - to_chat(user, "You don't particularly want to be dead!") + if(!silent) + to_chat(user, "You don't particularly want to be dead!") return if(!target.key || !target.mind) - to_chat(user, "[t_He] appear[target.p_s()] to be catatonic! Not even magic can affect [target.p_their()] vacant mind.") + if(!silent) + to_chat(user, "[t_He] appear[target.p_s()] to be catatonic! Not even magic can affect [target.p_their()] vacant mind.") return if(user.suiciding) - to_chat(user, "You're killing yourself! You can't concentrate enough to do this!") + if(!silent) + to_chat(user, "You're killing yourself! You can't concentrate enough to do this!") return var/datum/mind/TM = target.mind if((target.anti_magic_check() || TM.has_antag_datum(/datum/antagonist/wizard) || TM.has_antag_datum(/datum/antagonist/cult) || TM.has_antag_datum(/datum/antagonist/clockcult) || TM.has_antag_datum(/datum/antagonist/changeling) || TM.has_antag_datum(/datum/antagonist/rev)) || cmptext(copytext(target.key,1,2),"@")) - to_chat(user, "[target.p_their(TRUE)] mind is resisting your spell!") + if(!silent) + to_chat(user, "[target.p_their(TRUE)] mind is resisting your spell!") return var/mob/living/victim = target//The target of the spell whos body will be transferred to. @@ -77,3 +85,4 @@ Also, you never added distance checking after target is selected. I've went ahea victim.Unconscious(unconscious_amount_victim) SEND_SOUND(caster, sound('sound/magic/mandswap.ogg')) SEND_SOUND(victim, sound('sound/magic/mandswap.ogg'))// only the caster and victim hear the sounds, that way no one knows for sure if the swap happened + return TRUE diff --git a/code/modules/surgery/advanced/bioware/bioware.dm b/code/modules/surgery/advanced/bioware/bioware.dm index 6c0a7529d0..f3435e874f 100644 --- a/code/modules/surgery/advanced/bioware/bioware.dm +++ b/code/modules/surgery/advanced/bioware/bioware.dm @@ -15,8 +15,9 @@ if(B.mod_type == mod_type) qdel(src) return + owner.bioware += src on_gain() - + /datum/bioware/Destroy() owner = null if(active) diff --git a/code/modules/surgery/advanced/bioware/nerve_grounding.dm b/code/modules/surgery/advanced/bioware/nerve_grounding.dm index 7834884f52..494cfaf59b 100644 --- a/code/modules/surgery/advanced/bioware/nerve_grounding.dm +++ b/code/modules/surgery/advanced/bioware/nerve_grounding.dm @@ -31,7 +31,7 @@ /datum/bioware/grounded_nerves name = "Grounded Nerves" desc = "Nerves form a safe path for electricity to traverse, protecting the body from electric shocks." - mod_type = "nerves" + mod_type = BIOWARE_NERVES var/prev_coeff /datum/bioware/grounded_nerves/on_gain() diff --git a/code/modules/surgery/advanced/bioware/nerve_splicing.dm b/code/modules/surgery/advanced/bioware/nerve_splicing.dm index 770a8d67e6..944a05ed0e 100644 --- a/code/modules/surgery/advanced/bioware/nerve_splicing.dm +++ b/code/modules/surgery/advanced/bioware/nerve_splicing.dm @@ -31,7 +31,7 @@ /datum/bioware/spliced_nerves name = "Spliced Nerves" desc = "Nerves are connected to each other multiple times, greatly reducing the impact of stunning effects." - mod_type = "nerves" + mod_type = BIOWARE_NERVES /datum/bioware/spliced_nerves/on_gain() ..() diff --git a/code/modules/surgery/advanced/bioware/vein_threading.dm b/code/modules/surgery/advanced/bioware/vein_threading.dm index 99f6506de8..d618100a47 100644 --- a/code/modules/surgery/advanced/bioware/vein_threading.dm +++ b/code/modules/surgery/advanced/bioware/vein_threading.dm @@ -31,7 +31,7 @@ /datum/bioware/threaded_veins name = "Threaded Veins" desc = "The circulatory system is woven into a mesh, severely reducing the amount of blood lost from wounds." - mod_type = "circulation" + mod_type = BIOWARE_CIRCULATION /datum/bioware/threaded_veins/on_gain() ..() diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index ce5fafcd9f..a3fe2202b6 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -236,13 +236,13 @@ var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES]) if(bz_pp > BZ_trip_balls_min) - H.hallucination += 20 + H.hallucination += 10 H.reagents.add_reagent("bz_metabolites",5) if(prob(33)) H.adjustBrainLoss(3, 150) else if(bz_pp > 0.01) - H.hallucination += 5//Removed at 2 per tick so this will slowly build up + H.hallucination += 5 H.reagents.add_reagent("bz_metabolites",1) diff --git a/code/modules/tgs/core/_definitions.dm b/code/modules/tgs/core/_definitions.dm new file mode 100644 index 0000000000..d5e1a0075b --- /dev/null +++ b/code/modules/tgs/core/_definitions.dm @@ -0,0 +1,2 @@ +#define TGS_UNIMPLEMENTED "___unimplemented" +#define TGS_VERSION_PARAMETER "server_service_version" diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm new file mode 100644 index 0000000000..79c42ed37b --- /dev/null +++ b/code/modules/tgs/core/core.dm @@ -0,0 +1,144 @@ +/world/TgsNew(datum/tgs_event_handler/event_handler) + var/tgs_version = world.params[TGS_VERSION_PARAMETER] + if(!tgs_version) + return + + var/path = SelectTgsApi(tgs_version) + if(!path) + TGS_ERROR_LOG("Found unsupported API version: [tgs_version]. If this is a valid version please report this, backporting is done on demand.") + + TGS_INFO_LOG("Activating API for version [tgs_version]") + var/datum/tgs_api/new_api = new path + + var/result = new_api.OnWorldNew(event_handler ? event_handler : new /datum/tgs_event_handler/tgs_default) + if(result && result != TGS_UNIMPLEMENTED) + TGS_WRITE_GLOBAL(tgs, new_api) + else + TGS_ERROR_LOG("Failed to activate API!") + +/world/proc/SelectTgsApi(tgs_version) + //remove the old 3.0 header + tgs_version = replacetext(tgs_version, "/tg/station 13 Server v", "") + + var/list/version_bits = splittext(tgs_version, ".") + + var/super = text2num(version_bits[1]) + var/major = text2num(version_bits[2]) + var/minor = text2num(version_bits[3]) + var/patch = text2num(version_bits[4]) + + switch(super) + if(3) + switch(major) + if(2) + return /datum/tgs_api/v3210 + + if(super != null && major != null && minor != null && patch != null && tgs_version > TgsMaximumAPIVersion()) + TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") + return /datum/tgs_api/latest + +/world/TgsMaximumAPIVersion() + return "4.0.0.0" + +/world/TgsMinimumAPIVersion() + return "3.2.0.0" + +/world/TgsInitializationComplete() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.OnInitializationComplete() + +/world/proc/TgsTopic(T) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.OnTopic(T) + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsRevision() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.Revision() + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsReboot() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.OnReboot() + +/world/TgsAvailable() + return TGS_READ_GLOBAL(tgs) != null + +/world/TgsVersion() + return world.params[TGS_VERSION_PARAMETER] + +/world/TgsInstanceName() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.InstanceName() + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsTestMerges() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.TestMerges() + if(result != TGS_UNIMPLEMENTED) + return result + return list() + +/world/TgsEndProcess() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.EndProcess() + +/world/TgsChatChannelInfo() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.ChatChannelInfo() + if(result != TGS_UNIMPLEMENTED) + return result + return list() + +/world/TgsChatBroadcast(message, list/channels) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatBroadcast(message, channels) + +/world/TgsTargetedChatBroadcast(message, admin_only) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatTargetedBroadcast(message, admin_only) + +/world/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatPrivateMessage(message, user) + +/* +The MIT License + +Copyright (c) 2017 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm new file mode 100644 index 0000000000..5da73bfdc5 --- /dev/null +++ b/code/modules/tgs/core/datum.dm @@ -0,0 +1,74 @@ +TGS_DEFINE_AND_SET_GLOBAL(tgs, null) + +/datum/tgs_api + +/datum/tgs_api/latest + parent_type = /datum/tgs_api/v3210 + +TGS_PROTECT_DATUM(/datum/tgs_api) + +/datum/tgs_api/proc/ApiVersion() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnWorldNew(datum/tgs_event_handler/event_handler) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnInitializationComplete() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnTopic(T) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnReboot() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/InstanceName() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TestMerges() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/EndProcess() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Revision() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatChannelInfo() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatBroadcast(message, list/channels) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatTargetedBroadcast(message, admin_only) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatPrivateMessage(message, admin_only) + return TGS_UNIMPLEMENTED + +/* +The MIT License + +Copyright (c) 2017 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/modules/tgs/core/default_event_handler.dm b/code/modules/tgs/core/default_event_handler.dm new file mode 100644 index 0000000000..c0ea8eec46 --- /dev/null +++ b/code/modules/tgs/core/default_event_handler.dm @@ -0,0 +1,30 @@ +/datum/tgs_event_handler/tgs_default/HandleEvent(event_code) + //TODO + return + +/* +The MIT License + +Copyright (c) 2017 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm new file mode 100644 index 0000000000..586cbbe427 --- /dev/null +++ b/code/modules/tgs/includes.dm @@ -0,0 +1,6 @@ +#include "core\_definitions.dm" +#include "core\core.dm" +#include "core\datum.dm" +#include "core\default_event_handler.dm" +#include "v3210\api.dm" +#include "v3210\commands.dm" diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm new file mode 100644 index 0000000000..f9b32471de --- /dev/null +++ b/code/modules/tgs/v3210/api.dm @@ -0,0 +1,248 @@ +#define REBOOT_MODE_NORMAL 0 +#define REBOOT_MODE_HARD 1 +#define REBOOT_MODE_SHUTDOWN 2 + +#define SERVICE_WORLD_PARAM "server_service" +#define SERVICE_INSTANCE_PARAM "server_instance" +#define SERVICE_PR_TEST_JSON "prtestjob.json" +#define SERVICE_INTERFACE_DLL "TGDreamDaemonBridge.dll" +#define SERVICE_INTERFACE_FUNCTION "DDEntryPoint" + +#define SERVICE_CMD_HARD_REBOOT "hard_reboot" +#define SERVICE_CMD_GRACEFUL_SHUTDOWN "graceful_shutdown" +#define SERVICE_CMD_WORLD_ANNOUNCE "world_announce" +#define SERVICE_CMD_LIST_CUSTOM "list_custom_commands" +#define SERVICE_CMD_API_COMPATIBLE "api_compat" +#define SERVICE_CMD_PLAYER_COUNT "client_count" + +#define SERVICE_CMD_PARAM_KEY "serviceCommsKey" +#define SERVICE_CMD_PARAM_COMMAND "command" +#define SERVICE_CMD_PARAM_SENDER "sender" +#define SERVICE_CMD_PARAM_CUSTOM "custom" + +#define SERVICE_REQUEST_KILL_PROCESS "killme" +#define SERVICE_REQUEST_IRC_BROADCAST "irc" +#define SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE "send2irc" +#define SERVICE_REQUEST_WORLD_REBOOT "worldreboot" +#define SERVICE_REQUEST_API_VERSION "api_ver" + +#define SERVICE_RETURN_SUCCESS "SUCCESS" + +/datum/tgs_api/v3210 + var/reboot_mode = REBOOT_MODE_NORMAL + var/comms_key + var/instance_name + var/originmastercommit + var/commit + var/list/cached_custom_tgs_chat_commands + var/warned_revison = FALSE + var/warned_custom_commands = FALSE + +/datum/tgs_api/v3210/ApiVersion() + return "3.2.1.0" + +/datum/tgs_api/v3210/proc/trim_left(text) + for (var/i = 1 to length(text)) + if (text2ascii(text, i) > 32) + return copytext(text, i) + return "" + +/datum/tgs_api/v3210/proc/trim_right(text) + for (var/i = length(text), i > 0, i--) + if (text2ascii(text, i) > 32) + return copytext(text, 1, i + 1) + return "" + +/datum/tgs_api/v3210/proc/file2list(filename) + return splittext(trim_left(trim_right(file2text(filename))), "\n") + +/datum/tgs_api/v3210/OnWorldNew(datum/tgs_event_handler/event_handler) //don't use event handling in this version + . = FALSE + comms_key = world.params[SERVICE_WORLD_PARAM] + instance_name = world.params[SERVICE_INSTANCE_PARAM] + if(!instance_name) + instance_name = "TG Station Server" //maybe just upgraded + + var/list/logs = file2list(".git/logs/HEAD") + if(logs.len) + logs = splittext(logs[logs.len - 1], " ") + commit = logs[2] + logs = file2list(".git/logs/refs/remotes/origin/master") + if(logs.len) + originmastercommit = splittext(logs[logs.len - 1], " ")[2] + + if(world.system_type != MS_WINDOWS) + TGS_ERROR_LOG("This API version is only supported on Windows. Not running on Windows. Aborting initialization!") + return + ListServiceCustomCommands(TRUE) + ExportService("[SERVICE_REQUEST_API_VERSION] [ApiVersion()]", TRUE) + return TRUE + +//nothing to do for v3 +/datum/tgs_api/v3210/OnInitializationComplete() + return + +/datum/tgs_api/v3210/InstanceName() + return world.params[SERVICE_INSTANCE_PARAM] + +/datum/tgs_api/v3210/proc/ExportService(command, skip_compat_check = FALSE) + . = FALSE + if(skip_compat_check && !fexists(SERVICE_INTERFACE_DLL)) + TGS_ERROR_LOG("Service parameter present but no interface DLL detected. This is symptomatic of running a service less than version 3.1! Please upgrade.") + return + call(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval + return TRUE + +/datum/tgs_api/v3210/OnTopic(T) + var/list/params = params2list(T) + var/their_sCK = params[SERVICE_CMD_PARAM_KEY] + if(!their_sCK) + return FALSE //continue world/Topic + + if(their_sCK != comms_key) + return "Invalid comms key!"; + + var/command = params[SERVICE_CMD_PARAM_COMMAND] + if(!command) + return "No command!" + + switch(command) + if(SERVICE_CMD_API_COMPATIBLE) + return SERVICE_RETURN_SUCCESS + if(SERVICE_CMD_HARD_REBOOT) + if(reboot_mode != REBOOT_MODE_HARD) + reboot_mode = REBOOT_MODE_HARD + TGS_INFO_LOG("Hard reboot requested by service") + TGS_NOTIFY_ADMINS("The world will hard reboot at the end of the game. Requested by TGS.") + if(SERVICE_CMD_GRACEFUL_SHUTDOWN) + if(reboot_mode != REBOOT_MODE_SHUTDOWN) + reboot_mode = REBOOT_MODE_SHUTDOWN + TGS_INFO_LOG("Shutdown requested by service") + TGS_NOTIFY_ADMINS("The world will shutdown at the end of the game. Requested by TGS.") + if(SERVICE_CMD_WORLD_ANNOUNCE) + var/msg = params["message"] + if(!istext(msg) || !msg) + return "No message set!" + TGS_WORLD_ANNOUNCE(msg) + return SERVICE_RETURN_SUCCESS + if(SERVICE_CMD_PLAYER_COUNT) + return "[TGS_CLIENT_COUNT]" + if(SERVICE_CMD_LIST_CUSTOM) + return json_encode(ListServiceCustomCommands(FALSE)) + else + var/custom_command_result = HandleServiceCustomCommand(lowertext(command), params[SERVICE_CMD_PARAM_SENDER], params[SERVICE_CMD_PARAM_CUSTOM]) + if(custom_command_result) + return istext(custom_command_result) ? custom_command_result : SERVICE_RETURN_SUCCESS + return "Unknown command: [command]" + +/datum/tgs_api/v3210/OnReboot() + switch(reboot_mode) + if(REBOOT_MODE_HARD) + TGS_WORLD_ANNOUNCE("Hard reboot triggered, you will automatically reconnect...") + EndProcess() + if(REBOOT_MODE_SHUTDOWN) + TGS_WORLD_ANNOUNCE("The server is shutting down...") + EndProcess() + else + ExportService(SERVICE_REQUEST_WORLD_REBOOT) //just let em know + +/datum/tgs_api/v3210/TestMerges() + //do the best we can here as the datum can't be completed using the v3 api + . = list() + if(!fexists(SERVICE_PR_TEST_JSON)) + return + var/list/json = json_decode(file2text(SERVICE_PR_TEST_JSON)) + if(!json) + return + for(var/I in json) + var/datum/tgs_revision_information/test_merge/tm = new + tm.number = text2num(I) + var/list/entry = json[I] + tm.pull_request_commit = entry["commit"] + tm.author = entry["author"] + tm.title = entry["title"] + . += tm + +/datum/tgs_api/v3210/Revision() + if(!warned_revison) + TGS_ERROR_LOG("Use of TgsRevision on [ApiVersion()] origin_commit only points to master!") + warned_revison = TRUE + var/datum/tgs_revision_information/ri = new + ri.commit = commit + ri.origin_commit = originmastercommit + +/datum/tgs_api/v3210/EndProcess() + sleep(world.tick_lag) //flush the buffers + ExportService(SERVICE_REQUEST_KILL_PROCESS) + +/datum/tgs_api/v3210/ChatChannelInfo() + return list() + +/datum/tgs_api/v3210/ChatBroadcast(message, list/channels) + if(channels) + return TGS_UNIMPLEMENTED + ChatTargetedBroadcast(message, TRUE) + ChatTargetedBroadcast(message, FALSE) + +/datum/tgs_api/v3210/ChatTargetedBroadcast(message, admin_only) + ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message]") + +/datum/tgs_api/v3210/ChatPrivateMessage(message, admin_only) + return TGS_UNIMPLEMENTED + +#undef REBOOT_MODE_NORMAL +#undef REBOOT_MODE_HARD +#undef REBOOT_MODE_SHUTDOWN + +#undef SERVICE_WORLD_PARAM +#undef SERVICE_INSTANCE_PARAM +#undef SERVICE_PR_TEST_JSON +#undef SERVICE_INTERFACE_DLL +#undef SERVICE_INTERFACE_FUNCTION + +#undef SERVICE_CMD_HARD_REBOOT +#undef SERVICE_CMD_GRACEFUL_SHUTDOWN +#undef SERVICE_CMD_WORLD_ANNOUNCE +#undef SERVICE_CMD_LIST_CUSTOM +#undef SERVICE_CMD_API_COMPATIBLE +#undef SERVICE_CMD_PLAYER_COUNT + +#undef SERVICE_CMD_PARAM_KEY +#undef SERVICE_CMD_PARAM_COMMAND +#undef SERVICE_CMD_PARAM_SENDER +#undef SERVICE_CMD_PARAM_CUSTOM + +#undef SERVICE_REQUEST_KILL_PROCESS +#undef SERVICE_REQUEST_IRC_BROADCAST +#undef SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE +#undef SERVICE_REQUEST_WORLD_REBOOT +#undef SERVICE_REQUEST_API_VERSION + +#undef SERVICE_RETURN_SUCCESS + +/* +The MIT License + +Copyright (c) 2017 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm new file mode 100644 index 0000000000..71d7e32366 --- /dev/null +++ b/code/modules/tgs/v3210/commands.dm @@ -0,0 +1,78 @@ +#define SERVICE_JSON_PARAM_HELPTEXT "help_text" +#define SERVICE_JSON_PARAM_ADMINONLY "admin_only" +#define SERVICE_JSON_PARAM_REQUIREDPARAMETERS "required_parameters" + +/datum/tgs_api/v3210/proc/ListServiceCustomCommands(warnings_only) + if(!warnings_only) + . = list() + var/list/command_name_types = list() + var/list/warned_command_names = warnings_only ? list() : null + var/warned_about_the_dangers_of_robutussin = !warnings_only + for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) + if(!warned_about_the_dangers_of_robutussin) + TGS_ERROR_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") + warned_about_the_dangers_of_robutussin = TRUE + var/datum/tgs_chat_command/stc = I + var/command_name = initial(stc.name) + if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) + if(warnings_only && !warned_command_names[command_name]) + TGS_ERROR_LOG("Custom command [command_name] can't be used as it is empty or contains illegal characters!") + warned_command_names[command_name] = TRUE + continue + + if(command_name_types[command_name]) + if(warnings_only) + TGS_ERROR_LOG("Custom commands [command_name_types[command_name]] and [stc] have the same name, only [command_name_types[command_name]] will be available!") + continue + command_name_types[stc] = command_name + + if(!warnings_only) + .[command_name] = list(SERVICE_JSON_PARAM_HELPTEXT = initial(stc.help_text), SERVICE_JSON_PARAM_ADMINONLY = initial(stc.admin_only), SERVICE_JSON_PARAM_REQUIREDPARAMETERS = 0) + +/datum/tgs_api/v3210/proc/HandleServiceCustomCommand(command, sender, params) + if(!cached_custom_tgs_chat_commands) + cached_custom_tgs_chat_commands = list() + for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) + var/datum/tgs_chat_command/stc = I + cached_custom_tgs_chat_commands[lowertext(initial(stc.name))] = stc + + var/command_type = cached_custom_tgs_chat_commands[command] + if(!command_type) + return FALSE + var/datum/tgs_chat_command/stc = new command_type + var/datum/tgs_chat_user/user = new + user.friendly_name = sender + user.mention = sender + return stc.Run(user, params) || TRUE + +/* + +#undef SERVICE_JSON_PARAM_HELPTEXT +#undef SERVICE_JSON_PARAM_ADMINONLY +#undef SERVICE_JSON_PARAM_REQUIREDPARAMETERS + +The MIT License + +Copyright (c) 2017 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 59b41d4cef..67c7753c59 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -15,6 +15,8 @@ /obj/item/reagent_containers/food/drinks/bottle/hcider = 5, /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, /obj/item/reagent_containers/food/drinks/bottle/grappa = 5, + /obj/item/reagent_containers/food/drinks/bottle/sake = 5, + /obj/item/reagent_containers/food/drinks/bottle/fernet = 5, /obj/item/reagent_containers/food/drinks/ale = 6, /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, @@ -38,5 +40,5 @@ /obj/item/vending_refill/boozeomat machine_name = "Booze-O-Mat" icon_state = "refill_booze" - charges = list(59, 4, 0)//of 178 standard, 12 contraband - init_charges = list(59, 4, 0) + charges = list(61, 4, 0)//of 182 standard, 12 contraband + init_charges = list(61, 4, 0) diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 29528bd900..c912d3dd3e 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -6,6 +6,7 @@ product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" + circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index 098560f736..fc2f9c59b9 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -5,6 +5,7 @@ product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" + circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, diff --git a/config/dbconfig.txt b/config/dbconfig.txt index 146de44b35..ed0ffadede 100644 --- a/config/dbconfig.txt +++ b/config/dbconfig.txt @@ -18,7 +18,7 @@ FEEDBACK_DATABASE feedback ## Prefix to be added to the name of every table, older databases will require this be set to erro_ ## Note, this does not change the table names in the database, you will have to do that yourself. ##IE: -## FEEDBACK_TABLEPREFIX +## FEEDBACK_TABLEPREFIX ## FEEDBACK_TABLEPREFIX SS13_ ## Remove "SS13_" if you are using the standard schema file. FEEDBACK_TABLEPREFIX SS13_ @@ -28,3 +28,7 @@ FEEDBACK_LOGIN username ## Password used to access the database. FEEDBACK_PASSWORD password + +## Time in deciseconds for a query to execute before alerting a for possible slow query timeout. +## While enabled queries and their execution times are logged if they exceed this value. +#QUERY_DEBUG_LOG_TIMEOUT 70 diff --git a/html/changelogs/AutoChangeLog-pr-6660.yml b/html/changelogs/AutoChangeLog-pr-6660.yml new file mode 100644 index 0000000000..e657c8d5ab --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6660.yml @@ -0,0 +1,5 @@ +author: "GrayRachnid" +delete-after: True +changes: + - rscadd: "Adds private rooms to the ninja holding center" + - rscadd: "Along with a few things to make it more tolerable, but fear not. There is now a suicide chamber for those who want the easy way out." diff --git a/html/changelogs/AutoChangeLog-pr-6686.yml b/html/changelogs/AutoChangeLog-pr-6686.yml new file mode 100644 index 0000000000..48bd2f00bb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6686.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Removing an ID card from a wallet now properly removes its visual and accesses." diff --git a/html/changelogs/AutoChangeLog-pr-6754.yml b/html/changelogs/AutoChangeLog-pr-6754.yml new file mode 100644 index 0000000000..52f34a1ed3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6754.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - balance: "Cult items will no longer be a long ride on the vomit coaster if picked up by a non cultist." diff --git a/html/changelogs/AutoChangeLog-pr-6756.yml b/html/changelogs/AutoChangeLog-pr-6756.yml new file mode 100644 index 0000000000..180e4f9875 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6756.yml @@ -0,0 +1,5 @@ +author: "Dax Dupont" +delete-after: True +changes: + - balance: "Cult space bases are kill again." + - balance: "Cult floors now pass gas." diff --git a/html/changelogs/AutoChangeLog-pr-6758.yml b/html/changelogs/AutoChangeLog-pr-6758.yml new file mode 100644 index 0000000000..a92b173823 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6758.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - bugfix: "Fixed a few things deconning into the wrong circuit." diff --git a/html/changelogs/AutoChangeLog-pr-6760.yml b/html/changelogs/AutoChangeLog-pr-6760.yml new file mode 100644 index 0000000000..46c838f3e3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6760.yml @@ -0,0 +1,6 @@ +author: "Denton" +delete-after: True +changes: + - code_imp: "Added /syndicate subtypes for air alarms and APCs." + - bugfix: "Added missing stock parts to the syndicate lavaland base." + - tweak: "Added kitchen related circuit boards to the syndie lavaland base." diff --git a/html/changelogs/AutoChangeLog-pr-6762.yml b/html/changelogs/AutoChangeLog-pr-6762.yml new file mode 100644 index 0000000000..eafbf07fc4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6762.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - bugfix: "You can no longer do infinite bioware surgery." diff --git a/html/changelogs/AutoChangeLog-pr-6770.yml b/html/changelogs/AutoChangeLog-pr-6770.yml new file mode 100644 index 0000000000..cb25c019db --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6770.yml @@ -0,0 +1,4 @@ +author: "Dimmadunk" +delete-after: True +changes: + - rscadd: "There's a new type of reagent added to the booze dispenser: Fernet. With it you can make a couple of new digestif drinks that will help you reduce excess fat!" diff --git a/html/changelogs/AutoChangeLog-pr-6771.yml b/html/changelogs/AutoChangeLog-pr-6771.yml new file mode 100644 index 0000000000..12c37cc586 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6771.yml @@ -0,0 +1,5 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Adminorazine will no longer kill ash lizards." + - bugfix: "Adminorazine will no longer remove quirks." diff --git a/html/changelogs/AutoChangeLog-pr-6773.yml b/html/changelogs/AutoChangeLog-pr-6773.yml new file mode 100644 index 0000000000..c885bcc65b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6773.yml @@ -0,0 +1,7 @@ +author: "Garen" +delete-after: True +changes: + - rscadd: "Thrower and Gun circuits put messages in chat when they're used." + - tweak: "Only the gun assembly can throw/shoot while in hand" + - imageadd: "Adds inhands for the gun assembly" + - bugfix: "grabber inventories update when a thrower takes from them" diff --git a/html/changelogs/AutoChangeLog-pr-6775.yml b/html/changelogs/AutoChangeLog-pr-6775.yml new file mode 100644 index 0000000000..0144687a58 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6775.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "the walls on the crashed abductor ship ruin in lavaland can now be broken down" diff --git a/html/changelogs/AutoChangeLog-pr-6787.yml b/html/changelogs/AutoChangeLog-pr-6787.yml new file mode 100644 index 0000000000..ddd681f01b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6787.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Fixed mobs immune to radiation being killed by HIGH bursts of radiation." diff --git a/html/changelogs/AutoChangeLog-pr-6788.yml b/html/changelogs/AutoChangeLog-pr-6788.yml new file mode 100644 index 0000000000..dbd4c21aad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6788.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - bugfix: "Foam no longer gives infinite metal" diff --git a/html/changelogs/AutoChangeLog-pr-6791.yml b/html/changelogs/AutoChangeLog-pr-6791.yml new file mode 100644 index 0000000000..1b1c8232bb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6791.yml @@ -0,0 +1,4 @@ +author: "Denton" +delete-after: True +changes: + - tweak: "There are rumors of the Tiger Cooperative adding a \"special little something\" to some of their bioterror kits." diff --git a/html/changelogs/AutoChangeLog-pr-6792.yml b/html/changelogs/AutoChangeLog-pr-6792.yml new file mode 100644 index 0000000000..629abeca9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6792.yml @@ -0,0 +1,4 @@ +author: "Iamgoofball" +delete-after: True +changes: + - tweak: "Lipolicide now only does damage if you're starving." diff --git a/html/changelogs/AutoChangeLog-pr-6793.yml b/html/changelogs/AutoChangeLog-pr-6793.yml new file mode 100644 index 0000000000..c44e76d910 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6793.yml @@ -0,0 +1,4 @@ +author: "Nichlas0010" +delete-after: True +changes: + - tweak: "Reseach Director Traitors can no longer receive an objective to steal the Hand Teleporter" diff --git a/html/changelogs/AutoChangeLog-pr-6794.yml b/html/changelogs/AutoChangeLog-pr-6794.yml new file mode 100644 index 0000000000..0819c6c0a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6794.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - bugfix: "Mulligan didn't work on lizards and other mutants. Now it does." diff --git a/html/changelogs/AutoChangeLog-pr-6796.yml b/html/changelogs/AutoChangeLog-pr-6796.yml new file mode 100644 index 0000000000..e4f4721930 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6796.yml @@ -0,0 +1,4 @@ +author: "Denton" +delete-after: True +changes: + - code_imp: "Loose silver/gold/solar panel crates have been replaced with \"proper\" crates." diff --git a/html/changelogs/AutoChangeLog-pr-6798.yml b/html/changelogs/AutoChangeLog-pr-6798.yml new file mode 100644 index 0000000000..913875ddc7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6798.yml @@ -0,0 +1,6 @@ +author: "Astatineguy12" +delete-after: True +changes: + - tweak: "The experimentor is less likely to produce food when it transforms an item" + - bugfix: "The experimentor no longer breaks when the toxic waste malfunction occurs multiple times and isn't cleaned up" + - bugfix: "The experimentor irridiate function actually chooses what item to make properly rather than picking from the start of the list" diff --git a/html/changelogs/AutoChangeLog-pr-6799.yml b/html/changelogs/AutoChangeLog-pr-6799.yml new file mode 100644 index 0000000000..ebbbbaf427 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6799.yml @@ -0,0 +1,4 @@ +author: "Mickyan" +delete-after: True +changes: + - bugfix: "Drinking too much Gargle Blaster, Nuka Cola or Neurotoxin no longer breaks time and space." diff --git a/html/changelogs/AutoChangeLog-pr-6801.yml b/html/changelogs/AutoChangeLog-pr-6801.yml new file mode 100644 index 0000000000..84f7c6539a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6801.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "The book of mindswap will now properly mindswap it's users." diff --git a/html/changelogs/AutoChangeLog-pr-6804.yml b/html/changelogs/AutoChangeLog-pr-6804.yml new file mode 100644 index 0000000000..39af344dd6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6804.yml @@ -0,0 +1,5 @@ +author: "iksyp" +delete-after: True +changes: + - rscadd: "stacking machines and their consoles no longer dissapear into the shadow realm when broken" + - rscadd: "you can link the stacking machine and its console by using a multitool" diff --git a/html/changelogs/AutoChangeLog-pr-6805.yml b/html/changelogs/AutoChangeLog-pr-6805.yml new file mode 100644 index 0000000000..33ee07e55f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6805.yml @@ -0,0 +1,5 @@ +author: "Alexch2" +delete-after: True +changes: + - spellcheck: "Fixes tons of typos related to integrated circuits." + - tweak: "Re-writes the descriptions of a few parts of integrated circuits." diff --git a/html/changelogs/AutoChangeLog-pr-6813.yml b/html/changelogs/AutoChangeLog-pr-6813.yml new file mode 100644 index 0000000000..61c119273d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6813.yml @@ -0,0 +1,4 @@ +author: "armhulen" +delete-after: True +changes: + - rscdel: "chameleon guns are disabled for breaking the server" diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index f29b0149d2..5198f3bda9 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index d1039c2a84..afbd091d13 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/strings/hallucination.json b/strings/hallucination.json index 449f974901..238342f30c 100644 --- a/strings/hallucination.json +++ b/strings/hallucination.json @@ -5,6 +5,22 @@ "@pick(add_name)what are you hiding?", "I saw that" ], + + "conversation": [ + "Yes", + "Yeah", + "Yup", + "No", + "Nah", + "I doubt it", + "Uh...", + "Why?", + "But...", + "Hold on", + "Hmm", + "Yeah, i know", + "Weird" + ], "greetings": [ "", @@ -29,7 +45,7 @@ "Kchckchk...", "EEEeeeeEEEE", "khhhhh", - "#@§*&£", + "#@�*&�", "H**p m*", "H-hhhhh..." ], @@ -40,47 +56,9 @@ "What was that?" ], - "imatraitor": [ - "Hail Ratvar", - "Hail Nar'Sie", - "Hey, @pick(add_name)i've got some TC left, want something?", - "Viva!", - "I'll spare you if you don't tell anybody about me", - "Hey, @pick(add_name)are you a traitor too?", - "You're my target, but @pick(excuses)", - "Are you mr. @pick(ling_names)?" - ], - - "excuses": [ - "i like you, so i'll spare you", - "i don't really feel like following objectives today", - "i'm not robust enough to fight you", - "who cares", - "i'll kill you later" - ], - - "ling_names": [ - "Alpha", - "Beta", - "Gamma", - "Delta", - "Epsilon", - "Eta", - "Theta", - "Lambda", - "Mu", - "Xi", - "Rho", - "Sigma", - "Tau", - "Upsilon", - "Phi", - "Psi", - "Omega" - ], - "add_name": [ "%TARGETNAME%, ", + "%TARGETNAME% ", "" ], @@ -95,11 +73,16 @@ "aggressive": [ "@pick(add_name)give me that!", + "@pick(add_name)stop it!", "@pick(add_name)i'm going to kill you!", "@pick(add_name)fuck you!" ], "help": [ + "HELP", + "HELP", + "HELP", + "HELP", "HELP", "HELP ME", "HELP HIM", @@ -140,6 +123,7 @@ ], "accusations": [ + "dead", "rogue", "cult", "a cultist", @@ -162,32 +146,64 @@ "Ling", "Ops", "Swarmers", + "Spiders", + "Xenos", "Revenant", "Traitor", "Harm", + "Blue APC", "I hear flashing", "Help", "%TARGETNAME%" ], "location": [ - "bridge", - "armory", + "space near @pick(sublocation)", + "the bridge", + "the armory", "sec", "security", "science", + "xenobio", "engineering", "cargo", "medbay", "atmos", "maint", + "@pick(sublocation) maint", + "virology", + "morgue", "hops office", "captains office", - "chapel", - "library", + "the chapel", + "the library", "tool storage", "botany", - "kitchen", + "the kitchen", + "the ai sat" + ], + + "sublocation": [ + "the bridge", + "the armory", + "sec", + "security", + "science", + "xenobio", + "engineering", + "cargo", + "medbay", + "atmos", + "maint", + "virology", + "morgue", + "hops office", + "captains office", + "the chapel", + "the library", + "tool storage", + "botany", + "the kitchen", "the ai sat" ], @@ -201,10 +217,12 @@ "Kill that person. You know who.", "You should go somewhere else. Quickly.", "Good luck. You'll need it.", - "You have my permission. Do it." + "You have my permission. Do it.", + "Just do it." ], "chemicals": [ + "Something", "Ooze", "Fire", "Earth", diff --git a/tgstation.dme b/tgstation.dme index d356f887a4..2f9498c45b 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -74,8 +74,6 @@ #include "code\__DEFINES\robots.dm" #include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\say.dm" -#include "code\__DEFINES\server_tools.config.dm" -#include "code\__DEFINES\server_tools.dm" #include "code\__DEFINES\shuttles.dm" #include "code\__DEFINES\sight.dm" #include "code\__DEFINES\sound.dm" @@ -83,6 +81,8 @@ #include "code\__DEFINES\stat_tracking.dm" #include "code\__DEFINES\status_effects.dm" #include "code\__DEFINES\subsystems.dm" +#include "code\__DEFINES\tgs.config.dm" +#include "code\__DEFINES\tgs.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" #include "code\__DEFINES\tools.dm" @@ -2448,8 +2448,6 @@ #include "code\modules\ruins\spaceruin_code\whiteshipruin_box.dm" #include "code\modules\security_levels\keycard_authentication.dm" #include "code\modules\security_levels\security_levels.dm" -#include "code\modules\server_tools\st_commands.dm" -#include "code\modules\server_tools\st_interface.dm" #include "code\modules\shuttle\arrivals.dm" #include "code\modules\shuttle\assault_pod.dm" #include "code\modules\shuttle\computer.dm" @@ -2562,6 +2560,7 @@ #include "code\modules\surgery\organs\tails.dm" #include "code\modules\surgery\organs\tongue.dm" #include "code\modules\surgery\organs\vocal_cords.dm" +#include "code\modules\tgs\includes.dm" #include "code\modules\tgui\external.dm" #include "code\modules\tgui\states.dm" #include "code\modules\tgui\subsystem.dm"