diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 0bff454fea7..d1558f77020 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -1969,7 +1969,7 @@ "aLS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "aLT" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/weapon/pen/multi/gold,/turf/simulated/floor/carpet,/area/magistrateoffice) "aLU" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutral"},/area/crew_quarters/fitness) -"aLV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Mr. Chang's"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/snow,/area/crew_quarters/mrchangs) +"aLV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Mr. Chang's"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aLW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/sleep) "aLX" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 5},/area/crew_quarters/fitness) "aLY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/arcade,/area/crew_quarters/fitness{name = "\improper Arcade"}) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 4fa7dad536d..98f541c4425 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -914,6 +914,7 @@ "rD" = (/obj/structure/table/wood{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_x = 6; pixel_y = -6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCGAMMA"; name = "Gamma Lockdown"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops) "rE" = (/turf/unsimulated/wall,/area/start) "rF" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "specopsoffice"; name = "Privacy Shutters"},/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/centcom/specops) +"rG" = (/obj/machinery/door/airlock/centcom{name = "Special Operations Command"; opacity = 1; req_access_txt = "114"},/obj/machinery/door/poddoor{id_tag = "specopsoffice"; name = "Super Privacy Shutters"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "rH" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/start) "rK" = (/turf/unsimulated/wall/splashscreen,/area/start) "sq" = (/turf/unsimulated/wall,/area/centcom/control) @@ -1034,7 +1035,6 @@ "uR" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "uS" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Ready Room East"; dir = 8; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "uT" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/centcom/specops) -"uU" = (/obj/machinery/door/airlock/centcom{name = "Special Operations Command"; opacity = 1; req_access_txt = "114"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "uW" = (/obj/structure/urinal,/turf/unsimulated/wall,/area/centcom/specops) "uX" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "va" = (/obj/structure/table/reinforced,/obj/effect/landmark{name = "Commando_Manual"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -1634,7 +1634,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGoNoJoWoPoGfmjHfFkdkdkdkdfFlZmdujujujujujujujujuqururururururussXfeujflsqtQtRtZsuutuuuvuwuxuyuzsutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpgpfpfpfphoGfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpipfpkpopfptfdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfrloGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXrFuUrFsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfrloGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXrFrGrFsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnrnrmrprooGfmaNsXrxujujujujujryujuXrzooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpDoEoEoEoErkfmaNsXrAujsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmaNsXrBujsXvkvkpqprujujujvyvyujujujvzvdrCvBvCbesXuKsqpstRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNoqodododododododoraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/_maps/map_files/templates/shelter_1.dmm b/_maps/map_files/templates/shelter_1.dmm index b260f0558a4..76276379e5b 100644 --- a/_maps/map_files/templates/shelter_1.dmm +++ b/_maps/map_files/templates/shelter_1.dmm @@ -1,18 +1,18 @@ -"a" = (/turf/simulated/wall/survival,/area/survivalpod) -"b" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/survival,/area/survivalpod) +"a" = (/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) +"b" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "c" = (/obj/structure/fans,/turf/simulated/floor/pod,/area/survivalpod) "d" = (/obj/machinery/smartfridge/survival_pod/loaded,/turf/simulated/floor/pod,/area/survivalpod) "e" = (/obj/item/device/gps/computer,/turf/simulated/floor/pod,/area/survivalpod) -"f" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/survival,/area/survivalpod) +"f" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "g" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) "h" = (/turf/simulated/floor/pod,/area/survivalpod) "i" = (/obj/structure/stool/bed/pod,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/pod,/area/survivalpod) -"j" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/survival,/area/survivalpod) +"j" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "k" = (/obj/structure/table/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) "l" = (/obj/structure/tubes,/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/pod,/area/survivalpod) -"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/survival,/area/survivalpod) +"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "n" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/survival_pod/glass,/turf/simulated/floor/pod,/area/survivalpod) -"o" = (/obj/structure/sign/mining,/turf/simulated/wall/survival,/area/survivalpod) +"o" = (/obj/structure/sign/mining,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) (1,1,1) = {" aabaa diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index b61f4f62a44..99fba63fcc4 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -1,16 +1,16 @@ -"a" = (/turf/simulated/wall/survival,/area/survivalpod) -"b" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/survival,/area/survivalpod) +"a" = (/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) +"b" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "c" = (/obj/machinery/smartfridge/survival_pod/loaded,/turf/simulated/floor/pod,/area/survivalpod) "d" = (/turf/simulated/floor/pod,/area/survivalpod) "e" = (/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) "f" = (/obj/machinery/light,/turf/simulated/floor/carpet/black,/area/survivalpod) -"g" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/survival,/area/survivalpod) +"g" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "h" = (/obj/structure/fans,/turf/simulated/floor/pod,/area/survivalpod) "i" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) "j" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/brute{pixel_x = 4; pixel_y = -2},/turf/simulated/floor/pod,/area/survivalpod) "k" = (/obj/structure/table/wood/fancy/black{pixel_y = -9},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/microwave,/turf/simulated/floor/carpet/black,/area/survivalpod) "l" = (/obj/structure/sink/kitchen{dir = 4; pixel_x = -11},/turf/simulated/floor/carpet/black,/area/survivalpod) -"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/survival,/area/survivalpod) +"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "n" = (/obj/structure/curtain/black,/obj/machinery/shower{pixel_y = 20},/turf/simulated/floor/pod{pixel_y = 0},/area/survivalpod) "o" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) "p" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/carpet/black,/area/survivalpod) @@ -21,13 +21,13 @@ "u" = (/obj/structure/tubes,/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/pod,/area/survivalpod) "v" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/displaycase{desc = "A display case containing an expensive forgery, probably."; locked = 1; pixel_y = -4; req_access_txt = "48"; start_showpiece_type = /obj/item/fakeartefact},/turf/simulated/floor/carpet/black{dir = 1},/area/survivalpod) "w" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/survival_pod/glass,/turf/simulated/floor/pod,/area/survivalpod) -"x" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/survival,/area/survivalpod) +"x" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "y" = (/obj/structure/toilet/secret{pixel_y = 12},/turf/simulated/floor/pod,/area/survivalpod) "z" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/cardboard_cutout{desc = "A cardboard cutout of a xenomorph maid."; icon_state = "cutout_lusty"; name = "lusty xenomorph maid"}, /turf/simulated/floor/carpet/black,/area/survivalpod) "A" = (/obj/structure/table/wood/fancy/black,/obj/machinery/light{dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/carpet/black,/area/survivalpod) "B" = (/obj/structure/table/wood/fancy/black,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 1},/obj/effect/spawner/lootdrop/three_course_meal,/turf/simulated/floor/carpet/black,/area/survivalpod) "C" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) -"D" = (/obj/structure/sign/mining,/turf/simulated/wall/survival,/area/survivalpod) +"D" = (/obj/structure/sign/mining,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) (1,1,1) = {" agagaga diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 4c4f1a91d06..662f5fe48f2 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -1,7 +1,6 @@ #define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE #define INTERNAL_PRESSURE_BOUND 0 #define PRESSURE_CHECKS 1 -#undefine /obj/machinery/atmospherics/unary/vent_pump icon = 'icons/atmos/vent_pump.dmi' diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index a7f5ee69d39..a2414d9cac3 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -318,7 +318,7 @@ to_chat(src, "The pressure sends you flying!") if(ishuman(src)) var/mob/living/carbon/human/H = src - H.Weaken(min(pressure_difference / 10, 10)) + H.Weaken(min(pressure_difference / 50, 2)) spawn() throw_at(general_direction, pressure_difference / 10, pressure_difference / 200, null, 0, 0, null) last_forced_movement = air_master.current_cycle diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index eda6c6d2699..fc7fc98e25f 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -26,3 +26,22 @@ //plastic flaps construction states #define PLASTIC_FLAPS_NORMAL 0 #define PLASTIC_FLAPS_DETACHED 1 + +//Material defines, for determining how much of a given material an item contains +#define MAT_METAL "$metal" +#define MAT_GLASS "$glass" +#define MAT_SILVER "$silver" +#define MAT_GOLD "$gold" +#define MAT_DIAMOND "$diamond" +#define MAT_URANIUM "$uranium" +#define MAT_PLASMA "$plasma" +#define MAT_BANANIUM "$bananium" +#define MAT_TRANQUILLITE "$tranquillite" +#define MAT_TITANIUM "$titanium" +#define MAT_BIOMASS "$biomass" +//The amount of materials you get from a sheet of mineral like iron/diamond/glass etc +#define MINERAL_MATERIAL_AMOUNT 2000 +//The maximum size of a stack object. +#define MAX_STACK_SIZE 50 +//maximum amount of cable in a coil +#define MAXCOIL 30 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index c18fb516f4b..b23c5699e4b 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -3,7 +3,7 @@ #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone #define LIGHTING_LAYER 10 // drawing layer for lighting overlays -#define LIGHTING_ICON 'icons/effects/lighting_overlay.png' // icon used for lighting shading effects +#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects #define LIGHTING_ROUND_VALUE (1 / 128) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index b46427979fb..146d3bf27f0 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -15,8 +15,6 @@ #define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried. #define NETWORK_FAILURE 32 -#define MINERAL_MATERIAL_AMOUNT 2000 //The amount of materials you get from a sheet of mineral like iron/diamond/glass etc - #define IMPRINTER 1 //For circuits. Uses glass/chemicals. #define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals #define AUTOLATHE 4 //Uses glass/metal only. diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 867421d428c..f6cb33eb527 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -162,20 +162,6 @@ #define MIN_SUPPLIED_LAW_NUMBER 15 #define MAX_SUPPLIED_LAW_NUMBER 50 -//Material defines -#define MAT_METAL "$metal" -#define MAT_GLASS "$glass" -#define MAT_SILVER "$silver" -#define MAT_GOLD "$gold" -#define MAT_DIAMOND "$diamond" -#define MAT_URANIUM "$uranium" -#define MAT_PLASMA "$plasma" -#define MAT_BANANIUM "$bananium" -#define MAT_TRANQUILLITE "$tranquillite" -#define MAT_BIOMASS "$biomass" - -#define MAX_STACK_SIZE 50 - //check_target_facings() return defines #define FACING_FAILED 0 #define FACING_SAME_DIR 1 diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index 5312cba6e14..1b85e76c772 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -120,6 +120,7 @@ #define TINT_IMPAIR 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully +#define EYE_SHINE_THRESHOLD 6 //dark_view threshold past which a humanoid's eyes will 'shine' in the dark. #define isliving(A) (istype((A), /mob/living)) #define iscarbon(A) (istype((A), /mob/living/carbon)) diff --git a/code/__DEFINES/process_scheduler.dm b/code/__DEFINES/process_scheduler.dm index d3dbf1e085c..c6c3722d49f 100644 --- a/code/__DEFINES/process_scheduler.dm +++ b/code/__DEFINES/process_scheduler.dm @@ -31,4 +31,4 @@ if(##VARNAME == src)\ ##VARNAME = null;\ else\ - message_admins("Controller '[name]' asked to release global control in spite of not having it!");}\ + message_admins("Controller '[name]' asked to release global control in spite of not having it!");} diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 712c57b3b3e..7e131dcaa21 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -2,14 +2,15 @@ #define CHANNEL_LOBBYMUSIC 1024 #define CHANNEL_ADMIN 1023 #define CHANNEL_VOX 1022 -#define CHANNEL_HEARTBEAT 1021 //sound channel for heartbeats -#define CHANNEL_BUZZ 1020 -#define CHANNEL_AMBIENCE 1019 +#define CHANNEL_JUKEBOX 1021 +#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats +#define CHANNEL_BUZZ 1019 +#define CHANNEL_AMBIENCE 1018 //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1018 +#define CHANNEL_HIGHEST_AVAILABLE 1017 #define SOUND_MINIMUM_PRESSURE 10 diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index ac17d0591c5..96109186359 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -897,3 +897,12 @@ proc/rand_hex_color() for(var/i=0;i<6;i++) color = color+pick(colors) return "#[color]" + +//Imagine removing pixels from the main icon that are covered by pixels from the mask icon. +proc/get_icon_difference(var/icon/main, var/icon/mask) + if(istype(main) && istype(mask)) + mask.Blend(rgb(255,255,255), ICON_SUBTRACT) //Make all pixels on the mask as black as possible. + mask.Opaque(rgb(255,255,255)) //Make the transparent pixels (background) white. + mask.BecomeAlphaMask() //Make all the black pixels vanish (fully transparent), leaving only the white pixels. + main.AddAlphaMask(mask) //Make the pixels in the main icon that are in the transparent zone of the mask icon also vanish (fully transparent). + return main diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index aa73b686b9d..c0c22872a32 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -116,3 +116,8 @@ var/gaussian_next if(num < 0) return 0 return sqrt(num) + +/proc/round_down(num) + if(round(num) != num) + return round(num--) + else return num \ No newline at end of file diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 4f9c08a9dc5..ef2f8578783 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -505,6 +505,7 @@ proc/checkhtml(var/t) text = replacetext(text, "\[row\]", "
")
+ text = replacetext(text, "\[time\]", "[gameTimestamp()]") // TO DO
if(P)
text = "[text]"
else
diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm
index 4b71a2c7162..e4d834a35a0 100644
--- a/code/__HELPERS/time.dm
+++ b/code/__HELPERS/time.dm
@@ -69,4 +69,100 @@ proc/isDay(var/month, var/day)
/proc/seconds_to_time(var/seconds as num)
var/numSeconds = seconds % 60
var/numMinutes = (seconds - numSeconds) / 60
- return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds."
\ No newline at end of file
+ return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds."
+
+//Takes a value of time in deciseconds.
+//Returns a text value of that number in hours, minutes, or seconds.
+/proc/DisplayTimeText(time_value)
+ var/second = time_value * 0.1
+ var/second_adjusted = null
+ var/second_rounded = FALSE
+ var/minute = null
+ var/hour = null
+ var/day = null
+
+ if(!second)
+ return "0 seconds"
+ if(second >= 60)
+ minute = round_down(second / 60)
+ second = round(second - (minute * 60), 0.1)
+ second_rounded = TRUE
+ if(second) //check if we still have seconds remaining to format, or if everything went into minute.
+ second_adjusted = round(second) //used to prevent '1 seconds' being shown
+ if(day || hour || minute)
+ if(second_adjusted == 1 && second >= 1)
+ second = " and 1 second"
+ else if(second > 1)
+ second = " and [second_adjusted] seconds"
+ else //shows a fraction if seconds is < 1
+ if(second_rounded) //no sense rounding again if it's already done
+ second = " and [second] seconds"
+ else
+ second = " and [round(second, 0.1)] seconds"
+ else
+ if(second_adjusted == 1 && second >= 1)
+ second = "1 second"
+ else if(second > 1)
+ second = "[second_adjusted] seconds"
+ else
+ if(second_rounded)
+ second = "[second] seconds"
+ else
+ second = "[round(second, 0.1)] seconds"
+ else
+ second = null
+
+ if(!minute)
+ return "[second]"
+ if(minute >= 60)
+ hour = round_down(minute / 60,1)
+ minute = (minute - (hour * 60))
+ if(minute) //alot simpler from here since you don't have to worry about fractions
+ if(minute != 1)
+ if((day || hour) && second)
+ minute = ", [minute] minutes"
+ else if((day || hour) && !second)
+ minute = " and [minute] minutes"
+ else
+ minute = "[minute] minutes"
+ else
+ if((day || hour) && second)
+ minute = ", 1 minute"
+ else if((day || hour) && !second)
+ minute = " and 1 minute"
+ else
+ minute = "1 minute"
+ else
+ minute = null
+
+ if(!hour)
+ return "[minute][second]"
+ if(hour >= 24)
+ day = round_down(hour / 24,1)
+ hour = (hour - (day * 24))
+ if(hour)
+ if(hour != 1)
+ if(day && (minute || second))
+ hour = ", [hour] hours"
+ else if(day && (!minute || !second))
+ hour = " and [hour] hours"
+ else
+ hour = "[hour] hours"
+ else
+ if(day && (minute || second))
+ hour = ", 1 hour"
+ else if(day && (!minute || !second))
+ hour = " and 1 hour"
+ else
+ hour = "1 hour"
+ else
+ hour = null
+
+ if(!day)
+ return "[hour][minute][second]"
+ if(day > 1)
+ day = "[day] days"
+ else
+ day = "1 day"
+
+ return "[day][hour][minute][second]"
\ No newline at end of file
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index f106d579e94..8be1eaa478b 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1337,7 +1337,7 @@ Standard way to write links -Sayu
if(covered_locations & HEAD)
return 0
if("eyes")
- if(covered_locations & HEAD || face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES)
+ if(face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES || eyesmouth_covered & HEADCOVERSEYES)
return 0
if("mouth")
if(covered_locations & HEAD || face_covered & HIDEFACE || eyesmouth_covered & MASKCOVERSMOUTH)
diff --git a/code/datums/cargoprofile.dm b/code/datums/cargoprofile.dm
index 4636495489f..310593d0d6b 100644
--- a/code/datums/cargoprofile.dm
+++ b/code/datums/cargoprofile.dm
@@ -1,4 +1,3 @@
-#define MAXCOIL 30
/datum/cargoprofile
var/name = "All Items"
var/id = "all" // unique ID for the UI
@@ -787,4 +786,3 @@
var/punches = punch(M,remaining / PUNCH_WORK)
if(punches>1)master.sleep++
return punches * PUNCH_WORK
-#undef MAXCOIL
diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm
index 2ae6da75863..8e31e8ae033 100644
--- a/code/datums/material_container.dm
+++ b/code/datums/material_container.dm
@@ -40,6 +40,8 @@
materials[MAT_BANANIUM] = new /datum/material/bananium()
if(mat_list[MAT_TRANQUILLITE])
materials[MAT_TRANQUILLITE] = new /datum/material/tranquillite()
+ if(mat_list[MAT_TITANIUM])
+ materials[MAT_TITANIUM] = new /datum/material/titanium()
/datum/material_container/Destroy()
QDEL_LIST_ASSOC_VAL(materials)
@@ -276,6 +278,13 @@
material_type = MAT_TRANQUILLITE
sheet_type = /obj/item/stack/sheet/mineral/tranquillite
+/datum/material/titanium
+
+/datum/material/titanium/New()
+ ..()
+ material_type = MAT_TITANIUM
+ sheet_type = /obj/item/stack/sheet/mineral/titanium
+
/datum/material/biomass
/datum/material/biomass/New()
diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm
new file mode 100644
index 00000000000..ea94aa6407b
--- /dev/null
+++ b/code/datums/mutable_appearance.dm
@@ -0,0 +1,13 @@
+// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM.
+// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity.
+// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug.
+
+// Mutable appearances are children of images, just so you know.
+
+// Helper similar to image()
+/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER)
+ var/mutable_appearance/MA = new()
+ MA.icon = icon
+ MA.icon_state = icon_state
+ MA.layer = layer
+ return MA
\ No newline at end of file
diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm
index 4195052fdda..2a8408dfe4a 100644
--- a/code/datums/spells/mind_transfer.dm
+++ b/code/datums/spells/mind_transfer.dm
@@ -20,15 +20,8 @@ Make sure spells that are removed from spell_list are actually removed and delet
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/user = usr, distanceoverride)
- if(!targets.len)
- to_chat(user, "No mind found.")
- return
- if(targets.len > 1)
- to_chat(user, "Too many minds! You're not a hive damnit!")//Whaa...aat?
- return
-
- var/mob/living/target = targets[1]
+ var/mob/living/target = targets[range]
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, "They are too far away!")
@@ -50,6 +43,10 @@ Also, you never added distance checking after target is selected. I've went ahea
to_chat(user, "Their mind is resisting your spell.")
return
+ if(istype(target, /mob/living/silicon))
+ to_chat(user, "You feel this enslaved being is just as dead as its cold, hard exoskeleton.")
+ return
+
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
var/mob/caster = user//The wizard/whomever doing the body transferring.
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 723d26a451a..b473b830e39 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -87,7 +87,7 @@
if(!D.welded)
D.activate_alarm()
if(D.operating)
- D.nextstate = CLOSED
+ D.nextstate = FD_CLOSED
else if(!D.density)
spawn(0)
D.close()
diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm
index aaea991d5cf..d448419b72d 100644
--- a/code/game/dna/genes/disabilities.dm
+++ b/code/game/dna/genes/disabilities.dm
@@ -128,10 +128,12 @@
/datum/dna/gene/disability/colourblindness/activate(var/mob/M, var/connected, var/flags)
..()
M.update_client_colour() //Handle the activation of the colourblindness on the mob.
+ M.update_icons() //Apply eyeshine as needed.
/datum/dna/gene/disability/colourblindness/deactivate(var/mob/M, var/connected, var/flags)
..()
M.update_client_colour() //Handle the deactivation of the colourblindness on the mob.
+ M.update_icons() //Remove eyeshine as needed.
/datum/dna/gene/disability/deaf
name="Deafness"
diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm
index 656be0d4cb9..e9d69c2b904 100644
--- a/code/game/dna/genes/powers.dm
+++ b/code/game/dna/genes/powers.dm
@@ -164,10 +164,12 @@
/datum/dna/gene/basic/xray/activate(mob/living/M, connected, flags)
..()
M.update_sight()
+ M.update_icons() //Apply eyeshine as needed.
/datum/dna/gene/basic/xray/deactivate(mob/living/M, connected, flags)
..()
M.update_sight()
+ M.update_icons() //Remove eyeshine as needed.
/datum/dna/gene/basic/tk
name="Telekenesis"
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 01d4e0ed3a7..ea796011e96 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -264,7 +264,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
if(!location)
return 0
- if(istype(location, /turf/simulated/shuttle/floor4)) // Fails traitors if they are in the shuttle brig -- Polymorph
+ if(istype(location, /turf/simulated/shuttle/floor4) || istype(location, /turf/simulated/floor/mineral/plastitanium/brig)) // Fails traitors if they are in the shuttle brig -- Polymorph
return 0
if(location.onCentcom() || location.onSyndieBase())
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 464381f0fa5..8289e8714e3 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -369,6 +369,7 @@
P.name = "paper - 'Security Record'"
printing = 0
+/* Removed due to BYOND issue
else if(href_list["print_p"])
if(!printing)
printing = 1
@@ -377,6 +378,7 @@
if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
create_record_photo(active1)
printing = 0
+*/
else if(href_list["printlogs"])
if(cell_logs.len && !printing)
@@ -510,6 +512,8 @@
/obj/machinery/computer/secure_data/proc/setTemp(text, list/buttons = list())
temp = list("text" = text, "buttons" = buttons, "has_buttons" = buttons.len > 0)
+/* Proc disabled due to BYOND Issue
+
/obj/machinery/computer/secure_data/proc/create_record_photo(datum/data/record/R)
// basically copy-pasted from the camera code but different enough that it has to be redone
var/icon/photoimage = get_record_photo(R)
@@ -536,6 +540,8 @@
var/obj/item/weapon/photo/PH = new/obj/item/weapon/photo(loc)
PH.construct(P)
+*/
+
/obj/machinery/computer/secure_data/proc/get_record_photo(datum/data/record/R)
// similar to the code to make a photo, but of course the actual rendering is completely different
var/icon/res = icon('icons/effects/96x96.dmi', "")
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
new file mode 100644
index 00000000000..a7ddc648df6
--- /dev/null
+++ b/code/game/machinery/dance_machine.dm
@@ -0,0 +1,479 @@
+/obj/machinery/disco
+ name = "radiant dance machine mark IV"
+ desc = "The first three prototypes were discontinued after mass casualty incidents."
+ icon = 'icons/obj/lighting.dmi'
+ icon_state = "disco0"
+ anchored = FALSE
+ atom_say_verb = "states"
+ density = TRUE
+ var/active = FALSE
+ var/list/rangers = list()
+ var/charge = 35
+ var/stop = 0
+ var/list/spotlights = list()
+ var/list/sparkles = list()
+ var/static/list/songs = list(
+ new /datum/track("Engineering's Basic Beat", 'sound/misc/disco.ogg', 600, 5),
+ new /datum/track("Engineering's Domination Dance", 'sound/misc/e1m1.ogg', 950, 6),
+ new /datum/track("Engineering's Superiority Shimmy", 'sound/misc/paradox.ogg', 2400, 4),
+ new /datum/track("Engineering's Ultimate High-Energy Hustle", 'sound/misc/boogie2.ogg', 1770, 5),
+ )
+ var/datum/track/selection = null
+
+/datum/track
+ var/song_name = "generic"
+ var/song_path = null
+ var/song_length = 0
+ var/song_beat = 0
+ var/GBP_required = 0
+
+/datum/track/New(name, path, length, beat)
+ song_name = name
+ song_path = path
+ song_length = length
+ song_beat = beat
+
+/obj/machinery/disco/proc/add_track(file, name, length, beat)
+ var/sound/S = file
+ if(!istype(S))
+ return
+ if(!name)
+ name = "[file]"
+ if(!beat)
+ beat = 5
+ if(!length)
+ length = 2400 //Unless there's a way to discern via BYOND.
+ var/datum/track/T = new /datum/track(name, file, length, beat)
+ songs += T
+
+/obj/machinery/disco/New()
+ . = ..()
+ selection = songs[1]
+
+
+/obj/machinery/disco/Destroy()
+ dance_over()
+ selection = null
+ return ..()
+
+/obj/machinery/disco/attackby(obj/item/O, mob/user, params)
+ if(!active)
+ if(iswrench(O))
+ if(!anchored && !isinspace())
+ to_chat(user,"You secure [src] to the floor.")
+ anchored = TRUE
+ else if(anchored)
+ to_chat(user,"You unsecure and disconnect [src].")
+ anchored = FALSE
+ playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
+ return
+ return ..()
+
+/obj/machinery/disco/update_icon()
+ if(active)
+ icon_state = "disco1"
+ else
+ icon_state = "disco0"
+ ..()
+
+
+/obj/machinery/disco/attack_hand(mob/user)
+ if(..())
+ return
+
+ interact(user)
+
+/obj/machinery/disco/interact(mob/user)
+ if(!anchored)
+ to_chat(user,"This device must be anchored by a wrench!")
+ return
+ if(!Adjacent(user) && !isAI(user))
+ return
+ user.set_machine(src)
+ var/list/dat = list()
+ dat +="
+ Step one: PANIC!
+ Step two: Get your ass over to engineering! QUICKLY!!!
+ Step three: Get to the Area Power Controller which controls the power to the emitters.
+ Step four: Swipe it with your ID card - if it doesn't unlock, continue with step 15.
+ Step five: Open the console and disengage the cover lock.
+ Step six: Pry open the APC with a Crowbar.
+ Step seven: Take out the empty power cell.
+ Step eight: Put in the new, full power cell - if you don't have one, continue with step 15.
+ Step nine: Quickly put on a Radiation suit.
+ Step ten: Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
+ Step eleven: Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering apc is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the apc to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
+ Step twelve: Grab your crowbar and pry away the tile closest to the APC.
+ Step thirteen: Use the wirecutters to cut the wire which is conecting the grid to the terminal.
+ Step fourteen: Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
+ Step fifteen: GET THE FUCK OUT OF THERE!!!
+
+
+ It really is that easy! Good luck! + + + + "} + +/obj/item/weapon/book/manual/medical_cloning + name = "Cloning techniques of the 26th century" + icon_state ="bookCloning" + author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Cloning techniques of the 26th century" +//big pile of shit below. + + dat = {" +
+ + + + +If youÂ’ve gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. + + + + + + "} + + +/obj/item/weapon/book/manual/ripley_build_and_repair + name = "APLU \"Ripley\" Construction and Operation Manual" + icon_state ="book" + author = "Weyland-Yutani Corp" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "APLU \"Ripley\" Construction and Operation Manual" +//big pile of shit below. + + dat = {" +
+ + + ++
+ It really is that easy! Good luck!
+
+
+ "}
+
+/obj/item/weapon/book/manual/nuclear
+ name = "Fission Mailed: Nuclear Sabotage 101"
+ icon_state ="bookNuclear"
+ author = "Syndicate"
+ title = "Fission Mailed: Nuclear Sabotage 101"
+ dat = {"
+ Nuclear Explosives 101:
+ Hello and thank you for choosing the Syndicate for your nuclear information needs.
+ Today's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.
+ First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.
+ Pressing any button on the compacted bomb will cause it to extend and bolt itself into place.
+ If this is done to unbolt it one must completely log in which at this time may not be possible.
+ To make the nuclear device functional:
+