diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..783f75f657 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,29 @@ +.dockerignore +.editorconfig +.travis.yml +GPLv3.txt +LICENSE +README.md +TGS3.json +.github +.gitignore +.gitattributes +.git/hooks +.git/info +.git/modules +.git/objects +.git/refs +.vs* +tools +cfg +data +SQL +tgui/node_modules +tgstation.dmb +tgstation.int +tgstation.rsc +tgstation.lk +tgstation.dyn.rsc +libmariadb.dll +rust_g.dll +Dockerfile diff --git a/.travis.yml b/.travis.yml index 0eccf6708e..56fa54f58d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,6 @@ matrix: addons: apt: packages: - - libc6-i386 - libstdc++6:i386 cache: directories: @@ -39,7 +38,6 @@ matrix: mariadb: '10.2' apt: packages: - - libc6-i386 - libstdc++6:i386 - libssl-dev:i386 - gcc-multilib diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..ea5ee5aa3b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM i386/ubuntu:xenial as build + +WORKDIR /rust_g + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git \ + libssl-dev \ + ca-certificates \ + rustc \ + cargo \ + pkg-config \ + && git init \ + && git remote add origin https://github.com/tgstation/rust-g + +#TODO: find a way to read these from .travis.yml or a common source eventually +ENV RUST_G_VERSION=0.3.0 + +RUN git fetch --depth 1 origin $RUST_G_VERSION \ + && git checkout FETCH_HEAD \ + && cargo build --release + +FROM tgstation/byond:512.1427 + +EXPOSE 1337 + +WORKDIR /tgstation + +COPY . . + +RUN mkdir data && mkdir -p /root/.byond/bin + +VOLUME [ "/tgstation/config", "/tgstation/data" ] + +RUN DreamMaker -max_errors 0 tgstation.dme + +COPY --from=build /rust_g/target/release/librust_g.so /root/.byond/bin/rust_g + +ENTRYPOINT [ "DreamDaemon", "tgstation.dmb", "-port", "1337", "-trusted", "-close", "-verbose" ] diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 7d79949f41..7ad773e601 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1102,7 +1102,7 @@ }, /obj/structure/table/wood, /obj/item/twohanded/spear, -/obj/item/clothing/head/helmet/roman/legionaire, +/obj/item/clothing/head/helmet/roman/legionnaire, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "cO" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index 073ecb7c4d..ba291fc258 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -21,11 +21,17 @@ /turf/open/floor/plasteel/freezer, /area/ruin/powered/seedvault) "f" = ( -/obj/machinery/plantgenes/seedvault, +/obj/machinery/plantgenes/seedvault{ + pixel_y = 6 + }, +/obj/structure/table/wood, /turf/open/floor/plasteel/freezer, /area/ruin/powered/seedvault) "g" = ( /obj/structure/table/wood, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, /turf/open/floor/plasteel/freezer, /area/ruin/powered/seedvault) "h" = ( diff --git a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm index 5348f3f385..7d9bdf6485 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -294,7 +294,7 @@ /area/ruin/space/has_grav/abandonedzoo) "aP" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/glass/bottle/liver_enhance_virion, +/obj/item/reagent_containers/glass/bottle/random_virus, /obj/item/reagent_containers/dropper, /turf/open/floor/plasteel{ icon_state = "dark" diff --git a/_maps/RandomRuins/SpaceRuins/bus.dmm b/_maps/RandomRuins/SpaceRuins/bus.dmm index be05a8d1d6..fe624c19bf 100644 --- a/_maps/RandomRuins/SpaceRuins/bus.dmm +++ b/_maps/RandomRuins/SpaceRuins/bus.dmm @@ -334,6 +334,16 @@ /obj/item/stack/sheet/metal/fifty, /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered/no_grav) +"XA" = ( +/obj/structure/fluff/bus/passable/seat{ + icon_state = "backseat" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/plush/awakenedplushie, +/turf/open/floor/plasteel/airless/dark{ + icon_state = "bus" + }, +/area/ruin/unpowered/no_grav) (1,1,1) = {" aa @@ -484,7 +494,7 @@ ab ae ad aj -am +XA az aK ad diff --git a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm index aa21d08041..299d1769b0 100644 --- a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm @@ -167,7 +167,6 @@ /area/tcommsat/chamber) "aG" = ( /obj/structure/grille/broken, -/obj/item/clothing/gloves/combat, /turf/open/floor/plasteel/airless, /area/tcommsat/chamber) "aH" = ( @@ -625,7 +624,7 @@ /turf/open/floor/plating, /area/tcommsat/chamber) "cd" = ( -/obj/item/storage/belt/utility/full/engi, +/obj/item/storage/toolbox/syndicate, /turf/open/floor/plasteel/airless, /area/tcommsat/chamber) "ce" = ( @@ -906,10 +905,6 @@ /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/tcommsat/chamber) -"SH" = ( -/obj/item/dildo/random, -/turf/open/floor/plating/airless, -/area/tcommsat/chamber) (1,1,1) = {" aa @@ -2707,7 +2702,7 @@ ac bw bw bw -SH +ac ca cf bw diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index f89a8ba4d2..75978850b0 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -4355,24 +4355,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/hotel/power) -"Dv" = ( -/obj/item/vending_refill/kink, -/obj/item/vending_refill/kink, -/obj/item/vending_refill/kink, -/obj/item/vending_refill/kink, -/obj/item/vending_refill/kink, -/obj/item/vending_refill/kink, -/obj/structure/closet, -/turf/open/floor/plasteel/neutral, -/area/ruin/space/has_grav/hotel/custodial) -"Fy" = ( -/obj/machinery/vending/kink, -/turf/open/floor/plasteel/white, -/area/ruin/space/has_grav/hotel/workroom) -"MK" = ( -/obj/effect/spawner/lootdrop/keg, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel) (1,1,1) = {" aa @@ -5383,7 +5365,7 @@ ee dH cZ eJ -MK +aw fi fQ fQ @@ -6111,7 +6093,7 @@ kC kn lg jG -Dv +ml mp mw mJ @@ -7270,7 +7252,7 @@ di di ea ep -Fy +dV di eT fp @@ -7550,7 +7532,7 @@ di di di dV -Fy +dV di eW ft diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index a6c2079969..385c1bd6df 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -273,6 +273,11 @@ /obj/machinery/light, /turf/open/floor/plasteel/vault/side, /area/ruin/space/has_grav/turretedoutpost) +"aZ" = ( +/obj/structure/rack, +/obj/item/clothing/head/helmet/riot, +/turf/open/floor/plasteel/vault/side, +/area/ruin/space/has_grav/turretedoutpost) "ba" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/breadslice/meat, @@ -281,13 +286,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/turretedoutpost) -"Kw" = ( -/obj/structure/rack, -/obj/item/multitool/ai_detect, -/turf/open/floor/plasteel/vault/side{ - dir = 8 - }, -/area/ruin/space/has_grav/turretedoutpost) "Nu" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -295,10 +293,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/turretedoutpost) -"YF" = ( -/obj/effect/spawner/lootdrop/keg, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/turretedoutpost) (1,1,1) = {" aa @@ -390,7 +384,7 @@ al ad ad ay -Kw +aF aL aF ad @@ -473,7 +467,7 @@ az az az az -aW +aZ ad al ab @@ -688,7 +682,7 @@ ad aj ak ad -YF +al ad aK aP diff --git a/_maps/RandomZLevels/VR/snowdin_VR.dmm b/_maps/RandomZLevels/VR/snowdin_VR.dmm index 0ae50fc1d8..520e847eb2 100644 --- a/_maps/RandomZLevels/VR/snowdin_VR.dmm +++ b/_maps/RandomZLevels/VR/snowdin_VR.dmm @@ -2853,7 +2853,6 @@ /turf/open/floor/plating, /area/awaymission/snowdin/post) "hk" = ( -/turf/open/floor/plating/asteroid/snow/ice, /obj/effect/turf_decal/stripes/corner, /obj/machinery/conveyor_switch/oneway{ id = "snowdin_belt_mine"; @@ -2893,7 +2892,6 @@ /turf/open/floor/plasteel, /area/awaymission/snowdin/post/gateway) "ho" = ( -/turf/open/floor/plating/asteroid/snow/ice, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/loading_area, /turf/open/floor/plating/snowed/cavern, @@ -3854,13 +3852,6 @@ /obj/effect/landmark/vr_spawn/snowdin, /turf/open/floor/plasteel/floorgrime, /area/awaymission/snowdin/post/garage) -"jv" = ( -/turf/open/floor/plating/asteroid/snow/ice, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/cavern, -/area/awaymission/snowdin/cave/cavern) "jw" = ( /obj/structure/table, /obj/item/paper/pamphlet/gateway, @@ -3940,13 +3931,6 @@ }, /turf/open/floor/plating/snowed/smoothed, /area/awaymission/snowdin/outside) -"jE" = ( -/turf/open/floor/plating/asteroid/snow/ice, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating/snowed/cavern, -/area/awaymission/snowdin/cave/cavern) "jF" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ @@ -4377,7 +4361,6 @@ }, /area/awaymission/snowdin/post) "kK" = ( -/turf/open/floor/plating/asteroid/snow/ice, /obj/machinery/conveyor{ dir = 2; id = "snowdin_belt_mine" @@ -9211,23 +9194,10 @@ /turf/open/floor/plating/snowed, /area/awaymission/snowdin/cave) "xl" = ( -/obj/effect/baseturf_helper/asteroid/snow, -/turf/closed/wall/ice, -/area/shuttle/snowdin/elevator1) -"xm" = ( -/obj/structure/window/reinforced/fulltile/ice, -/obj/structure/grille, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator1) -"xn" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" +/turf/open/floor/plasteel/elevatorshaft{ + initial_gas_mix = "o2=22;n2=82;TEMP=180" }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator1) -"xo" = ( -/turf/closed/wall/ice, -/area/shuttle/snowdin/elevator1) +/area/awaymission/snowdin/cave) "xp" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -9278,18 +9248,6 @@ }, /turf/open/floor/engine/cult, /area/awaymission/snowdin/post/mining_dock) -"xv" = ( -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator1) -"xw" = ( -/obj/machinery/computer/shuttle/snowdin/mining{ - dir = 2; - name = "Excavation Elevator Console"; - possible_destinations = "snowdin_excavation_top;snowdin_excavation_down"; - shuttleId = "snowdin_excavation" - }, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator1) "xx" = ( /obj/effect/spawner/lootdrop/crate_spawner, /turf/open/floor/plasteel/neutral, @@ -9378,26 +9336,20 @@ }, /area/awaymission/snowdin/post/mining_dock) "xK" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" - }, -/obj/docking_port/mobile/elevator{ - dir = 4; - height = 6; - id = "snowdin_excavation"; - name = "excavation elevator"; - width = 6 - }, /obj/docking_port/stationary{ + area_type = /area/awaymission/snowdin/cave; dir = 4; dwidth = 3; height = 6; id = "snowdin_excavation_top"; name = "snowdin excavation top"; + roundstart_template = /datum/map_template/shuttle/snowdin/excavation; width = 6 }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator1) +/turf/open/floor/plasteel/elevatorshaft{ + initial_gas_mix = "o2=22;n2=82;TEMP=180" + }, +/area/awaymission/snowdin/cave) "xL" = ( /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 8 @@ -9424,6 +9376,7 @@ /area/awaymission/snowdin/post/mining_dock) "xP" = ( /obj/docking_port/stationary{ + area_type = /area/awaymission/snowdin/post/mining_dock; dir = 4; dwidth = 3; height = 6; @@ -9431,7 +9384,7 @@ name = "snowdin excavation down"; width = 6 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/elevatorshaft, /area/awaymission/snowdin/post/mining_dock) "xQ" = ( /obj/effect/turf_decal/stripes/line{ @@ -9861,20 +9814,6 @@ }, /turf/open/floor/engine/vacuum, /area/awaymission/snowdin/cave) -"zb" = ( -/obj/structure/window/reinforced/fulltile/ice, -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - frequency = 1442; - id_tag = "snowdin_toxins_mine_1"; - name = "toxin out" - }, -/turf/open/floor/plating, -/area/awaymission/snowdin/cave) "zc" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 8 @@ -13339,9 +13278,6 @@ /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_dock) "Jl" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /obj/machinery/door/airlock/mining/glass{ name = "Mining Dock"; req_access_txt = "48" @@ -13384,9 +13320,6 @@ /turf/open/floor/plating/snowed/cavern, /area/awaymission/snowdin/cave/cavern) "Jr" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /obj/machinery/door/airlock/mining/glass{ name = "Mining Dock"; req_access_txt = "48" @@ -13546,20 +13479,6 @@ dir = 4 }, /area/awaymission/snowdin/post/mining_main) -"JR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator2) -"JS" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" - }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator2) -"JT" = ( -/turf/closed/wall, -/area/shuttle/snowdin/elevator2) "JU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -13622,19 +13541,6 @@ dir = 8 }, /area/awaymission/snowdin/post/mining_main) -"Kd" = ( -/obj/machinery/computer/shuttle/snowdin/mining, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) -"Ke" = ( -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) -"Kf" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) "Kg" = ( /obj/structure/ore_box, /obj/effect/turf_decal/bot, @@ -13696,27 +13602,18 @@ }, /area/awaymission/snowdin/post/mining_main) "Kn" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" - }, -/obj/docking_port/mobile/elevator{ - dir = 4; - dwidth = 2; - height = 5; - id = "snowdin_mining"; - name = "mining elevator"; - width = 5 - }, /obj/docking_port/stationary{ + area_type = /area/awaymission/snowdin/post/mining_main; dir = 4; dwidth = 2; height = 5; id = "snowdin_mining_top"; name = "snowdin mining top"; + roundstart_template = /datum/map_template/shuttle/snowdin/mining; width = 5 }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator2) +/turf/open/floor/plasteel/elevatorshaft, +/area/awaymission/snowdin/post/mining_main) "Ko" = ( /obj/machinery/light{ dir = 4 @@ -13766,7 +13663,7 @@ name = "snowdin mining bottom"; width = 5 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/elevatorshaft, /area/awaymission/snowdin/post/mining_dock) "Ku" = ( /obj/machinery/light{ @@ -13835,10 +13732,6 @@ }, /turf/open/floor/plasteel, /area/awaymission/snowdin/post/mining_main) -"KC" = ( -/obj/machinery/light/small, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) "KD" = ( /obj/structure/ore_box, /obj/effect/turf_decal/bot, @@ -13912,8 +13805,8 @@ }, /area/awaymission/snowdin/post/mining_main) "KP" = ( -/turf/closed/wall/rust, -/area/shuttle/snowdin/elevator2) +/turf/open/floor/plasteel/elevatorshaft, +/area/awaymission/snowdin/post/mining_main) "KQ" = ( /obj/machinery/computer/shuttle/snowdin/mining{ dir = 8 @@ -14014,6 +13907,9 @@ }, /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_dock) +"ND" = ( +/turf/open/floor/plasteel/elevatorshaft, +/area/awaymission/snowdin/post/mining_dock) "OF" = ( /obj/machinery/door/airlock/external{ name = "Ready Room"; @@ -28100,7 +27996,7 @@ wS wS ai yf -zb +yt ai wS wS @@ -28184,10 +28080,10 @@ IY Go Jx KP -JR +KP Kn -JR -JT +KP +KP KT Go ac @@ -28339,7 +28235,7 @@ ii yb an yf -zb +yt yf ai ai @@ -28440,11 +28336,11 @@ Gq Gq Go Jx -JR -Kd -Ke -KC -JR +KP +KP +KP +KP +KP KT GP ac @@ -28697,11 +28593,11 @@ Iy Iy Go Jy -JS -Ke -Ke -Ke -JS +KP +KP +KP +KP +KP KU GP ac @@ -28954,11 +28850,11 @@ GP GP GP Jx -JR -Kf -Ke -Ke -JR +KP +KP +KP +KP +KP KT GP ac @@ -29211,10 +29107,10 @@ ae ae Go Jx -JT -JR -JS -JR +KP +KP +KP +KP KP KT GP @@ -30131,11 +30027,11 @@ ae aj xa xl -xm -xn +xl +xl xK -xm -xo +xl +xl an ii ii @@ -30387,12 +30283,12 @@ ae ae aj xa -xm -xv -xv -xv -xv -xm +xl +xl +xl +xl +xl +xl yp ii wS @@ -30644,12 +30540,12 @@ ae wQ ai xb -xn -xv -xv -xv -xv -xn +xl +xl +xl +xl +xl +xl yq ii wS @@ -30901,12 +30797,12 @@ ae wQ ai xb -xn -xv -xv -xv -xv -xn +xl +xl +xl +xl +xl +xl yq an ii @@ -31158,12 +31054,12 @@ ae wQ wS xa -xm -xw -xv -xv -xv -xm +xl +xl +xl +xl +xl +xl yr an ii @@ -31415,12 +31311,12 @@ ae wQ wS xa -xo -xm -xn -xn -xm -xo +xl +xl +xl +xl +xl +xl yp an an @@ -62364,11 +62260,11 @@ IO wL wE JH -wL -wL +ND +ND Kt -wL -wL +ND +ND KX wE bh @@ -62621,11 +62517,11 @@ IQ wL wE JH -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND KX wE bh @@ -62878,11 +62774,11 @@ wL wL wE JI -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND KY wE bh @@ -63135,11 +63031,11 @@ wL wL wE JH -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND KX wE bh @@ -63392,11 +63288,11 @@ wL wL wD JH -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND KX wD bh @@ -64151,7 +64047,7 @@ oZ oZ oZ hk -jE +sl Gk GN Hj @@ -64664,7 +64560,7 @@ oZ oZ oZ oZ -jv +By xW xW xW @@ -65339,12 +65235,12 @@ eJ wE wV xg -wL -wL -wL +ND +ND +ND xP -wL -wL +ND +ND yz yR wD @@ -65596,12 +65492,12 @@ eJ wD wW xg -wL -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND +ND yA wM zm @@ -65853,12 +65749,12 @@ wD wP wX xg -wL -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND +ND yB xy zn @@ -66111,11 +66007,11 @@ wP wW xh wW -wL -wL -wL -wL -wL +ND +ND +ND +ND +ND yB xy zn @@ -66369,10 +66265,10 @@ wW xh wW wW -wW -wL -wL -wL +ND +ND +ND +ND yC yS zm @@ -66627,9 +66523,9 @@ xi wW wW wW -wL -wL -wL +ND +ND +ND yD yT wE diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index a656e5cd0d..a25808d933 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -1640,7 +1640,7 @@ pixel_y = 32 }, /obj/item/paper/fluff/awaymissions/caves/shipment_notice, -/obj/item/paper/fluff/awaymissions/caves/saftey_notice, +/obj/item/paper/fluff/awaymissions/caves/safety_notice, /turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "fb" = ( diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 28cac610f4..42d28622c1 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -9263,23 +9263,10 @@ /turf/open/floor/plating/snowed, /area/awaymission/snowdin/cave) "xl" = ( -/obj/effect/baseturf_helper/asteroid/snow, -/turf/closed/wall/ice, -/area/shuttle/snowdin/elevator1) -"xm" = ( -/obj/structure/window/reinforced/fulltile/ice, -/obj/structure/grille, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator1) -"xn" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" +/turf/open/floor/plasteel/elevatorshaft{ + initial_gas_mix = "o2=22;n2=82;TEMP=180" }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator1) -"xo" = ( -/turf/closed/wall/ice, -/area/shuttle/snowdin/elevator1) +/area/awaymission/snowdin/cave) "xp" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -9330,18 +9317,6 @@ }, /turf/open/floor/engine/cult, /area/awaymission/snowdin/post/mining_dock) -"xv" = ( -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator1) -"xw" = ( -/obj/machinery/computer/shuttle/snowdin/mining{ - dir = 2; - name = "Excavation Elevator Console"; - possible_destinations = "snowdin_excavation_top;snowdin_excavation_down"; - shuttleId = "snowdin_excavation" - }, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator1) "xx" = ( /obj/effect/spawner/lootdrop/crate_spawner, /turf/open/floor/plasteel/neutral, @@ -9430,26 +9405,20 @@ }, /area/awaymission/snowdin/post/mining_dock) "xK" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" - }, -/obj/docking_port/mobile/elevator{ - dir = 4; - height = 6; - id = "snowdin_excavation"; - name = "excavation elevator"; - width = 6 - }, /obj/docking_port/stationary{ + area_type = /area/awaymission/snowdin/cave; dir = 4; dwidth = 3; height = 6; id = "snowdin_excavation_top"; name = "snowdin excavation top"; + roundstart_template = /datum/map_template/shuttle/snowdin/excavation; width = 6 }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator1) +/turf/open/floor/plasteel/elevatorshaft{ + initial_gas_mix = "o2=22;n2=82;TEMP=180" + }, +/area/awaymission/snowdin/cave) "xL" = ( /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 8 @@ -9476,6 +9445,7 @@ /area/awaymission/snowdin/post/mining_dock) "xP" = ( /obj/docking_port/stationary{ + area_type = /area/awaymission/snowdin/post/mining_dock; dir = 4; dwidth = 3; height = 6; @@ -9483,7 +9453,7 @@ name = "snowdin excavation down"; width = 6 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/elevatorshaft, /area/awaymission/snowdin/post/mining_dock) "xQ" = ( /obj/effect/turf_decal/stripes/line{ @@ -9917,20 +9887,6 @@ }, /turf/open/floor/engine/vacuum, /area/awaymission/snowdin/cave) -"zb" = ( -/obj/structure/window/reinforced/fulltile/ice, -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - frequency = 1442; - id_tag = "snowdin_toxins_mine_1"; - name = "toxin out" - }, -/turf/open/floor/plating, -/area/awaymission/snowdin/cave) "zc" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 8 @@ -12308,13 +12264,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plating/snowed/cavern, /area/awaymission/snowdin/cave/cavern) -"FP" = ( -/turf/open/floor/plating/asteroid/snow/ice, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/cavern, -/area/awaymission/snowdin/cave/cavern) "FQ" = ( /obj/effect/light_emitter{ name = "outdoor light"; @@ -12366,13 +12315,6 @@ }, /turf/open/floor/plating/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) -"FX" = ( -/turf/open/floor/plating/asteroid/snow/ice, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating/snowed/cavern, -/area/awaymission/snowdin/cave/cavern) "FY" = ( /turf/open/floor/plating/asteroid/snow/ice, /obj/machinery/conveyor{ @@ -13442,9 +13384,6 @@ /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_dock) "Jl" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /obj/machinery/door/airlock/mining/glass{ name = "Mining Dock"; req_access_txt = "48" @@ -13487,9 +13426,6 @@ /turf/open/floor/plating/snowed/cavern, /area/awaymission/snowdin/cave/cavern) "Jr" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /obj/machinery/door/airlock/mining/glass{ name = "Mining Dock"; req_access_txt = "48" @@ -13650,23 +13586,8 @@ }, /area/awaymission/snowdin/post/mining_main) "JQ" = ( -/obj/effect/baseturf_helper/asteroid/snow, -/turf/closed/wall/rust, -/area/shuttle/snowdin/elevator2) -"JR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator2) -"JS" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" - }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator2) -"JT" = ( -/turf/closed/wall, -/area/shuttle/snowdin/elevator2) +/turf/open/floor/plasteel/elevatorshaft, +/area/awaymission/snowdin/post/mining_main) "JU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -13729,19 +13650,6 @@ dir = 8 }, /area/awaymission/snowdin/post/mining_main) -"Kd" = ( -/obj/machinery/computer/shuttle/snowdin/mining, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) -"Ke" = ( -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) -"Kf" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) "Kg" = ( /obj/structure/ore_box, /obj/effect/turf_decal/bot, @@ -13803,27 +13711,18 @@ }, /area/awaymission/snowdin/post/mining_main) "Kn" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Elevator Access" - }, -/obj/docking_port/mobile/elevator{ - dir = 4; - dwidth = 2; - height = 5; - id = "snowdin_mining"; - name = "mining elevator"; - width = 5 - }, /obj/docking_port/stationary{ + area_type = /area/awaymission/snowdin/post/mining_main; dir = 4; dwidth = 2; height = 5; id = "snowdin_mining_top"; name = "snowdin mining top"; + roundstart_template = /datum/map_template/shuttle/snowdin/mining; width = 5 }, -/turf/open/floor/plating, -/area/shuttle/snowdin/elevator2) +/turf/open/floor/plasteel/elevatorshaft, +/area/awaymission/snowdin/post/mining_main) "Ko" = ( /obj/machinery/light{ dir = 4 @@ -13873,7 +13772,7 @@ name = "snowdin mining bottom"; width = 5 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/elevatorshaft, /area/awaymission/snowdin/post/mining_dock) "Ku" = ( /obj/machinery/light{ @@ -13942,10 +13841,6 @@ }, /turf/open/floor/plasteel, /area/awaymission/snowdin/post/mining_main) -"KC" = ( -/obj/machinery/light/small, -/turf/open/floor/engine, -/area/shuttle/snowdin/elevator2) "KD" = ( /obj/structure/ore_box, /obj/effect/turf_decal/bot, @@ -14018,9 +13913,6 @@ dir = 4 }, /area/awaymission/snowdin/post/mining_main) -"KP" = ( -/turf/closed/wall/rust, -/area/shuttle/snowdin/elevator2) "KQ" = ( /obj/machinery/computer/shuttle/snowdin/mining{ dir = 8 @@ -14156,6 +14048,20 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_dock) +"WK" = ( +/turf/open/floor/plating/asteroid/snow/ice, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/cavern, +/area/awaymission/snowdin/cave/cavern) +"XO" = ( +/turf/open/floor/plating/asteroid/snow/ice, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/snowed/cavern, +/area/awaymission/snowdin/cave/cavern) "Yn" = ( /obj/machinery/door/airlock/external/glass, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -14163,6 +14069,9 @@ }, /turf/open/floor/plating, /area/awaymission/snowdin/post/garage) +"Ys" = ( +/turf/open/floor/plasteel/elevatorshaft, +/area/awaymission/snowdin/post/mining_dock) (1,1,1) = {" aa @@ -28201,7 +28110,7 @@ wS wS ai yf -zb +yt ai wS wS @@ -28285,10 +28194,10 @@ IY Go Jx JQ -JR +JQ Kn -JR -JT +JQ +JQ KT Go ac @@ -28440,7 +28349,7 @@ ii yb an yf -zb +yt yf ai ai @@ -28541,11 +28450,11 @@ Gq Gq Go Jx -JR -Kd -Ke -KC -JR +JQ +JQ +JQ +JQ +JQ KT GP ac @@ -28798,11 +28707,11 @@ Iy Iy Go Jy -JS -Ke -Ke -Ke -JS +JQ +JQ +JQ +JQ +JQ KU GP ac @@ -29055,11 +28964,11 @@ GP GP GP Jx -JR -Kf -Ke -Ke -JR +JQ +JQ +JQ +JQ +JQ KT GP ac @@ -29312,11 +29221,11 @@ ae ae Go Jx -JT -JR -JS -JR -KP +JQ +JQ +JQ +JQ +JQ KT GP ac @@ -30232,11 +30141,11 @@ ae aj xa xl -xm -xn +xl +xl xK -xm -xo +xl +xl an ii ii @@ -30488,12 +30397,12 @@ ae ae aj xa -xm -xv -xv -xv -xv -xm +xl +xl +xl +xl +xl +xl yp ii wS @@ -30745,12 +30654,12 @@ ae wQ ai xb -xn -xv -xv -xv -xv -xn +xl +xl +xl +xl +xl +xl yq ii wS @@ -31002,12 +30911,12 @@ ae wQ ai xb -xn -xv -xv -xv -xv -xn +xl +xl +xl +xl +xl +xl yq an ii @@ -31259,12 +31168,12 @@ ae wQ wS xa -xm -xw -xv -xv -xv -xm +xl +xl +xl +xl +xl +xl yr an ii @@ -31516,12 +31425,12 @@ ae wQ wS xa -xo -xm -xn -xn -xm -xo +xl +xl +xl +xl +xl +xl yp an an @@ -62465,11 +62374,11 @@ IO wL wE JH -wL -wL +Ys +Ys Kt -wL -wL +Ys +Ys KX wE bh @@ -62722,11 +62631,11 @@ IQ wL wE JH -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys KX wE bh @@ -62979,11 +62888,11 @@ wL wL wE JI -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys KY wE bh @@ -63236,11 +63145,11 @@ wL wL wE JH -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys KX wE bh @@ -63493,11 +63402,11 @@ wL wL wD JH -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys KX wD bh @@ -64252,7 +64161,7 @@ oZ oZ oZ FN -FX +XO Gk GN Hj @@ -64765,7 +64674,7 @@ oZ oZ oZ oZ -FP +WK xW xW xW @@ -65440,12 +65349,12 @@ eJ wE wV xg -wL -wL -wL +Ys +Ys +Ys xP -wL -wL +Ys +Ys yz yR wD @@ -65697,12 +65606,12 @@ eJ wD wW xg -wL -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys +Ys yA wM zm @@ -65954,12 +65863,12 @@ wD wP wX xg -wL -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys +Ys yB xy zn @@ -66212,11 +66121,11 @@ wP wW xh wW -wL -wL -wL -wL -wL +Ys +Ys +Ys +Ys +Ys yB xy zn @@ -66470,10 +66379,10 @@ wW xh wW wW -wW -wL -wL -wL +Ys +Ys +Ys +Ys yC yS zm @@ -66728,9 +66637,9 @@ xi wW wW wW -wL -wL -wL +Ys +Ys +Ys yD yT wE diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index de733c8c34..5fa5545c1c 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -7778,10 +7778,7 @@ dir = 2; id = "UO45_air_in" }, -/turf/open/floor/engine{ - name = "air floor"; - initial_gas_mix = "n2=10580;o2=2644" - }, +/turf/open/floor/engine/air, /area/awaymission/undergroundoutpost45/engineering) "pG" = ( /obj/structure/cable{ @@ -8023,10 +8020,7 @@ external_pressure_bound = 120; name = "server vent" }, -/turf/open/floor/circuit{ - name = "Server Base"; - initial_gas_mix = "n2=500,TEMP=80" - }, +/turf/open/floor/circuit/telecomms/server, /area/awaymission/undergroundoutpost45/research) "qi" = ( /obj/machinery/atmospherics/pipe/simple{ @@ -8394,10 +8388,7 @@ /obj/machinery/rnd/server{ req_access = null }, -/turf/open/floor/circuit{ - name = "Server Base"; - initial_gas_mix = "n2=500,TEMP=80" - }, +/turf/open/floor/circuit/telecomms/server, /area/awaymission/undergroundoutpost45/research) "qQ" = ( /obj/machinery/atmospherics/pipe/manifold{ @@ -12603,6 +12594,12 @@ /obj/effect/mapping_helpers/planet_z, /turf/open/space, /area/space/nearstation) +"KE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/awaymission/undergroundoutpost45/research) (1,1,1) = {" aa @@ -37925,7 +37922,7 @@ gz gz gz gz -qh +KE qP qh gz diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index f7aefd5575..0a05c6f8ea 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -33,6 +33,13 @@ }, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) +"aad" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 1 + }, +/turf/open/floor/wood, +/area/maintenance/port/aft) "aae" = ( /obj/effect/landmark/carpspawn, /turf/open/space, @@ -707,7 +714,7 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "abV" = ( -/obj/machinery/computer/security, +/obj/machinery/computer/security/hos, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "abW" = ( @@ -1730,10 +1737,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); +/obj/machinery/computer/security/telescreen/prison{ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1769,10 +1773,7 @@ /turf/open/floor/plasteel, /area/security/prison) "aen" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); +/obj/machinery/computer/security/telescreen/prison{ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3518,7 +3519,8 @@ "ail" = ( /obj/machinery/camera{ c_tag = "Brig Interrogation"; - dir = 8 + dir = 8; + network = list("interrogation") }, /turf/open/floor/plasteel/dark, /area/security/prison) @@ -3996,10 +3998,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel, /area/security/processing) "ajv" = ( @@ -4056,6 +4055,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/machinery/computer/security/telescreen/interrogation{ + pixel_y = 30 + }, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -7919,11 +7921,8 @@ pixel_y = 7 }, /obj/item/pen, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; +/obj/machinery/computer/security/telescreen/prison{ dir = 1; - name = "Prison Monitor"; - network = list("prison"); pixel_y = -27 }, /turf/open/floor/wood, @@ -9134,12 +9133,9 @@ /obj/item/wallframe/camera, /obj/item/wallframe/camera, /obj/item/assault_pod/mining, -/obj/machinery/computer/security/telescreen{ - desc = "Used for the Auxillary Mining Base."; +/obj/machinery/computer/security/telescreen/auxbase{ dir = 8; - name = "Auxillary Base Monitor"; - network = list("auxbase"); - pixel_x = 28 + pixel_x = 30 }, /turf/open/floor/plasteel/yellow/side{ dir = 4 @@ -11089,7 +11085,21 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aCd" = ( -/obj/machinery/cryopod, +/obj/structure/bed, +/obj/item/bedsheet, +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/machinery/button/door{ + id = "Dorm1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, /turf/open/floor/carpet, /area/crew_quarters/dorms) "aCe" = ( @@ -11709,7 +11719,7 @@ "aDK" = ( /obj/machinery/door/airlock{ id_tag = "Dorm1"; - name = "Cryogenics" + name = "Dorm 1" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -12590,7 +12600,7 @@ /obj/machinery/camera/motion{ c_tag = "Vault"; dir = 1; - network = list("minisat") + network = list("vault") }, /obj/machinery/light, /turf/open/floor/plasteel/vault/corner{ @@ -14494,7 +14504,10 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/plantgenes, +/obj/machinery/plantgenes{ + pixel_y = 6 + }, +/obj/structure/table, /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "aKM" = ( @@ -16675,7 +16688,10 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQX" = ( -/obj/machinery/vending/kink, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQY" = ( @@ -17703,9 +17719,7 @@ /turf/open/floor/plasteel, /area/bridge) "aUd" = ( -/obj/machinery/computer/security/mining{ - network = list("mine","auxbase") - }, +/obj/machinery/computer/security/mining, /turf/open/floor/plasteel/brown{ dir = 6 }, @@ -20796,7 +20810,8 @@ /obj/structure/table, /obj/item/aiModule/supplied/quarantine, /obj/machinery/camera/motion{ - dir = 4 + dir = 4; + network = list("aiupload") }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) @@ -20814,7 +20829,8 @@ pixel_x = 32 }, /obj/machinery/camera/motion{ - dir = 8 + dir = 8; + network = list("aiupload") }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) @@ -21076,6 +21092,10 @@ }, /turf/closed/wall, /area/quartermaster/warehouse) +"bcU" = ( +/obj/item/stack/tile/plasteel, +/turf/open/space, +/area/space/nearstation) "bcV" = ( /obj/machinery/airalarm{ dir = 8; @@ -21466,6 +21486,10 @@ /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime, /area/quartermaster/warehouse) +"bdV" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/airless, +/area/space/nearstation) "bdW" = ( /obj/item/clothing/gloves/color/rainbow, /obj/item/clothing/head/soft/rainbow, @@ -23876,6 +23900,7 @@ "bkb" = ( /obj/machinery/camera{ c_tag = "Medbay Morgue"; + network = list("ss13","medbay"); dir = 8 }, /obj/machinery/airalarm{ @@ -24402,6 +24427,7 @@ /obj/structure/table/reinforced, /obj/machinery/camera{ c_tag = "Medbay Foyer"; + network = list("ss13","medbay"); dir = 8 }, /obj/machinery/cell_charger, @@ -25495,10 +25521,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "bnR" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); +/obj/machinery/computer/security/telescreen/vault{ pixel_y = 30 }, /obj/machinery/disposal/bin, @@ -26795,6 +26818,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay West"; + network = list("ss13","medbay"); dir = 2 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -27479,6 +27503,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay East"; + network = list("ss13","medbay"); dir = 8; pixel_y = -22 }, @@ -27843,7 +27868,7 @@ /area/maintenance/starboard) "btr" = ( /obj/machinery/camera{ - c_tag = "Cargo Recieving Dock"; + c_tag = "Cargo Receiving Dock"; dir = 4 }, /obj/machinery/button/door{ @@ -28807,7 +28832,7 @@ /obj/machinery/camera{ c_tag = "Genetics Research"; dir = 1; - network = list("ss13","rd") + network = list("ss13","medbay") }, /obj/machinery/firealarm{ dir = 1; @@ -28841,6 +28866,7 @@ "bvB" = ( /obj/machinery/camera{ c_tag = "Genetics Access"; + network = list("ss13","medbay"); dir = 8; pixel_y = -22 }, @@ -29198,7 +29224,8 @@ "bww" = ( /obj/structure/chair, /obj/machinery/camera{ - c_tag = "Surgery Observation" + c_tag = "Surgery Observation"; + network = list("ss13","medbay") }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -29283,6 +29310,7 @@ /obj/structure/table/glass, /obj/machinery/camera{ c_tag = "Medbay Cryogenics"; + network = list("ss13","medbay"); dir = 2 }, /obj/item/reagent_containers/glass/beaker/cryoxadone, @@ -29301,6 +29329,7 @@ "bwL" = ( /obj/machinery/camera{ c_tag = "Genetics Cloning"; + network = list("ss13","medbay"); dir = 4 }, /obj/structure/table, @@ -29553,13 +29582,8 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "bxj" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; - name = "Research Monitor"; - network = list("rd","minisat"); - pixel_y = 2 - }, /obj/structure/table, +/obj/machinery/computer/security/telescreen/rd, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "bxk" = ( @@ -30205,8 +30229,7 @@ pixel_x = 27 }, /obj/machinery/computer/security/mining{ - dir = 8; - network = list("mine","auxbase") + dir = 8 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -30549,13 +30572,8 @@ /area/security/checkpoint/science) "bzD" = ( /obj/structure/table, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 2 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/computer/security/telescreen/circuitry, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -30873,6 +30891,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay Treatment Center"; + network = list("ss13","medbay"); dir = 8 }, /turf/open/floor/plasteel, @@ -31091,10 +31110,6 @@ /turf/open/floor/engine, /area/science/explab) "bAS" = ( -/obj/machinery/computer/security/mining{ - dir = 4; - network = list("mine","auxbase") - }, /obj/machinery/camera{ c_tag = "Quartermaster's Office"; dir = 4 @@ -31107,6 +31122,9 @@ pixel_x = -32; supply_display = 1 }, +/obj/machinery/computer/security/qm{ + dir = 4 + }, /turf/open/floor/plasteel/brown{ dir = 10 }, @@ -31906,6 +31924,7 @@ /obj/structure/closet/secure_closet/medical3, /obj/machinery/camera{ c_tag = "Medbay Storage"; + network = list("ss13","medbay"); dir = 2 }, /turf/open/floor/plasteel/white, @@ -31988,6 +32007,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay South"; + network = list("ss13","medbay"); dir = 4 }, /turf/open/floor/plasteel/white, @@ -32280,6 +32300,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay Recovery Room"; + network = list("ss13","medbay"); dir = 8 }, /obj/machinery/iv_drip, @@ -32521,6 +32542,7 @@ }, /obj/machinery/camera{ c_tag = "Chief Medical Office"; + network = list("ss13","medbay"); dir = 8; pixel_y = -22 }, @@ -32733,13 +32755,11 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "bEK" = ( -/obj/machinery/computer/security/mining{ - network = list("mine","auxbase") - }, /obj/machinery/camera{ c_tag = "Mining Dock"; dir = 4 }, +/obj/machinery/computer/security/mining, /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bEL" = ( @@ -33103,6 +33123,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/computer/security/telescreen/cmo{ + dir = 1; + pixel_y = -24 + }, /turf/open/floor/plasteel/barber, /area/crew_quarters/heads/cmo) "bFF" = ( @@ -33815,17 +33839,13 @@ /turf/open/floor/plasteel, /area/science/mixing) "bHv" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the test chamber."; - dir = 8; - layer = 4; - name = "Test Chamber Telescreen"; - network = list("toxins"); - pixel_x = 30 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/computer/security/telescreen/toxins{ + dir = 4; + pixel_x = 30 + }, /turf/open/floor/plasteel, /area/science/mixing) "bHw" = ( @@ -34068,6 +34088,7 @@ }, /obj/machinery/camera{ c_tag = "Surgery Operating"; + network = list("ss13","medbay"); dir = 1; pixel_x = 22 }, @@ -34389,7 +34410,8 @@ pixel_y = 29 }, /obj/machinery/camera{ - c_tag = "Virology Break Room" + c_tag = "Virology Break Room"; + network = list("ss13","medbay") }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -34538,7 +34560,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "bJa" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -34880,6 +34901,10 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"bJP" = ( +/obj/machinery/vending/boozeomat/all_access, +/turf/open/floor/plasteel/bar, +/area/maintenance/port/aft) "bJQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -35577,21 +35602,13 @@ }, /area/science/test_area) "bLr" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; - dir = 8; - invuln = 1; - light = null; - name = "Hardened Bomb-Test Camera"; - network = list("toxins"); - use_power = 0 - }, /obj/item/target/alien/anchored, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/camera/preset/toxins{ + dir = 8 + }, /turf/open/floor/plating{ luminosity = 2; initial_gas_mix = "o2=0.01;n2=0.01" @@ -36439,7 +36456,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "bNF" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -36692,6 +36708,7 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Virology Airlock"; + network = list("ss13","medbay"); dir = 2 }, /obj/effect/turf_decal/stripes/line{ @@ -37421,8 +37438,34 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) +"bPR" = ( +/obj/effect/decal/cleanable/robot_debris/old, +/turf/open/floor/wood, +/area/maintenance/port/aft) +"bPS" = ( +/turf/open/floor/wood, +/area/maintenance/port/aft) +"bPT" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/port/aft) "bPU" = ( -/obj/effect/spawner/lootdrop/keg, +/obj/item/shard, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bPV" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maint Bar Access"; + req_access_txt = "12" + }, +/obj/structure/barricade/wooden{ + name = "wooden barricade (CLOSED)" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bPW" = ( +/obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/maintenance/port/aft) "bPX" = ( @@ -37810,14 +37853,10 @@ /area/science/misc_lab) "bQY" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - dir = 2; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 28 - }, /obj/item/integrated_circuit_printer, +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 + }, /turf/open/floor/plasteel/white, /area/science/circuit) "bQZ" = ( @@ -37828,14 +37867,30 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/stack/sheet/metal/fifty, -/turf/open/floor/plasteel/white, -/area/science/circuit) -"bRb" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) +"bRc" = ( +/obj/structure/table/wood, +/obj/item/soap/nanotrasen, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/port/aft) +"bRe" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/wood, +/area/maintenance/port/aft) +"bRf" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/port/aft) "bRg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -37906,13 +37961,9 @@ /obj/machinery/computer/secure_data{ dir = 8 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; +/obj/machinery/computer/security/telescreen/engine{ dir = 8; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = 30 + pixel_x = 24 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -38303,6 +38354,18 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard/aft) +"bSn" = ( +/obj/machinery/space_heater, +/turf/open/floor/wood, +/area/maintenance/port/aft) +"bSo" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/maintenance/port/aft) +"bSp" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bSq" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, @@ -38320,18 +38383,18 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Telecomms Monitoring"; - dir = 8 + dir = 8; + network = list("tcomms") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) "bSu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 +/obj/item/stack/cable_coil{ + amount = 5 }, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar) +/turf/open/floor/plating/airless, +/area/space/nearstation) "bSv" = ( /obj/machinery/camera{ c_tag = "Construction Area"; @@ -38590,7 +38653,8 @@ icon_state = "0-8" }, /obj/machinery/camera{ - c_tag = "Virology Module" + c_tag = "Virology Module"; + network = list("ss13","medbay") }, /turf/open/floor/plasteel/white, /area/medical/virology) @@ -38782,6 +38846,54 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"bTs" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/port/aft) +"bTt" = ( +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/port/aft) +"bTu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/wood, +/area/maintenance/port/aft) +"bTv" = ( +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bTw" = ( +/obj/machinery/door/airlock/maintenance/abandoned{ + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bTx" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bTy" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bTz" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -41427,9 +41539,11 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "car" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, /turf/closed/wall, -/area/maintenance/bar) +/area/maintenance/port/aft) "cas" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -41844,7 +41958,8 @@ "cbl" = ( /obj/machinery/camera{ c_tag = "Telecomms Server Room"; - dir = 4 + dir = 4; + network = list("tcomms") }, /turf/open/floor/plasteel/dark/telecomms/mainframe, /area/tcommsat/server) @@ -41953,14 +42068,16 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cbw" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /turf/open/floor/plating, /area/maintenance/port/aft) "cbx" = ( @@ -42184,14 +42301,11 @@ /area/science/circuit) "cbZ" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - dir = 1; - name = "Research Monitor"; - network = list("rd"); - pixel_y = -28 - }, /obj/item/integrated_circuit_printer, +/obj/machinery/computer/security/telescreen/circuitry{ + dir = 1; + pixel_y = -30 + }, /turf/open/floor/plasteel/white, /area/science/circuit) "cca" = ( @@ -44951,6 +45065,10 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cjn" = ( +/obj/item/weldingtool, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cjo" = ( /obj/structure/closet/toolcloset, /turf/open/floor/plasteel, @@ -45178,11 +45296,8 @@ /obj/machinery/computer/station_alert{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; +/obj/machinery/computer/security/telescreen/ce{ dir = 4; - name = "Research Monitor"; - network = list("rd"); pixel_x = -24 }, /turf/open/floor/plasteel/vault, @@ -47934,16 +48049,13 @@ /turf/open/space, /area/space/nearstation) "csq" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the turbine vent."; - dir = 1; - name = "turbine vent monitor"; - network = list("turbine"); - pixel_y = -29 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, +/obj/machinery/computer/security/telescreen/turbine{ + dir = 1; + pixel_y = -30 + }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal/incinerator) "csr" = ( @@ -49299,7 +49411,7 @@ /obj/machinery/camera/motion{ c_tag = "MiniSat Core Hallway"; dir = 4; - network = list("minisat") + network = list("aicore") }, /obj/machinery/firealarm{ dir = 8; @@ -49677,7 +49789,7 @@ /obj/machinery/camera/motion{ c_tag = "MiniSat AI Chamber North"; dir = 1; - network = list("minisat") + network = list("aicore") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) @@ -50573,7 +50685,7 @@ /obj/machinery/camera/motion{ c_tag = "MiniSat AI Chamber South"; dir = 2; - network = list("minisat") + network = list("aicore") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) @@ -50904,6 +51016,10 @@ /obj/item/clothing/under/burial, /turf/open/floor/plasteel/grimy, /area/chapel/office) +"cCa" = ( +/obj/item/clothing/head/hardhat, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cCb" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -52522,17 +52638,13 @@ /turf/open/floor/plating, /area/engine/engineering) "cMC" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; - dir = 8; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = 30 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/computer/security/telescreen/engine{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -53171,13 +53283,10 @@ /obj/item/radio/intercom{ pixel_x = -30 }, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) -"eiu" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/wood, -/area/maintenance/bar) "eyM" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -53192,12 +53301,6 @@ }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal/incinerator) -"eOM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar) "eRz" = ( /obj/structure/lattice, /obj/structure/grille, @@ -53219,14 +53322,9 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) -"fip" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/closed/wall, -/area/maintenance/bar) "flc" = ( -/obj/machinery/bookbinder, +/obj/structure/table/reinforced, +/obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel/white, /area/science/circuit) "fnC" = ( @@ -53246,13 +53344,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"fFm" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken7" - }, -/area/maintenance/bar) "fGf" = ( -/obj/machinery/smartfridge/disks, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table, /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "fKl" = ( @@ -53260,20 +53356,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/science/circuit) -"fOZ" = ( -/obj/machinery/vending/clothing, -/turf/open/floor/wood, -/area/maintenance/bar) -"fQl" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, -/turf/open/floor/wood, -/area/maintenance/bar) -"fZE" = ( -/obj/item/restraints/handcuffs/fake, -/obj/structure/bed/dogbed, -/turf/open/floor/plating, -/area/maintenance/bar) "gbq" = ( /obj/structure/cable{ icon_state = "4-8" @@ -53349,17 +53431,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"hiC" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken" - }, -/area/maintenance/bar) -"hsg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/maintenance/bar) "hRa" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -53368,23 +53439,8 @@ /obj/machinery/cell_charger{ pixel_y = 5 }, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, /turf/open/floor/plasteel/white, /area/science/circuit) -"hZp" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/lootdrop/gambling, -/turf/open/floor/wood{ - icon_state = "wood-broken" - }, -/area/maintenance/bar) -"iaK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood{ - icon_state = "wood-broken7" - }, -/area/maintenance/bar) "ijc" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -53416,11 +53472,6 @@ /obj/structure/reagent_dispensers/cooking_oil, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) -"iVZ" = ( -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, -/obj/item/assembly/signaler, -/turf/open/floor/plating, -/area/maintenance/bar) "jbf" = ( /obj/structure/cable{ icon_state = "0-2" @@ -53452,18 +53503,11 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "jrE" = ( -/obj/machinery/rnd/production/protolathe/department/science, /obj/structure/sign/poster/official/random{ pixel_x = 32 }, /turf/open/floor/plasteel/white, /area/science/circuit) -"jsx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/wood, -/area/maintenance/bar) "jAD" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -53543,11 +53587,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"kjd" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar) "knx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -53574,11 +53613,6 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) -"kEK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/chair/stool/bar, -/turf/open/floor/wood, -/area/maintenance/bar) "kOw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, @@ -53590,9 +53624,6 @@ }, /turf/open/floor/plasteel/hydrofloor, /area/hallway/secondary/service) -"kPI" = ( -/turf/open/floor/wood, -/area/maintenance/bar) "kQk" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -53616,20 +53647,12 @@ /obj/structure/sign/nanotrasen, /turf/closed/wall, /area/science/circuit) -"lBy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/vending/games, -/turf/open/floor/wood, -/area/maintenance/bar) -"lEg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks, -/turf/open/floor/wood, -/area/maintenance/bar) -"lFY" = ( -/turf/closed/wall, -/area/maintenance/bar) +"lCi" = ( +/obj/docking_port/stationary/public_mining_dock{ + dir = 8 + }, +/turf/open/floor/plating, +/area/construction/mining/aux_base) "lMg" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -53640,10 +53663,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/science/circuit) -"lSY" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/wood, -/area/maintenance/bar) "mjr" = ( /obj/machinery/vending/wardrobe/bar_wardrobe, /turf/open/floor/wood, @@ -53659,17 +53678,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"mEa" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/maintenance/bar) -"mLY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/jukebox, -/turf/open/floor/wood{ - icon_state = "wood-broken4" - }, -/area/maintenance/bar) "mNi" = ( /obj/machinery/light_switch{ pixel_x = -20 @@ -53682,16 +53690,6 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"mVS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/maintenance/bar) -"nnj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/open/floor/wood, -/area/maintenance/bar) "noK" = ( /obj/structure/girder, /turf/open/floor/plasteel/dark, @@ -53722,41 +53720,18 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"nJJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood{ - icon_state = "wood-broken" - }, -/area/maintenance/bar) "nRG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"nYh" = ( -/obj/structure/table/wood/poker, -/obj/item/storage/pill_bottle/dice, -/turf/open/floor/wood, -/area/maintenance/bar) "oce" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /turf/open/floor/plasteel/white, /area/science/mixing) -"opk" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/lootdrop/gambling, -/turf/open/floor/wood, -/area/maintenance/bar) -"oCW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, -/area/maintenance/bar) "oDF" = ( /obj/machinery/light, /turf/open/floor/plating, @@ -53774,12 +53749,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/plasteel/white, /area/science/circuit) -"pcd" = ( -/obj/machinery/door/airlock/wood{ - name = "Maintenance Bar" - }, -/turf/open/floor/wood, -/area/maintenance/bar) "pHl" = ( /obj/structure/table, /obj/item/storage/box/beakers{ @@ -53819,41 +53788,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, /area/science/misc_lab) -"pVG" = ( -/obj/machinery/computer/cryopod, -/turf/closed/wall, -/area/crew_quarters/dorms) -"pXH" = ( -/obj/structure/chair/stool/bar, -/turf/open/floor/wood, -/area/maintenance/bar) -"pYX" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "qeQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/plasteel, /area/science/circuit) -"qpv" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/white, -/area/science/circuit) "quT" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/open/space/basic, /area/space/nearstation) -"qTS" = ( -/obj/effect/spawner/lootdrop/costume, -/obj/item/electropack/shockcollar, -/turf/open/floor/plating, -/area/maintenance/bar) "rcD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -53869,34 +53814,12 @@ /obj/item/reagent_containers/food/drinks/beer, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"rpN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/chair/stool/bar, -/turf/open/floor/wood, -/area/maintenance/bar) -"rvm" = ( -/obj/machinery/vending/boozeomat, -/turf/open/floor/wood, -/area/maintenance/bar) -"rGn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/maintenance/bar) "rKP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /turf/open/floor/plating, /area/construction) -"rLR" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/spray/cleaner, -/turf/open/floor/wood, -/area/maintenance/bar) -"rTJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/maintenance/bar) "saK" = ( /obj/structure/closet/crate, /obj/item/target/alien, @@ -53909,17 +53832,6 @@ /obj/item/gun/energy/laser/practice, /turf/open/floor/plasteel/white, /area/science/circuit) -"scN" = ( -/obj/item/clothing/mask/breath/medical, -/obj/item/tank/internals/anesthetic, -/turf/open/floor/plating, -/area/maintenance/bar) -"sjA" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar) "slk" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -53938,13 +53850,6 @@ /obj/item/shovel/spade, /turf/open/floor/plasteel/hydrofloor, /area/hallway/secondary/service) -"sKA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/port/aft) "sLv" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -53987,28 +53892,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/hallway/secondary/service) -"tfq" = ( -/obj/machinery/cryopod{ - dir = 4; - tag = "0" - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"tfA" = ( -/obj/structure/reagent_dispensers/keg/aphro/strong, -/obj/item/reagent_containers/glass/beaker, -/turf/open/floor/plating, -/area/maintenance/bar) "trb" = ( /obj/machinery/light{ dir = 4 }, /turf/open/floor/plasteel, /area/security/courtroom) -"tsl" = ( -/obj/machinery/vending/autodrobe, -/turf/open/floor/wood, -/area/maintenance/bar) "tMl" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/showroomfloor, @@ -54026,10 +53915,6 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"uao" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar) "udp" = ( /obj/item/crowbar/large, /obj/structure/rack, @@ -54056,10 +53941,6 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"uAx" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/maintenance/bar) "uNu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54079,10 +53960,6 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"uVh" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/maintenance/port/aft) "uVS" = ( /obj/structure/cable{ icon_state = "4-8" @@ -54106,15 +53983,6 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) -"vmI" = ( -/obj/machinery/vending/kink, -/turf/open/floor/plating, -/area/maintenance/bar) -"vsJ" = ( -/obj/structure/table/wood, -/obj/item/weaponcrafting/receiver, -/turf/open/floor/wood, -/area/maintenance/bar) "vxh" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -54129,6 +53997,7 @@ dir = 8; pixel_x = -24 }, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "vCb" = ( @@ -54139,24 +54008,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/science/circuit) -"vPe" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/wood, -/area/maintenance/bar) "vPE" = ( /obj/machinery/light{ dir = 4 }, -/obj/machinery/libraryscanner, /turf/open/floor/plasteel/white, /area/science/circuit) -"wgE" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar) "wkN" = ( /turf/closed/wall, /area/science/circuit) @@ -54186,9 +54043,7 @@ "wvX" = ( /obj/structure/table/reinforced, /obj/machinery/light, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) "wBd" = ( @@ -54234,14 +54089,6 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"xEE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar) "xIa" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/grille_or_trash, @@ -54253,9 +54100,6 @@ }, /turf/open/floor/plasteel, /area/science/circuit) -"ydY" = ( -/turf/open/floor/carpet, -/area/crew_quarters/dorms) (1,1,1) = {" aaa @@ -65405,7 +65249,7 @@ apN apN apN apN -apN +lCi apN apN apN @@ -72918,8 +72762,8 @@ aaa aaf aaf aaf -gXs -gXs +aaa +aaa aag aaa bVx @@ -73174,11 +73018,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -pYX -aaa +bCq +bCq +bCq +bLv +bCq aoV cbj aoV @@ -73431,11 +73275,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -pYX -aaa +bCq +bJP +bCq +bSn +bCq bCq cbj bLv @@ -73688,11 +73532,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -pYX -aaa +bCq +bPS +aad +bPS +bPS bCq cbk bLv @@ -73907,7 +73751,7 @@ aLJ aLE aOl aPA -aQN +aQW aQW aTD aQW @@ -73945,11 +73789,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -pYX -aaa +bLv +bPR +bRc +bSo +bTs bCq bVy bLv @@ -74202,11 +74046,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -pYX -aaa +bCq +bPS +bRf +bSo +bTu bCq bVB bHE @@ -74459,11 +74303,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -pYX -aaa +bLv +bPT +bRe +bSo +bTt bCq bVA bWw @@ -74717,10 +74561,10 @@ aaa aaa aaa bCq +bPV bCq bCq -bCq -bCq +bTw bCq bVD bWy @@ -74976,8 +74820,8 @@ aoV bCq bPU bHE -bPU -bPU +bSp +bTv bCq bVC bWx @@ -75231,10 +75075,10 @@ bGi aoV aoV bCq -bCq -uVh +bPW bCq bCq +bTy bCq bVF bWA @@ -75490,8 +75334,8 @@ aoV bCq bHE bHE -bHE -bHE +bSq +bTx bCq bVE bWz @@ -75754,14 +75598,14 @@ bCq bCq bCq bYy -lFY -lFY -rTJ -lFY -lFY -lFY -lFY -lFY +bCq +bCq +bLv +bCq +bCq +bCq +bCq +bLv bUs bLv aaa @@ -76011,14 +75855,14 @@ bVG bHE bHE bHE -pcd -kjd -kPI -kPI -hiC -pXH -pXH -lFY +bLv +aaf +aoV +aoV +aoV +aoV +aoV +bLv bUs bLv aaa @@ -76264,18 +76108,18 @@ bHE bHE bCq bHE -lFY -lFY -lFY -lFY -lFY -kPI -fFm -kPI -pXH -vPe -opk -lFY +bLv +bLv +bLv +bLv +bLv +aoV +aoV +aoV +aoV +aoV +aaf +bLv bUs bLv aaf @@ -76521,18 +76365,18 @@ bHE bHE cTF bHE -lFY -vmI -qTS -fZE -lFY -kPI -kPI -kPI -pXH -nYh -hZp -lFY +bLv +aoV +aoV +aoV +aoV +aoV +aoV +aoV +aoV +aoV +aoV +bLv bUs bLv aaa @@ -76778,18 +76622,18 @@ bHE bSs bCq bHE -lFY -tfA -iVZ -scN -lFY -pXH -pXH -fFm -eOM -pXH -pXH -lFY +bLv +aoV +aoV +aoV +bcU +aaf +aaH +cCa +aoV +aoV +aoV +bLv bUs bLv aaa @@ -77035,18 +76879,18 @@ bRh bLu bCq bHE -lFY -lFY -mEa -lFY -lFY -uao -uao -pXH -wgE -kPI -kPI -lFY +bLv +aaf +aaf +aoV +aoV +aaH +bdV +aaH +aaf +aaf +aaf +bLv bUs bLv aaf @@ -77292,19 +77136,19 @@ bCq bCq bCq bHE -lFY -fQl -kPI -fFm -eiu -kPI +bLv +aoV +aoV +aoV +aoV +cjn bSu -kEK -nJJ -mVS -mLY -rGn -sKA +aaH +aoV +aoV +aoV +bLv +bUs bLv aaa cjJ @@ -77549,19 +77393,19 @@ bLv aaa bLv bHE -lFY -vsJ -nnj -oCW -lEg -iaK -xEE -rpN -sjA -oCW -lBy -fip -bUz +bLv +aoV +aoV +aoV +aoV +aoV +aaH +aaf +aoV +aoV +aoV +bLv +bUs bLv aaa cjJ @@ -77806,19 +77650,19 @@ bLv aaf bLv bUt -lFY -rLR -jsx -kjd -rvm -kPI -uao -pXH -kPI -hiC -fOZ -hsg -bUz +bLv +aaf +aaf +aoV +aoV +aoV +aaH +aoV +aoV +aaf +aaf +bLv +bUs bLv aaf cjJ @@ -78063,19 +77907,19 @@ bCq aaa bLv bUs -lFY -kPI -fFm -kPI -lSY -kPI -kPI -kPI -kPI -kPI -tsl -hsg -bUz +bLv +aoV +aoV +aoV +aoV +aoV +aaf +aoV +aoV +aoV +aoV +bCq +bUs bCq aaa aaf @@ -78320,19 +78164,19 @@ aaa aaa bTB bUv -uAx -uAx -uAx -uAx -uAx -uAx -uAx -uAx -uAx -uAx -uAx +bES +bES +bES +bES +bGp +bGp +bGp +bGp +bES +bES +bES car -bUz +bUs bCq bCq bCq @@ -84179,8 +84023,8 @@ arf arf arf arf -aoa -arf +anF +ahn aJn aJn aJq @@ -84433,11 +84277,11 @@ arf aqa atf arf -tfq -tfq -tfq -tfq +aqa +atf arf +anF +ahn aaa aJn aJq @@ -84689,12 +84533,12 @@ ath arf apY ath -pVG -ydY -ath -ydY -ydY arf +apY +ate +arf +anF +ahn aaa aJn aLY @@ -84949,9 +84793,9 @@ ath arf aCd ath -aCd -aCd arf +anF +ahn aJw aJw aMh @@ -85207,8 +85051,8 @@ arf asd aDK arf -arf -arf +aoa +ahn aJv aKG aMg @@ -104015,16 +103859,16 @@ bMB bNA cOe bSl -bRb +bUq flc vPE -bUq +bXs bVt dfh jSO jgm oUh -qpv +vPE jrE saK bSl diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f3a515abe9..4d8cd88eb8 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -897,7 +897,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/engineering{ name = "Auxiliary Construction Storage"; - req_access_txt = "10;32;47;48" + req_one_access_txt = "10;32;47;48" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -9053,11 +9053,9 @@ /turf/open/floor/plasteel/redblue, /area/maintenance/port/fore) "ayW" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plasteel/redblue/redside{ dir = 8 }, @@ -19222,9 +19220,6 @@ /turf/open/floor/plasteel/neutral, /area/quartermaster/qm) "aUs" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, /obj/machinery/status_display{ pixel_x = 32 }, @@ -19233,6 +19228,9 @@ dir = 8; name = "cargo camera" }, +/obj/machinery/computer/security/qm{ + dir = 8 + }, /turf/open/floor/plasteel/brown{ dir = 4 }, @@ -27903,13 +27901,16 @@ pixel_x = 26; pixel_y = 8 }, -/obj/machinery/plantgenes, +/obj/machinery/plantgenes{ + pixel_y = 6 + }, /obj/machinery/camera{ c_tag = "Hydroponics"; dir = 8; name = "service camera" }, /obj/effect/turf_decal/delivery, +/obj/structure/table, /turf/open/floor/plasteel, /area/hydroponics) "bnn" = ( @@ -28550,7 +28551,10 @@ /turf/open/floor/plasteel, /area/hydroponics) "boC" = ( -/obj/machinery/smartfridge/disks, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table, /turf/open/floor/plasteel, /area/hydroponics) "boD" = ( @@ -28842,14 +28846,11 @@ }, /area/security/execution/transfer) "bpg" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, /obj/item/radio/intercom{ name = "Station Intercom"; pixel_y = 26 }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel/red, /area/security/execution/transfer) "bph" = ( @@ -30117,12 +30118,12 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "brC" = ( -/obj/machinery/computer/security{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/computer/security/hos{ + dir = 1 + }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "brD" = ( @@ -32400,7 +32401,7 @@ /obj/machinery/camera/motion{ c_tag = "AI Chamber - Fore"; name = "motion-sensitive ai camera"; - network = list("ai") + network = list("aichamber") }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, @@ -32854,7 +32855,8 @@ "bxe" = ( /obj/machinery/camera/motion{ c_tag = "Vault"; - dir = 4 + dir = 4; + network = list("vault") }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40848,7 +40850,7 @@ c_tag = "Telecomms - Monitoring"; dir = 2; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) @@ -41332,7 +41334,7 @@ c_tag = "AI Chamber - Aft"; dir = 1; name = "motion-sensitive ai camera"; - network = list("ai") + network = list("aichamber") }, /turf/open/floor/plasteel/vault, /area/ai_monitored/turret_protected/ai) @@ -45721,12 +45723,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the AI's satellite."; - dir = 4; - name = "Research Monitor"; - network = list("minisat"); - pixel_y = 2 +/obj/machinery/computer/security/telescreen/minisat{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 8 @@ -45767,12 +45765,8 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; +/obj/machinery/computer/security/telescreen/ce{ dir = 4; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); pixel_x = -30 }, /mob/living/simple_animal/parrot/Poly, @@ -49046,6 +49040,10 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/computer/security/telescreen/vault{ + dir = 8; + pixel_x = 26 + }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) "ccD" = ( @@ -49056,7 +49054,7 @@ c_tag = "Telecomms - Chamber Port"; dir = 4; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/vault/telecomms{ dir = 8 @@ -49500,7 +49498,7 @@ /obj/machinery/camera/motion{ c_tag = "AI - Upload"; name = "motion-sensitive ai camera"; - network = list("minisat") + network = list("aiupload") }, /turf/open/floor/plasteel/vault, /area/ai_monitored/turret_protected/ai_upload) @@ -50943,7 +50941,7 @@ c_tag = "Telecomms - Chamber Starboard"; dir = 8; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/vault/telecomms{ dir = 8 @@ -52599,7 +52597,7 @@ /obj/machinery/camera/motion{ c_tag = "Bridge - Captain's Emergency Escape"; dir = 4; - name = "command camera" + name = "motion-sensitive command camera" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -54725,7 +54723,7 @@ c_tag = "Telecomms - Cooling Room"; dir = 8; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -63602,9 +63600,7 @@ }, /area/crew_quarters/locker) "cGO" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -67894,6 +67890,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Storage"; + network = list("ss13","medbay"); dir = 4; name = "medbay camera" }, @@ -71812,6 +71809,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay - Waiting Room"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -71951,6 +71949,7 @@ "cYc" = ( /obj/machinery/camera{ c_tag = "Medbay - Break Room"; + network = list("ss13","medbay"); dir = 2; name = "medbay camera" }, @@ -72628,6 +72627,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Medbay - Fore Port"; + network = list("ss13","medbay"); dir = 8; name = "medbay camera" }, @@ -72709,6 +72709,7 @@ /obj/item/stack/medical/ointment, /obj/machinery/camera{ c_tag = "Medbay - Sleepers"; + network = list("ss13","medbay"); dir = 2; name = "medbay camera" }, @@ -75477,9 +75478,9 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Chemistry"; + network = list("ss13","medbay"); dir = 8; - name = "medbay camera"; - network = list("ss13","medbay") + name = "medbay camera" }, /turf/open/floor/plasteel/whiteyellow/corner, /area/medical/chemistry) @@ -76308,6 +76309,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Center"; + network = list("ss13","medbay"); dir = 2; name = "medbay camera" }, @@ -77164,19 +77166,17 @@ /area/science/research/abandoned) "djp" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, +/obj/machinery/cell_charger, /turf/open/floor/plasteel/white/side, /area/science/circuit) "djq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/rnd/production/protolathe/department/science, /obj/machinery/light{ dir = 1 }, /turf/open/floor/plasteel/white/side, /area/science/circuit) "djr" = ( -/obj/machinery/autolathe, /turf/open/floor/plasteel/white/side, /area/science/circuit) "djs" = ( @@ -77700,6 +77700,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay - Port"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -77798,6 +77799,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay - Starboard"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -78542,12 +78544,11 @@ /area/crew_quarters/abandoned_gambling_den) "dmr" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, /obj/structure/sign/departments/science{ pixel_x = -32 }, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -79282,7 +79283,8 @@ pixel_x = -26 }, /obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/metal/fifty, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -80849,8 +80851,6 @@ pixel_y = -32 }, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -80884,16 +80884,16 @@ }, /area/science/circuit) "drD" = ( -/obj/machinery/vending/assist, /turf/open/floor/plasteel/white/side{ dir = 1 }, /area/science/circuit) "drE" = ( -/obj/machinery/bookbinder, /obj/structure/sign/poster/official/build{ pixel_y = -32 }, +/obj/structure/table/reinforced, +/obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -80902,11 +80902,11 @@ /obj/machinery/light_switch{ pixel_x = 36 }, -/obj/machinery/libraryscanner, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 }, +/obj/machinery/vending/assist, /turf/open/floor/plasteel/white/corner{ dir = 1 }, @@ -81250,6 +81250,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Cloning Lab"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -81309,6 +81310,7 @@ /obj/item/clothing/neck/stethoscope, /obj/machinery/camera{ c_tag = "Medbay - Cryogenics"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -81775,6 +81777,7 @@ /obj/machinery/iv_drip, /obj/machinery/camera{ c_tag = "Medbay - Recovery Room"; + network = list("ss13","medbay"); dir = 8; name = "medbay camera" }, @@ -83171,6 +83174,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Genetics Lab"; + network = list("ss13","medbay"); dir = 4; name = "medbay camera" }, @@ -83802,6 +83806,7 @@ /obj/item/storage/box/disks, /obj/machinery/camera{ c_tag = "Medbay - Genetics Desk"; + network = list("ss13","medbay"); dir = 4; name = "medbay camera" }, @@ -84109,6 +84114,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Surgery"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -84703,6 +84709,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Medbay - Aft Port"; + network = list("ss13","medbay"); dir = 8; name = "medbay camera" }, @@ -84761,6 +84768,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Chief Medical Officer's Office"; + network = list("ss13","medbay"); dir = 8; name = "medbay camera" }, @@ -85669,14 +85677,12 @@ /turf/open/floor/wood, /area/crew_quarters/abandoned_gambling_den) "dBR" = ( -/obj/machinery/vending/boozeomat{ - req_access_txt = "0" - }, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random{ pixel_y = -32 }, +/obj/machinery/vending/boozeomat/all_access, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) "dBS" = ( @@ -85983,8 +85989,9 @@ /obj/structure/table/glass, /obj/item/clipboard, /obj/item/toy/figure/cmo, -/obj/machinery/status_display{ - pixel_x = -32 +/obj/machinery/computer/security/telescreen/cmo{ + dir = 4; + pixel_x = -30 }, /turf/open/floor/plasteel/neutral/side{ dir = 4 @@ -86031,6 +86038,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Aft Starboard"; + network = list("ss13","medbay"); dir = 4; name = "medbay camera" }, @@ -88056,16 +88064,12 @@ /area/science/test_area) "dGY" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the testing site."; - dir = 4; - layer = 4; - name = "Testing Site Telescreen"; - network = list("toxins") - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/computer/security/telescreen/toxins{ + dir = 4 + }, /turf/open/floor/plasteel, /area/science/mixing) "dGZ" = ( @@ -89064,6 +89068,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Medbay - Morgue"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -89175,6 +89180,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Chief Medical Officer's Quarters"; + network = list("ss13","medbay"); dir = 1; name = "medbay camera" }, @@ -90372,17 +90378,8 @@ /obj/item/target, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; - dir = 4; - invuln = 1; - light = null; - name = "hardened testing camera"; - network = list("toxins"); - start_active = 1; - use_power = 0 +/obj/machinery/camera/preset/toxins{ + dir = 4 }, /turf/open/floor/plating/airless, /area/science/test_area) @@ -92475,6 +92472,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Virology - Containment Lock"; + network = list("ss13","medbay"); dir = 8; name = "virology camera" }, @@ -92987,6 +92985,7 @@ }, /obj/machinery/camera{ c_tag = "Virology - Break Room"; + network = list("ss13","medbay"); dir = 8; name = "virology camera" }, @@ -94693,6 +94692,7 @@ }, /obj/machinery/camera{ c_tag = "Virology - Lab"; + network = list("ss13","medbay"); name = "virology camera" }, /obj/effect/turf_decal/bot, @@ -94712,6 +94712,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Virology - Hallway"; + network = list("ss13","medbay"); dir = 8; name = "virology camera" }, @@ -96415,6 +96416,7 @@ }, /obj/machinery/camera{ c_tag = "Virology - Cells"; + network = list("ss13","medbay"); dir = 8; name = "virology camera" }, @@ -99717,7 +99719,7 @@ "gUH" = ( /obj/machinery/light, /obj/structure/table/reinforced, -/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -100149,6 +100151,12 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/engine, /area/science/mixing) +"oMw" = ( +/obj/docking_port/stationary/public_mining_dock{ + dir = 4 + }, +/turf/open/floor/plating, +/area/construction/mining/aux_base) "oNd" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -143475,7 +143483,7 @@ aeF aeF aeF aeF -aeF +oMw aeF aeF aeF diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 477e06d124..354d3a3c1c 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -903,7 +903,6 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/cryopod, /turf/open/floor/plasteel/floorgrime, /area/security/prison) "acy" = ( @@ -1911,7 +1910,7 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hos) "aev" = ( -/obj/machinery/computer/security, +/obj/machinery/computer/security/hos, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hos) "aew" = ( @@ -3556,13 +3555,6 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching certain areas."; - dir = 1; - name = "Head of Security's Monitor"; - network = list("prison","minisat","tcomm"); - pixel_y = -30 - }, /turf/open/floor/plasteel/vault, /area/crew_quarters/heads/hos) "ahK" = ( @@ -3641,6 +3633,25 @@ icon_state = "platingdmg1" }, /area/maintenance/fore) +"ahU" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/table, +/obj/item/stock_parts/manipulator, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/fore) +"ahV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + dir = 1 + }, +/area/crew_quarters/fitness/recreation) "ahW" = ( /obj/structure/window/reinforced{ dir = 1 @@ -4057,6 +4068,22 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"aiP" = ( +/obj/structure/table, +/obj/item/folder, +/turf/open/floor/plating, +/area/maintenance/fore) +"aiQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/open/floor/plasteel/neutral/corner{ + dir = 1 + }, +/area/crew_quarters/fitness/recreation) "aiR" = ( /obj/structure/table, /obj/item/clothing/under/sl_suit{ @@ -4460,9 +4487,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8 - }, +/turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) "ajS" = ( /obj/structure/table, @@ -5107,6 +5132,10 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"alf" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/fitness/recreation) "alg" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -5810,6 +5839,10 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"amv" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/vault, +/area/crew_quarters/fitness/recreation) "amw" = ( /obj/structure/window/reinforced, /obj/machinery/door/window/eastright{ @@ -6003,8 +6036,7 @@ /obj/machinery/door/window/westleft{ base_state = "right"; dir = 2; - icon_state = "right"; - name = "windoor" + icon_state = "right" }, /obj/item/book/manual/wiki/engineering_hacking, /obj/item/tape/random, @@ -7757,7 +7789,9 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aqR" = ( -/obj/machinery/vending/kink, +/obj/structure/chair{ + dir = 8 + }, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -7810,10 +7844,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aqY" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel/dark, /area/security/brig) "aqZ" = ( @@ -8736,12 +8767,8 @@ /area/security/main) "asN" = ( /obj/structure/chair, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching proceedings in the interrogation room."; +/obj/machinery/computer/security/telescreen/interrogation{ dir = 1; - layer = 4; - name = "interrogation monitor"; - network = list("interrogation"); pixel_y = -30 }, /turf/open/floor/plasteel/grimy, @@ -9825,6 +9852,10 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/machinery/computer/security/telescreen/interrogation{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/red/side{ dir = 5 }, @@ -10491,7 +10522,7 @@ /area/security/brig) "awz" = ( /obj/machinery/camera{ - c_tag = "Interrogation"; + c_tag = "Interrogation room"; dir = 8; network = list("interrogation") }, @@ -13073,6 +13104,7 @@ "aCg" = ( /obj/machinery/camera/motion{ c_tag = "Vault"; + network = list("vault"); dir = 1 }, /obj/machinery/light, @@ -14169,8 +14201,7 @@ /area/quartermaster/warehouse) "aEv" = ( /obj/machinery/computer/security/mining{ - dir = 4; - network = list("mine","auxbase") + dir = 4 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) @@ -17444,7 +17475,7 @@ /obj/structure/table, /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber - Fore"; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /obj/item/twohanded/required/kirbyplants/photosynthetic{ pixel_y = 10 @@ -19600,13 +19631,12 @@ /turf/closed/wall, /area/quartermaster/qm) "aQq" = ( -/obj/machinery/computer/security/mining{ - dir = 4; - network = list("mine","auxbase") - }, /obj/machinery/light_switch{ pixel_x = -23 }, +/obj/machinery/computer/cargo{ + dir = 4 + }, /turf/open/floor/plasteel/brown{ dir = 8 }, @@ -19705,7 +19735,7 @@ /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber - Port"; dir = 1; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) @@ -19728,7 +19758,7 @@ /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber - Starboard"; dir = 1; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) @@ -20164,7 +20194,9 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/computer/camera_advanced/base_construction, +/obj/machinery/computer/camera_advanced/base_construction{ + dir = 4 + }, /turf/open/floor/plasteel/yellow/side{ dir = 9 }, @@ -20224,7 +20256,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aRK" = ( -/obj/machinery/computer/cargo{ +/obj/machinery/computer/security/qm{ dir = 4 }, /turf/open/floor/plasteel/brown{ @@ -20667,7 +20699,9 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "aSJ" = ( -/obj/machinery/computer/shuttle/mining, +/obj/machinery/computer/shuttle/mining{ + dir = 4 + }, /turf/open/floor/plasteel/yellow/side{ dir = 10 }, @@ -21557,16 +21591,9 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching areas on the MiniSat."; - dir = 8; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); - pixel_x = 29 - }, /obj/machinery/camera/motion{ c_tag = "AI Upload Foyer"; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /obj/machinery/airalarm{ pixel_y = 26 @@ -21721,7 +21748,7 @@ /turf/open/floor/plasteel/vault, /area/crew_quarters/locker) "aUR" = ( -/obj/machinery/vending/kink, +/obj/structure/closet/wardrobe/green, /turf/open/floor/plasteel/vault, /area/crew_quarters/locker) "aUS" = ( @@ -21889,7 +21916,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Fore"; dir = 2; - network = list("rd") + network = list("aicore") }, /obj/structure/showcase/cyborg/old{ dir = 2; @@ -22137,8 +22164,7 @@ pixel_x = 27 }, /obj/machinery/computer/security/mining{ - dir = 8; - network = list("mine","auxbase") + dir = 8 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -23373,7 +23399,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Port"; dir = 4; - network = list("rd") + network = list("aicore") }, /obj/structure/showcase/cyborg/old{ dir = 4; @@ -24085,7 +24111,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Core"; dir = 2; - network = list("rd") + network = list("aicore") }, /turf/open/floor/plasteel/vault{ dir = 10 @@ -24989,10 +25015,8 @@ pixel_y = 10 }, /obj/item/radio/off, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 4; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_x = -29 }, /turf/open/floor/plasteel/red/side{ @@ -25050,7 +25074,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Starboard"; dir = 8; - network = list("rd") + network = list("aicore") }, /obj/structure/showcase/cyborg/old{ dir = 8; @@ -25527,7 +25551,7 @@ }, /area/security/checkpoint/engineering) "bcO" = ( -/obj/machinery/vending/kink, +/obj/structure/easel, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -26146,10 +26170,8 @@ /obj/structure/rack, /obj/item/storage/secure/briefcase, /obj/item/clothing/mask/cigarette/cigar, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/ce{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -30 }, /turf/open/floor/plasteel/vault{ @@ -28071,7 +28093,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Aft"; dir = 1; - network = list("rd") + network = list("aicore") }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/dark, @@ -29986,15 +30008,12 @@ }, /obj/item/storage/secure/briefcase, /obj/structure/table/wood, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, /obj/item/folder/blue, /obj/item/storage/secure/briefcase, /obj/item/assembly/flash/handheld, +/obj/machinery/computer/security/telescreen/vault{ + pixel_y = 30 + }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) "bmq" = ( @@ -32163,10 +32182,8 @@ /obj/structure/rack, /obj/item/aicard, /obj/item/radio/off, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -29 }, /turf/open/floor/plasteel/darkblue/side{ @@ -32961,10 +32978,8 @@ /obj/machinery/porta_turret/ai{ dir = 2 }, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 8; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_x = 28 }, /turf/open/floor/plasteel/vault{ @@ -32986,10 +33001,8 @@ }, /obj/machinery/light, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -29 }, /turf/open/floor/plasteel/dark, @@ -33751,10 +33764,8 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/pen, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -28 }, /turf/open/floor/plasteel/darkblue/corner, @@ -35468,7 +35479,7 @@ /obj/machinery/computer/security/telescreen{ dir = 8; name = "Telecomms Camera Monitor"; - network = list("tcomm"); + network = list("tcomms"); pixel_x = 26 }, /obj/machinery/computer/telecomms/monitor{ @@ -36764,10 +36775,8 @@ /area/crew_quarters/heads/captain/private) "bAe" = ( /obj/machinery/light, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -29 }, /obj/structure/bed/dogbed/renault, @@ -38475,7 +38484,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Fore-Port"; dir = 2; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) @@ -38506,7 +38515,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Fore-Starboard"; dir = 2; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) @@ -40825,7 +40834,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Control Room"; dir = 1; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/structure/table/wood, /obj/item/pen, @@ -41685,9 +41694,7 @@ /turf/open/floor/plating, /area/maintenance/port) "bLe" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plating, /area/maintenance/port) "bLf" = ( @@ -42242,7 +42249,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Aft-Port"; dir = 4; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/dark/telecomms/mainframe, /area/tcommsat/server) @@ -42280,7 +42287,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Aft-Starboard"; dir = 8; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/structure/cable/yellow{ icon_state = "0-8" @@ -43086,7 +43093,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Aft"; dir = 1; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/ntnet_relay, @@ -45989,9 +45996,6 @@ sortType = 20 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -46230,12 +46234,11 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bUT" = ( -/obj/structure/rack, -/obj/item/weldingtool, -/obj/item/screwdriver{ - pixel_y = 16 +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/enzyme{ + layer = 5 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/item/reagent_containers/food/condiment/flour, /turf/open/floor/plating, /area/maintenance/port/aft) "bUU" = ( @@ -46249,20 +46252,16 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bUW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 }, /turf/open/floor/plating, /area/maintenance/port/aft) "bUX" = ( -/obj/structure/rack, -/obj/item/stack/cable_coil{ - pixel_x = -1; - pixel_y = -3 - }, -/obj/item/stack/cable_coil, -/obj/item/wirecutters, -/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/closet/crate/bin, +/obj/item/kitchen/knife, /turf/open/floor/plating, /area/maintenance/port/aft) "bUY" = ( @@ -46719,26 +46718,13 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bVW" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/glass/beaker, /turf/open/floor/plating{ icon_state = "platingdmg1" }, /area/maintenance/port/aft) -"bVX" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"bVZ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"bWa" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bWb" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -47473,12 +47459,11 @@ }, /area/maintenance/port/aft) "bXA" = ( -/obj/structure/table, -/obj/item/flashlight/lamp, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"bXB" = ( -/obj/structure/chair/stool, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, /turf/open/floor/plating, /area/maintenance/port/aft) "bXC" = ( @@ -47917,25 +47902,11 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"bYG" = ( -/obj/structure/table, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/pen, -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bYH" = ( -/obj/structure/light_construct, +/obj/structure/rack, +/obj/item/stack/rods{ + amount = 4 + }, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -49840,7 +49811,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/smartfridge/disks, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table, /turf/open/floor/plasteel, /area/hydroponics) "ccA" = ( @@ -50095,8 +50069,6 @@ /turf/open/space, /area/solar/port/aft) "cdb" = ( -/obj/structure/girder, -/obj/structure/grille, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -50124,6 +50096,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/girder, +/obj/structure/grille, /turf/open/floor/plating, /area/maintenance/port/aft) "cde" = ( @@ -50664,8 +50638,6 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "ceo" = ( -/obj/structure/girder, -/obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -50702,19 +50674,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) -"ces" = ( -/obj/structure/table, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/pen, -/turf/open/floor/plating, -/area/maintenance/port/aft) "ceu" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -53017,7 +52976,7 @@ /turf/open/floor/plating/airless, /area/engine/atmos) "cjp" = ( -/obj/machinery/vending/boozeomat, +/obj/machinery/vending/boozeomat/all_access, /turf/open/floor/wood, /area/maintenance/port/aft) "cjq" = ( @@ -57864,13 +57823,8 @@ /turf/open/floor/plating, /area/crew_quarters/heads/hor) "csZ" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 2 - }, /obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/rd, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -57998,7 +57952,10 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cto" = ( -/obj/machinery/vending/kink, +/obj/machinery/vending/assist, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/aft) "ctq" = ( @@ -62086,7 +62043,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "cBO" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -62876,22 +62832,13 @@ /turf/open/floor/plating/airless, /area/science/test_area) "cDy" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top."; - dir = 8; - invuln = 1; - light = null; - luminosity = 3; - name = "Hardened Bomb-Test Camera"; - network = list("toxins"); - use_power = 0 - }, /obj/item/target/alien/anchored, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/camera/preset/toxins{ + dir = 8 + }, /turf/open/floor/plating/airless{ luminosity = 2 }, @@ -63871,7 +63818,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "cFw" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -70677,13 +70623,6 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/science/xenobiology) -"cUd" = ( -/obj/machinery/cryopod{ - dir = 4; - tag = "0" - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness/recreation) "cUH" = ( /obj/structure/table/optable, /turf/open/floor/plasteel/white, @@ -71335,11 +71274,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"dbk" = ( -/obj/item/hand_labeler_refill, -/obj/structure/easel, -/turf/open/floor/plating, -/area/maintenance/port) "dbl" = ( /obj/structure/easel, /turf/open/floor/plating, @@ -71426,10 +71360,13 @@ /turf/open/floor/circuit/killroom, /area/science/xenobiology) "dbE" = ( -/obj/machinery/plantgenes, +/obj/machinery/plantgenes{ + pixel_y = 6 + }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/table, /turf/open/floor/plasteel, /area/hydroponics) "dbF" = ( @@ -73555,15 +73492,19 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "dhp" = ( +/obj/machinery/light{ + dir = 8 + }, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8 +/obj/structure/sign/poster/official/random{ + pixel_x = -32 }, +/turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) "dhq" = ( /obj/structure/table/reinforced, @@ -74202,12 +74143,7 @@ /turf/open/floor/plating, /area/maintenance/port) "diy" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/poster/random_contraband, +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) "diz" = ( @@ -74289,10 +74225,10 @@ /turf/open/floor/wood, /area/maintenance/port/aft) "diF" = ( +/obj/structure/chair/stool, /obj/structure/sign/poster/contraband/random{ pixel_y = 32 }, -/obj/machinery/jukebox, /turf/open/floor/wood, /area/maintenance/port/aft) "diG" = ( @@ -75935,10 +75871,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"dWa" = ( -/obj/machinery/computer/cryopod, -/turf/closed/wall, -/area/security/prison) "dYu" = ( /obj/machinery/door/airlock/external{ name = "Auxiliary Airlock" @@ -75972,6 +75904,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) "eqG" = ( @@ -76035,16 +75968,25 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"gfh" = ( -/obj/machinery/libraryscanner, -/turf/open/floor/plasteel/white, -/area/science/circuit) "gnZ" = ( /obj/item/radio/intercom{ pixel_y = -30 }, /turf/open/floor/plasteel/white, /area/science/circuit) +"gqA" = ( +/obj/machinery/button/door{ + dir = 2; + id = "abandoned_kitchen"; + name = "Shutters Control"; + pixel_x = 26; + pixel_y = 6; + req_one_access_txt = null + }, +/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/suit/apron/chef, +/turf/open/floor/plating, +/area/maintenance/port/aft) "gra" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -76107,20 +76049,11 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"hdw" = ( -/obj/machinery/cryopod{ - dir = 4; - tag = "0" - }, -/turf/open/floor/plasteel/vault, -/area/crew_quarters/fitness/recreation) -"hfJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/white, -/area/science/circuit) +"hvt" = ( +/obj/structure/kitchenspike_frame, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/maintenance/port/aft) "hyP" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Two" @@ -76130,6 +76063,13 @@ }, /turf/open/floor/plating, /area/security/prison) +"hIt" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "abandoned_kitchen" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "ioI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -76157,6 +76097,10 @@ }, /turf/open/floor/plasteel/whitepurple, /area/science/lab) +"iLj" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/maintenance/port/aft) "jeV" = ( /obj/machinery/conveyor/inverted{ dir = 10; @@ -76168,15 +76112,11 @@ /turf/closed/wall/mineral/plastitanium, /area/crew_quarters/fitness/recreation) "jyv" = ( -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stack/sheet/metal/fifty, /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_x = 30 }, /turf/open/floor/plasteel/white, /area/science/circuit) @@ -76325,6 +76265,10 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"lGS" = ( +/obj/docking_port/stationary/public_mining_dock, +/turf/open/floor/plating, +/area/construction/mining/aux_base) "lMz" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -76378,18 +76322,13 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"mSt" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +"mWg" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/crew_quarters/fitness/recreation) +/area/maintenance/port/aft) "nnK" = ( /obj/item/stack/sheet/glass/fifty, /obj/item/paper_bin, @@ -76474,19 +76413,15 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/stock_parts/cell/super, /obj/structure/table/reinforced, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 }, -/obj/item/stock_parts/cell/super, -/obj/item/stack/sheet/metal/fifty, /turf/open/floor/plasteel/white, /area/science/circuit) "ohj" = ( @@ -76536,6 +76471,17 @@ /obj/item/pen, /turf/open/floor/plasteel/white, /area/science/circuit) +"oZg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/aft) "pmc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -76606,6 +76552,12 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"qhe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port) "qqg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -76650,10 +76602,6 @@ }, /turf/open/floor/wood, /area/library) -"rzf" = ( -/obj/machinery/computer/cryopod, -/turf/closed/wall, -/area/crew_quarters/fitness/recreation) "rzX" = ( /obj/structure/chair/office/light{ dir = 1; @@ -76692,11 +76640,6 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) -"sog" = ( -/obj/machinery/libraryscanner, -/obj/machinery/bookbinder, -/turf/open/floor/plasteel/white, -/area/science/circuit) "sFv" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -76738,11 +76681,6 @@ "sJW" = ( /turf/closed/wall/mineral/plastitanium, /area/engine/break_room) -"tjH" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/plasteel/white, -/area/science/circuit) "tsx" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -76841,7 +76779,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/rnd/production/protolathe/department/science, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, /turf/open/floor/plasteel/white, /area/science/circuit) "uYk" = ( @@ -76898,6 +76838,10 @@ }, /turf/open/floor/plating, /area/security/prison) +"wmt" = ( +/obj/effect/decal/cleanable/flour, +/turf/open/floor/plating, +/area/maintenance/port/aft) "wxc" = ( /obj/machinery/door/airlock/external{ name = "Atmospherics External Airlock"; @@ -76986,6 +76930,13 @@ /obj/structure/chair/comfy, /turf/open/floor/plasteel, /area/science/misc_lab) +"xEf" = ( +/obj/structure/table, +/obj/item/flashlight/lamp{ + on = 0 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "xVl" = ( /turf/closed/wall, /area/hallway/secondary/service) @@ -77001,6 +76952,16 @@ /obj/effect/landmark/blobstart, /turf/open/floor/engine/cult, /area/library) +"ydn" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = 3 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "ygk" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -88942,7 +88903,7 @@ obX aDa aDa aDa -aDa +lGS cWM cXR cYG @@ -93604,10 +93565,10 @@ bPJ alK cgH dux -bUU -bVX -bXB -bYG +iLj +dvt +bXE +hvt dux dux dux @@ -93861,8 +93822,8 @@ aqK alK dit dux -bUV -duH +ydn +wmt bXC bYH dux @@ -94119,12 +94080,12 @@ alK bSu dux bUW -bVZ +bXE bXD bYI bZO cbt -cdc +oZg dux dux csT @@ -94376,11 +94337,11 @@ alK bSr dux bUX -bWa -bXE -bYJ +bUU +gqA +xEf dux -dvt +mWg cdd dux cfC @@ -94633,7 +94594,7 @@ bRf bSv dux dux -dux +hIt dux dux dux @@ -94890,7 +94851,7 @@ alK bOf bOv alC -dbk +qhe dux bYK bZP @@ -95410,7 +95371,7 @@ bYM bZP cbx cdh -bXE +bUV dux dwc cia @@ -95924,7 +95885,7 @@ bYN dux cbz bXE -ces +bYJ dux dwe cic @@ -101757,7 +101718,7 @@ aax aax aax aax -dWa +abe abe abe abe @@ -111531,8 +111492,8 @@ acQ afs agr acP -acP -acP +ahU +aiP acP acP acP @@ -111788,12 +111749,12 @@ acP acP ags acP -hdw -cUd -cUd -cUd -cUd -rzf +acP +acP +acP +alf +amv +acP aoS acP arB @@ -112044,9 +112005,9 @@ aaa acQ aft agt -mSt -ahf ahf +ahV +aiQ dhp alg alg @@ -112305,7 +112266,7 @@ ahg ahg ahg ajR -ahl +ahg ahg anG aoU @@ -113671,7 +113632,7 @@ cuZ fFM cud kxk -tjH +cxO cxO cxO dGH @@ -114958,7 +114919,7 @@ mjJ krD eqq llb -hfJ +uTS cxO cxO krD @@ -115217,7 +115178,7 @@ lsv txj eEe cxO -gfh +cxO krD aaa aaa @@ -115474,7 +115435,7 @@ jyv ohj nnK cxO -sog +cxO krD aaa aaa diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 90db86d0f3..2935128d23 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1683,7 +1683,7 @@ }, /obj/machinery/power/apc{ dir = 4; - name = "Starboard Bow Maintenace APC"; + name = "Starboard Bow Maintenance APC"; areastring = "/area/maintenance/starboard/fore"; pixel_x = 26 }, @@ -2113,7 +2113,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/power/apc{ dir = 8; - name = "Fore Maintenace APC"; + name = "Fore Maintenance APC"; areastring = "/area/maintenance/fore"; pixel_x = -26; pixel_y = 3 @@ -15110,6 +15110,9 @@ codes_txt = "patrol;next_patrol=9.4-EnteringDorms"; location = "9.3-Engi" }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/neutral, /area/engine/break_room) "aFF" = ( @@ -15470,6 +15473,7 @@ name = "Engineering Foyer APC"; pixel_y = -26 }, +/obj/structure/cable/white, /turf/open/floor/plasteel/yellow/corner{ dir = 8 }, @@ -16215,7 +16219,7 @@ /area/hydroponics) "aHO" = ( /obj/machinery/door/airlock/maintenance_hatch{ - name = "Hydroponic's Maintenance"; + name = "Hydroponics Maintenance"; req_access_txt = "35" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -17841,6 +17845,7 @@ /obj/item/seeds/wheat, /obj/item/reagent_containers/food/snacks/grown/tomato, /obj/effect/turf_decal/bot, +/obj/item/paper/guides/jobs/hydroponics, /turf/open/floor/plasteel/vault/side{ dir = 1 }, @@ -17858,6 +17863,7 @@ }, /obj/item/seeds/tower, /obj/effect/turf_decal/bot, +/obj/item/book/manual/hydroponics_pod_people, /turf/open/floor/plasteel/vault/side{ dir = 1 }, @@ -25433,7 +25439,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bbQ" = ( -/obj/machinery/jukebox, /turf/open/floor/wood{ icon_state = "wood-broken5" }, @@ -30950,6 +30955,14 @@ }, /turf/open/floor/plating/airless, /area/maintenance/disposal/incinerator) +"coR" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table/glass, +/turf/open/floor/plasteel/neutral, +/area/hydroponics) "csX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -32217,13 +32230,6 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) -"mJQ" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/delivery, -/obj/item/book/manual/hydroponics_pod_people, -/obj/item/paper/guides/jobs/hydroponics, -/turf/open/floor/plasteel/neutral, -/area/hydroponics) "mQi" = ( /turf/closed/wall/rust, /area/maintenance/starboard/central) @@ -35406,8 +35412,11 @@ }, /area/hallway/primary/starboard) "uuj" = ( -/obj/machinery/plantgenes, +/obj/machinery/plantgenes{ + pixel_y = 6 + }, /obj/effect/turf_decal/bot, +/obj/structure/table/glass, /turf/open/floor/plasteel/neutral, /area/hydroponics) "uuJ" = ( @@ -74137,7 +74146,7 @@ bxN sIB cfz ewT -mJQ +aKX lyp bIJ aOj @@ -74394,7 +74403,7 @@ arY aHM aIG aJP -aKX +aKW aMk aNr aHM @@ -74651,7 +74660,7 @@ aGG aHM aIH aJP -aKW +coR aMk aNr aOh diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 9bc3ebe791..e0b5015ca6 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -2249,9 +2249,7 @@ c_tag = "Brig Prison Hallway"; network = list("ss13","prison") }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; +/obj/machinery/computer/security/telescreen/prison{ network = list("prison"); pixel_y = 30 }, @@ -4378,7 +4376,7 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "amz" = ( -/obj/machinery/computer/security{ +/obj/machinery/computer/security/hos{ dir = 8 }, /turf/open/floor/carpet, @@ -5072,10 +5070,7 @@ /turf/open/floor/plating, /area/maintenance/department/security/brig) "aok" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel/dark, /area/security/brig) "aol" = ( @@ -5936,6 +5931,10 @@ }, /area/security/brig) "aqA" = ( +/obj/machinery/computer/security/telescreen/interrogation{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/red/side{ dir = 5 }, @@ -6269,7 +6268,8 @@ "arz" = ( /obj/machinery/camera{ c_tag = "Brig Interrogation"; - dir = 8 + dir = 8; + network = list("interrogation") }, /turf/open/floor/plasteel/dark, /area/security/brig) @@ -7310,6 +7310,7 @@ "aud" = ( /obj/machinery/camera/motion{ c_tag = "Vault"; + network = list("vault"); dir = 1 }, /obj/machinery/light, @@ -7813,7 +7814,6 @@ dir = 4; pixel_x = 28 }, -/obj/machinery/cryopod, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avm" = ( @@ -10281,6 +10281,9 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "aBA" = ( +/obj/machinery/computer/security/telescreen/vault{ + pixel_y = 30 + }, /obj/machinery/computer/security/mining, /turf/open/floor/wood, /area/crew_quarters/heads/hop) @@ -10460,7 +10463,7 @@ /turf/open/floor/plasteel/arrival, /area/crew_quarters/fitness/recreation) "aBV" = ( -/obj/machinery/vending/kink, +/obj/structure/closet/wardrobe/green, /turf/open/floor/plasteel/arrival, /area/crew_quarters/fitness/recreation) "aBW" = ( @@ -10692,7 +10695,8 @@ pixel_y = 32 }, /obj/machinery/disposal/deliveryChute{ - name = "Crate Disposal Chute" + name = "Crate Disposal Chute"; + pixel_y = 6 }, /obj/structure/window/reinforced{ dir = 4 @@ -10784,7 +10788,8 @@ /obj/item/aiModule/supplied/quarantine, /obj/machinery/camera/motion{ c_tag = "AI Upload Port"; - dir = 4 + dir = 4; + network = list("aiupload") }, /obj/item/aiModule/reset, /obj/machinery/flasher{ @@ -10831,7 +10836,8 @@ /obj/item/aiModule/supplied/freeform, /obj/machinery/camera/motion{ c_tag = "AI Upload Starboard"; - dir = 8 + dir = 8; + network = list("aiupload") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -11050,7 +11056,6 @@ /turf/open/floor/plasteel/white/side, /area/crew_quarters/dorms) "aDk" = ( -/obj/machinery/cryopod, /turf/open/floor/plasteel/white/corner{ icon_state = "whitecorner"; dir = 8 @@ -11263,7 +11268,8 @@ /obj/machinery/holopad, /obj/machinery/camera/motion{ c_tag = "AI Upload Center"; - dir = 1 + dir = 1; + network = list("aiupload") }, /obj/item/radio/intercom{ broadcasting = 1; @@ -12348,10 +12354,7 @@ /turf/open/floor/plasteel/neutral/side, /area/storage/primary) "aGk" = ( -/obj/machinery/vending/boozeomat{ - products = list(/obj/item/reagent_containers/food/drinks/bottle/rum = 1, /obj/item/reagent_containers/food/drinks/bottle/wine = 1, /obj/item/reagent_containers/food/drinks/ale = 1, /obj/item/reagent_containers/food/drinks/drinkingglass = 6, /obj/item/reagent_containers/food/drinks/ice = 1, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4); - req_access_txt = "20" - }, +/obj/machinery/vending/boozeomat/pubby_captain, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -16566,6 +16569,10 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/computer/security/telescreen/auxbase{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aRH" = ( @@ -19097,7 +19104,10 @@ }, /area/hydroponics) "aXW" = ( -/obj/machinery/plantgenes, +/obj/machinery/plantgenes{ + pixel_y = 6 + }, +/obj/structure/table, /turf/open/floor/plasteel/green/corner{ dir = 4 }, @@ -21322,14 +21332,14 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bdM" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, /obj/machinery/requests_console{ department = "Mining"; departmentType = 0; pixel_x = 32 }, +/obj/machinery/computer/security/mining{ + dir = 8 + }, /turf/open/floor/plasteel/brown/corner, /area/quartermaster/miningdock) "bdQ" = ( @@ -22051,13 +22061,13 @@ }, /area/quartermaster/qm) "bfD" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_y = -35 }, +/obj/machinery/computer/security/qm{ + dir = 8 + }, /turf/open/floor/plasteel/brown{ dir = 6 }, @@ -23841,6 +23851,7 @@ }, /obj/machinery/camera{ c_tag = "Genetics Cloning Foyer"; + network = list("ss13","medbay"); dir = 2 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -24227,12 +24238,8 @@ dir = 1 }, /obj/item/integrated_electronics/debugger, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the other eggheads from the comfort of the circuitry lab."; - dir = 2; - name = "RnD Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -24240,13 +24247,9 @@ /area/science/explab) "blV" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/metal/fifty{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/sheet/metal/fifty, /obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -24257,12 +24260,8 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the other eggheads from the comfort of the circuitry lab."; - dir = 2; - name = "RnD Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -24409,6 +24408,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay Security Post"; + network = list("ss13","medbay"); dir = 4 }, /obj/structure/closet/secure_closet/security/med, @@ -24650,10 +24650,10 @@ /obj/machinery/cell_charger{ pixel_y = 5 }, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -24992,7 +24992,9 @@ /turf/open/floor/engine, /area/science/explab) "bnZ" = ( -/obj/machinery/rnd/production/techfab/department/science, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -25236,6 +25238,7 @@ /obj/structure/bed/roller, /obj/machinery/camera{ c_tag = "Medbay Entrance"; + network = list("ss13","medbay"); dir = 1 }, /turf/open/floor/plasteel/whiteblue/side, @@ -26126,7 +26129,7 @@ /obj/machinery/camera{ c_tag = "Genetics Monkey Pen Fore"; dir = 4; - network = list("ss13","rd") + network = list("ss13","medbay") }, /obj/machinery/light/small{ dir = 8 @@ -26738,6 +26741,7 @@ /obj/machinery/dna_scannernew, /obj/machinery/camera{ c_tag = "Genetics Cloning"; + network = list("ss13","medbay"); dir = 4 }, /obj/machinery/airalarm/unlocked{ @@ -27475,6 +27479,7 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/machinery/disposal/bin, /turf/open/floor/plasteel/white, /area/medical/chemistry) "bum" = ( @@ -27762,6 +27767,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Medbay Port Hallway"; + network = list("ss13","medbay"); dir = 4 }, /obj/machinery/airalarm{ @@ -28451,7 +28457,6 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "bwV" = ( -/obj/machinery/disposal/bin, /turf/open/floor/plasteel/whiteyellow/corner, /area/medical/chemistry) "bwW" = ( @@ -29672,7 +29677,7 @@ /obj/machinery/camera{ c_tag = "Genetics Monkey Pen Aft"; dir = 4; - network = list("ss13","rd") + network = list("ss13","medbay") }, /obj/structure/flora/ausbushes/grassybush, /obj/machinery/light/small{ @@ -30323,20 +30328,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching surgery."; - dir = 8; - layer = 4; - name = "Surgery Telescreen"; - network = list("surgery"); - pixel_x = 30 - }, /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/cable{ icon_state = "2-8" }, +/obj/machinery/computer/security/telescreen/cmo{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/cmo, /area/crew_quarters/heads/cmo) "bBl" = ( @@ -30694,7 +30695,7 @@ /obj/machinery/camera{ c_tag = "Genetics"; dir = 1; - network = list("ss13","rd") + network = list("ss13","medbay") }, /turf/open/floor/plasteel/whitepurple/side, /area/medical/genetics) @@ -30750,6 +30751,7 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Virology Airlock"; + network = list("ss13","medbay"); dir = 2 }, /obj/effect/turf_decal/stripes/line{ @@ -31882,7 +31884,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/landmark/blobstart, /obj/item/melee/baton/cattleprod{ - cell = new /obj/item/stock_parts/cell/high() + preload_cell_type = /obj/item/stock_parts/cell/high }, /turf/open/floor/plasteel/dark, /area/medical/exam_room) @@ -32010,13 +32012,11 @@ pixel_x = 4; pixel_y = 6 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; - name = "Research Monitor"; - network = list("rd","minisat"); - pixel_y = -32 - }, /obj/structure/table/glass, +/obj/machinery/computer/security/telescreen/rd{ + dir = 1; + pixel_y = -26 + }, /turf/open/floor/plasteel/darkpurple/side, /area/crew_quarters/heads/hor) "bEV" = ( @@ -33218,6 +33218,7 @@ "bHY" = ( /obj/machinery/camera{ c_tag = "Virology"; + network = list("ss13","medbay"); dir = 2 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -33276,6 +33277,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay Equipment Room"; + network = list("ss13","medbay"); dir = 1 }, /turf/open/floor/plasteel/whiteblue/side, @@ -33342,6 +33344,7 @@ "bIm" = ( /obj/machinery/camera{ c_tag = "Medbay Recovery Room"; + network = list("ss13","medbay"); dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -34800,7 +34803,7 @@ "bLX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/atmos/glass{ +/obj/machinery/door/airlock/atmos{ name = "Atmospherics"; req_access_txt = "24" }, @@ -38261,6 +38264,9 @@ c_tag = "Chief Engineer's Office"; dir = 2 }, +/obj/machinery/computer/security/telescreen/ce{ + pixel_y = 30 + }, /turf/open/floor/plasteel/yellow/side{ dir = 1 }, @@ -38961,46 +38967,21 @@ /area/crew_quarters/heads/chief) "bWs" = ( /obj/structure/rack, -/obj/item/circuitboard/computer/robotics{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/circuitboard/computer/mecha_control{ - pixel_x = 1; - pixel_y = -1 - }, +/obj/effect/spawner/lootdrop/techstorage/RnD_secure, /turf/open/floor/plasteel/darkred, /area/storage/tech) "bWt" = ( /obj/structure/rack, -/obj/item/circuitboard/computer/crew{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/circuitboard/computer/card{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/circuitboard/computer/communications{ - pixel_x = 5; - pixel_y = -5 - }, /obj/machinery/camera{ c_tag = "Secure Tech Storage"; dir = 1 }, +/obj/effect/spawner/lootdrop/techstorage/command, /turf/open/floor/plasteel/darkred, /area/storage/tech) "bWu" = ( /obj/structure/rack, -/obj/item/circuitboard/computer/borgupload{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/circuitboard/computer/aiupload{ - pixel_x = 2; - pixel_y = -2 - }, +/obj/effect/spawner/lootdrop/techstorage/AI, /turf/open/floor/plasteel/darkred, /area/storage/tech) "bWv" = ( @@ -41269,9 +41250,7 @@ /obj/item/stack/sheet/mineral/plasma{ amount = 30 }, -/obj/item/gps{ - gpstag = "ENG0" - }, +/obj/item/gps/engineering, /turf/open/floor/plating, /area/engine/engineering) "ccS" = ( @@ -41897,7 +41876,7 @@ dir = 2; layer = 4; name = "Telecomms Telescreen"; - network = list("tcomm"); + network = list("tcomms"); pixel_y = 28 }, /obj/structure/disposalpipe/segment{ @@ -43111,16 +43090,7 @@ /turf/open/floor/carpet, /area/library/lounge) "cjV" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Testing Asteroid Fore"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top."; - invuln = 1; - luminosity = 3; - name = "Hardened Bomb-Test Camera"; - network = list("ss13","rd","toxins"); - use_power = 0 - }, +/obj/machinery/camera/preset/toxins, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation/bomb_site) "cjZ" = ( @@ -43872,7 +43842,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Port"; dir = 8; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -43934,7 +43904,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Starboard"; dir = 4; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -44062,16 +44032,9 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) "cnp" = ( -/obj/machinery/camera{ - active_power_usage = 0; +/obj/machinery/camera/preset/toxins{ c_tag = "Bomb Testing Asteroid Aft"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top."; - dir = 1; - invuln = 1; - luminosity = 3; - name = "Hardened Bomb-Test Camera"; - network = list("ss13","rd","toxins"); - use_power = 0 + dir = 1 }, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation/bomb_site) @@ -44110,7 +44073,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms Server Room"; dir = 1; - network = list("ss13","tcomm") + network = list("tcomms") }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) @@ -44141,7 +44104,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Port Aft"; dir = 2; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -44150,7 +44113,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Starboard Aft"; dir = 2; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -46893,7 +46856,7 @@ /area/library) "cAu" = ( /obj/structure/table/wood, -/obj/item/clothing/head/pharoah, +/obj/item/clothing/head/pharaoh, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/vault{ dir = 5 @@ -46995,7 +46958,7 @@ /turf/open/floor/plasteel/dark, /area/library) "cBk" = ( -/obj/machinery/vending/boozeomat/maint, +/obj/machinery/vending/boozeomat/pubby_maint, /turf/closed/wall, /area/maintenance/department/crew_quarters/dorms) "cBl" = ( @@ -47308,7 +47271,7 @@ }, /area/science/xenobiology) "cPO" = ( -/obj/machinery/jukebox, +/obj/item/chair/stool, /turf/open/floor/wood{ icon_state = "wood-broken7" }, @@ -48948,12 +48911,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"hOd" = ( -/obj/machinery/autolathe, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/science/explab) "hOx" = ( /obj/structure/cable{ icon_state = "2-4" @@ -49159,6 +49116,9 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"iqc" = ( +/turf/open/floor/plasteel/stairs/right, +/area/maintenance/department/crew_quarters/dorms) "itl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -49226,7 +49186,7 @@ /obj/machinery/camera{ c_tag = "Telecomms External Fore"; dir = 1; - network = list("SS13","tcomm"); + network = list("tcomms"); start_active = 1 }, /obj/structure/cable/yellow{ @@ -49443,10 +49403,6 @@ }, /turf/closed/wall/r_wall, /area/engine/engineering) -"jqN" = ( -/obj/effect/spawner/lootdrop/keg, -/turf/open/floor/wood, -/area/maintenance/department/crew_quarters/dorms) "jrG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -49815,10 +49771,6 @@ }, /turf/open/floor/plating/airless, /area/engine/engineering) -"koO" = ( -/obj/effect/spawner/lootdrop/keg, -/turf/open/floor/plating, -/area/maintenance/department/crew_quarters/dorms) "kpK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -49924,7 +49876,10 @@ }, /area/hallway/primary/central) "kEW" = ( -/obj/machinery/smartfridge/disks, +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table, /turf/open/floor/plasteel, /area/hydroponics) "kFm" = ( @@ -50953,7 +50908,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms Monitoring"; dir = 2; - network = list("ss13","tcomm") + network = list("tcomms") }, /obj/structure/cable{ icon_state = "2-8" @@ -52249,7 +52204,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Access"; dir = 1; - network = list("ss13","tcomm") + network = list("tcomms") }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -52338,11 +52293,6 @@ "rHA" = ( /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"rHP" = ( -/obj/structure/lattice, -/obj/structure/reagent_dispensers/keg/aphro/strong, -/turf/open/space, -/area/space/nearstation) "rJg" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/light/small{ @@ -52467,7 +52417,7 @@ /turf/open/floor/plating, /area/engine/engineering) "sbk" = ( -/obj/machinery/vending/kink, +/obj/structure/girder, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/dorms) "sbY" = ( @@ -52962,6 +52912,10 @@ /obj/item/pen, /turf/open/floor/plasteel/dark, /area/science/explab) +"tCP" = ( +/obj/docking_port/stationary/public_mining_dock, +/turf/open/floor/plating, +/area/construction/mining/aux_base) "tDn" = ( /obj/item/wrench, /turf/open/floor/plating, @@ -54432,10 +54386,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"yap" = ( -/obj/machinery/computer/cryopod, -/turf/closed/wall, -/area/crew_quarters/dorms) "ybX" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -54473,7 +54423,7 @@ /obj/machinery/camera{ c_tag = "Engineering Telecomms Access"; dir = 8; - network = list("tcomm") + network = list("tcomms") }, /obj/machinery/light{ dir = 4 @@ -76948,7 +76898,7 @@ uoS rJZ uoS uoS -uoS +tCP xOC jAy rHA @@ -88701,7 +88651,7 @@ aaa aaa aaa aby -rHP +abI abO abX acg @@ -91046,7 +90996,7 @@ aaa aaa aiS qPB -gNv +iqc ngp cBr cBs @@ -91564,7 +91514,7 @@ cBo alQ alb cBw -jqN +alb aiS aiS aiS @@ -92596,7 +92546,7 @@ aiS aiS aob eaw -koO +ajv ajv cnX aiS @@ -94661,7 +94611,7 @@ aaa aaa apX apX -yap +apX avl fIu dbi @@ -96248,7 +96198,7 @@ bjx bjw qDJ vmG -hOd +bnZ pDP nBL bqs diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 560f7fd825..89a836f2df 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -20,6 +20,9 @@ "af" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) +"ag" = ( +/turf/closed/wall/r_wall, +/area/security/brig) "ah" = ( /turf/closed/wall/r_wall, /area/engine/atmos) @@ -123,6 +126,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/engine/gravity_generator) "au" = ( @@ -185,6 +189,9 @@ /obj/machinery/door/airlock/external/glass, /turf/open/floor/plating, /area/engine/engineering) +"aD" = ( +/turf/open/floor/plasteel, +/area/security/brig) "aE" = ( /obj/structure/cable{ icon_state = "1-2" @@ -304,13 +311,14 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aU" = ( /obj/machinery/door/airlock/engineering/glass{ - name = "Gravity Generator"; - req_access_txt = "11" + name = "Gravity Generator" }, /obj/structure/cable{ icon_state = "4-8" @@ -318,6 +326,9 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "aV" = ( @@ -327,6 +338,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "aW" = ( @@ -340,8 +354,7 @@ /area/engine/gravity_generator) "aX" = ( /obj/machinery/door/airlock/engineering/glass{ - name = "Gravity Generator"; - req_access_txt = "11" + name = "Gravity Generator" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -386,6 +399,7 @@ /obj/structure/table, /obj/item/weldingtool/experimental, /obj/item/inducer, +/obj/item/storage/belt/utility/chief/full, /turf/open/floor/plasteel, /area/engine/engineering) "be" = ( @@ -403,6 +417,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/announcement_system, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bh" = ( @@ -429,7 +444,7 @@ /obj/structure/table, /obj/item/analyzer, /obj/item/wrench, -/turf/open/floor/plating, +/turf/open/floor/plasteel, /area/engine/atmos) "bk" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -473,6 +488,9 @@ dir = 10 }, /obj/machinery/light, +/obj/machinery/telecomms/allinone{ + network = "tcommsat" + }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "br" = ( @@ -500,6 +518,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/bridge) +"bw" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/security/brig) "bx" = ( /obj/machinery/door/airlock, /obj/structure/cable{ @@ -511,12 +533,6 @@ "by" = ( /turf/closed/wall/r_wall, /area/medical/medbay) -"bz" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/department/bridge) "bA" = ( /turf/closed/wall/r_wall, /area/science) @@ -535,10 +551,13 @@ /obj/machinery/autolathe/hacked, /turf/open/floor/plasteel, /area/science) -"bD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +"bC" = ( +/obj/machinery/computer/gulag_teleporter_computer{ + dir = 4 }, +/turf/open/floor/plasteel, +/area/security/brig) +"bD" = ( /obj/machinery/light{ dir = 1 }, @@ -568,13 +587,27 @@ dir = 8 }, /area/bridge) +"bH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel, +/area/security/brig) "bI" = ( /obj/structure/table, +/obj/item/card/emag, +/obj/item/flashlight/emp/debug, /turf/open/floor/plasteel, /area/bridge) "bJ" = ( /obj/structure/table, -/obj/item/card/id/captains_spare, +/obj/item/card/id/ert{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/card/id/syndicate/nuke_leader, +/obj/item/card/id/captains_spare{ + pixel_x = -4; + pixel_y = 4 + }, /turf/open/floor/plasteel, /area/bridge) "bK" = ( @@ -587,7 +620,7 @@ /obj/item/rcd_ammo/large, /obj/item/rcd_ammo/large, /obj/item/rcd_ammo/large, -/obj/item/construction/rcd, +/obj/item/construction/rcd/combat, /turf/open/floor/plasteel, /area/bridge) "bM" = ( @@ -632,6 +665,13 @@ /obj/machinery/chem_dispenser/fullupgrade, /turf/open/floor/plasteel/dark, /area/medical/chemistry) +"bT" = ( +/obj/machinery/gulag_item_reclaimer{ + dir = 8; + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/security/brig) "bU" = ( /obj/machinery/airalarm/unlocked{ pixel_y = 23 @@ -665,7 +705,7 @@ }, /area/medical/medbay) "bX" = ( -/obj/machinery/sleeper, +/obj/machinery/sleeper/syndie, /turf/open/floor/plasteel/arrival{ dir = 1 }, @@ -733,15 +773,21 @@ }, /area/bridge) "ch" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) +"ci" = ( /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/door/airlock, -/turf/open/floor/plating, -/area/bridge) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/security/brig) "cj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -801,11 +847,12 @@ }, /area/bridge) "cs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/turf/closed/wall/r_wall, -/area/bridge) +/turf/open/floor/plasteel, +/area/medical/chemistry) "ct" = ( /obj/machinery/light{ dir = 8 @@ -836,6 +883,7 @@ /turf/open/floor/plasteel, /area/medical/medbay) "cz" = ( +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/medical/medbay) "cA" = ( @@ -856,8 +904,8 @@ }, /area/hallway/primary/central) "cC" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/camera/autoname, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel/blue/side{ dir = 1 }, @@ -871,9 +919,6 @@ }, /area/hallway/primary/central) "cE" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -900,9 +945,19 @@ dir = 8 }, /area/medical/medbay) +"cI" = ( +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel, +/area/security/brig) "cJ" = ( /obj/item/gun/magic/staff/healing, -/obj/item/gun/magic/wand/resurrection, +/obj/item/gun/magic/wand/resurrection/debug, /turf/open/floor/plasteel/arrival{ dir = 10 }, @@ -944,15 +999,20 @@ /turf/closed/wall/r_wall, /area/storage/primary) "cT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/turf/closed/wall/r_wall, -/area/storage/primary) +/turf/open/floor/plasteel, +/area/medical/chemistry) "cU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/storage/primary) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "cV" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/plasteel, @@ -987,6 +1047,25 @@ /turf/open/floor/plasteel, /area/construction) "da" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/storage/primary) +"db" = ( +/turf/closed/wall/mineral/plastitanium, +/area/hallway/secondary/entry) +"dc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"dd" = ( /obj/machinery/airalarm/unlocked{ pixel_y = 23 }, @@ -994,68 +1073,53 @@ dir = 8; pixel_x = -24 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/storage/primary) -"dc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"dd" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L1" +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + icon_state = "0-4" }, /turf/open/floor/plasteel, /area/storage/primary) "de" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/plaque{ - icon_state = "L3" - }, +/obj/machinery/gulag_teleporter, /turf/open/floor/plasteel, -/area/storage/primary) +/area/security/brig) "df" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L5" +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, -/area/storage/primary) +/area/security/brig) "dg" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L7" +/obj/machinery/airalarm/unlocked{ + pixel_x = 32 }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/security/brig) "dh" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L9" - }, -/turf/open/floor/plasteel, -/area/storage/primary) +/turf/closed/wall, +/area/hallway/secondary/entry) "di" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/door/airlock/external{ + name = "Labor Camp Shuttle Airlock" }, -/obj/machinery/camera/autoname, -/obj/effect/turf_decal/plaque{ - icon_state = "L11" - }, -/turf/open/floor/plasteel, -/area/storage/primary) +/obj/structure/fans/tiny, +/turf/open/floor/plasteel/dark, +/area/security/brig) "dj" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L13" +/obj/machinery/light/small{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/storage/primary) +/turf/open/floor/plating, +/area/hallway/secondary/entry) "dk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/storage/primary) "dl" = ( @@ -1149,8 +1213,11 @@ /turf/open/floor/plasteel, /area/construction) "dA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plasteel, /area/storage/primary) @@ -1160,14 +1227,12 @@ /area/storage/primary) "dC" = ( /obj/effect/turf_decal/stripes/line{ - dir = 6 + dir = 8 }, /turf/open/floor/plasteel, /area/storage/primary) "dD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel, /area/storage/primary) "dE" = ( @@ -1177,8 +1242,8 @@ /turf/open/floor/plasteel, /area/storage/primary) "dF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, /turf/open/floor/plasteel, /area/storage/primary) @@ -1187,11 +1252,11 @@ /turf/open/floor/plasteel, /area/storage/primary) "dH" = ( -/obj/effect/landmark/start, -/turf/open/floor/plasteel, -/area/storage/primary) +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/maintenance/department/bridge) "dI" = ( -/obj/effect/landmark/latejoin, +/obj/effect/landmark/start, /turf/open/floor/plasteel, /area/storage/primary) "dJ" = ( @@ -1225,11 +1290,23 @@ /obj/item/storage/firstaid, /turf/open/floor/plasteel, /area/storage/primary) +"dP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/hallway/secondary/entry) "dQ" = ( /obj/structure/table, /obj/machinery/light, /turf/open/floor/plasteel, /area/storage/primary) +"dR" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/security/brig) "dS" = ( /obj/machinery/atmospherics/components/unary/tank/air, /obj/machinery/camera/autoname, @@ -1248,6 +1325,9 @@ dir = 1 }, /area/hallway/primary/central) +"dV" = ( +/turf/open/floor/plating, +/area/hallway/secondary/entry) "dW" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/camera/autoname, @@ -1260,14 +1340,14 @@ /obj/machinery/camera/autoname{ dir = 4 }, +/obj/machinery/light{ + dir = 8 + }, /turf/open/floor/plasteel, /area/construction) "dY" = ( -/obj/machinery/camera/autoname{ - dir = 8 - }, -/turf/open/floor/plating, -/area/storage/primary) +/turf/closed/wall/r_wall, +/area/hallway/secondary/entry) "dZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1282,31 +1362,1126 @@ /obj/machinery/camera/autoname{ dir = 1 }, -/obj/item/gun/magic/wand/resurrection, +/obj/item/gun/magic/wand/resurrection/debug, /turf/open/floor/plasteel, /area/storage/primary) +"eb" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 5; + id = "laborcamp_home"; + name = "fore bay 1"; + width = 9; + roundstart_template = /datum/map_template/shuttle/labour/box + }, +/turf/open/space/basic, +/area/space) +"ec" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 3; + height = 15; + id = "arrivals_stationary"; + name = "arrivals"; + width = 7; + roundstart_template = /datum/map_template/shuttle/arrival/box + }, +/turf/open/space/basic, +/area/space) +"ed" = ( +/obj/structure/sign/warning/pods, +/turf/closed/wall/r_wall, +/area/hallway/secondary/entry) +"ee" = ( +/obj/machinery/door/airlock/external{ + name = "Mining Dock Airlock" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/quartermaster/miningoffice) +"ef" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plasteel, +/area/construction) +"eg" = ( +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/security/brig) +"eh" = ( +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "ei" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"ej" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"ek" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"el" = ( +/obj/docking_port/stationary/random{ + id = "pod_lavaland1"; + name = "lavaland" + }, +/turf/open/space, +/area/space) +"em" = ( +/turf/closed/wall/r_wall, +/area/quartermaster/miningoffice) +"en" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"eo" = ( +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"ep" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"eq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"er" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel, +/area/medical/medbay) +"es" = ( /obj/machinery/light, /obj/machinery/computer/operating, /turf/open/floor/plasteel, -/area/maintenance/department/bridge) -"fT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/area/medical/medbay) +"et" = ( +/turf/closed/wall/r_wall, +/area/quartermaster/storage) +"eu" = ( /turf/open/floor/plasteel, -/area/science) -"gd" = ( +/area/quartermaster/storage) +"ev" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"ew" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, -/area/science) -"gM" = ( -/obj/effect/turf_decal/stripes/line{ +/area/quartermaster/storage) +"ex" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod One" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"ey" = ( +/obj/machinery/status_display{ + name = "cargo display"; + supply_display = 1 + }, +/turf/closed/wall, +/area/quartermaster/storage) +"ez" = ( +/obj/machinery/camera/autoname{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/storage/primary) +"eA" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "cargounload" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eB" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"eC" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "cargounload" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/quartermaster/storage) +"eD" = ( +/obj/machinery/vr_sleeper, +/turf/open/floor/plasteel, +/area/storage/primary) +"eE" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 13; + id = "ferry_home"; + name = "port bay 2"; + width = 5 + }, +/turf/open/space/basic, +/area/space) +"eF" = ( +/obj/machinery/power/apc{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"eG" = ( +/obj/machinery/airalarm/unlocked{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"eI" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"eJ" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 4; + height = 7; + id = "supply_home"; + name = "Cargo Bay"; + width = 12 + }, +/turf/open/space/basic, +/area/space) +"eK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"eL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"eM" = ( +/obj/machinery/airalarm/unlocked{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"eN" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "cargounload" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eP" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eQ" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "cargounload" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eR" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Supply Dock Airlock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eS" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Supply Dock Airlock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eT" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "cargoload" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"eU" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/medical/medbay) +"eV" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"eW" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"eX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/miningoffice) +"eY" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "cargounload" + }, +/obj/machinery/door/poddoor{ + id = "cargounload"; + name = "supply dock unloading door" + }, +/turf/open/floor/plating, +/area/quartermaster/storage) +"eZ" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fb" = ( +/obj/machinery/door/airlock/external{ + name = "Departure Lounge Airlock" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/fans/tiny, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fc" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "cargoload" + }, +/obj/machinery/door/poddoor{ + id = "cargoload"; + name = "supply dock loading door" + }, +/turf/open/floor/plating, +/area/quartermaster/storage) +"fd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"fe" = ( +/obj/machinery/button/door{ + dir = 2; + id = "cargounload"; + layer = 4; + name = "Loading Doors"; + pixel_x = 24; + pixel_y = 8 + }, +/obj/machinery/button/door{ + id = "cargoload"; + layer = 4; + name = "Loading Doors"; + pixel_x = 24; + pixel_y = -8 + }, +/obj/machinery/computer/cargo{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"ff" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 11; + height = 15; + id = "whiteship_home"; + name = "SS13: Auxiliary Dock, Station-Port"; + width = 28 + }, +/turf/open/space/basic, +/area/space) +"fg" = ( +/turf/open/space, +/area/space) +"fh" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/storage) +"fi" = ( +/obj/docking_port/stationary{ + dir = 1; + dwidth = 1; + height = 4; + roundstart_template = /datum/map_template/shuttle/escape_pod/default; + width = 3 + }, +/obj/structure/fans/tiny/invisible, +/turf/open/space/basic, +/area/space) +"fj" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/r_wall, +/area/hallway/secondary/entry) +"fl" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "cargoload" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/quartermaster/storage) +"fm" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "cargoload" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/vacuum/external, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"fo" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "cargoload" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fp" = ( +/obj/docking_port/stationary{ + dheight = 0; + dir = 2; + dwidth = 9; + height = 25; + id = "emergency_home"; + name = "Runtimestation emergency evac bay"; + width = 29 + }, +/turf/open/space/basic, +/area/space) +"fq" = ( +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/computer/cargo/express{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fr" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/bounty{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fs" = ( +/obj/machinery/door/airlock/external{ + name = "Transport Airlock" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"ft" = ( +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/hallway/primary/central) +"fu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"fv" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"fw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/storage/primary) +"fx" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L1" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fy" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L3" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fz" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L5" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fA" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L7" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fB" = ( +/obj/machinery/status_display{ + name = "cargo display"; + supply_display = 1 + }, +/turf/closed/wall/r_wall, +/area/quartermaster/storage) +"fC" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L9" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fD" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/camera/autoname, +/obj/effect/turf_decal/plaque{ + icon_state = "L11" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fE" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L13" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/structure/fans/tiny, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fI" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"fJ" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/hallway/secondary/exit/departure_lounge) +"fK" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"fL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) +"fM" = ( +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_x = 32 + }, +/obj/structure/sign/directions/engineering{ + dir = 1; + pixel_x = 32; + pixel_y = 7 + }, +/obj/structure/sign/directions/evac{ + pixel_x = 32; + pixel_y = -7 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"fN" = ( +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/storage/primary) +"fO" = ( +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fP" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/keycard_auth{ + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fQ" = ( +/obj/machinery/computer/communications, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fR" = ( +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/storage/primary) +"fS" = ( +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/science) +"fU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/airalarm/unlocked{ + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fW" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"fX" = ( +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/sign/directions/engineering{ + dir = 1; + pixel_x = -32; + pixel_y = 7 + }, +/obj/structure/sign/directions/evac{ + pixel_x = -32; + pixel_y = -7 + }, +/turf/open/floor/plating, +/area/storage/primary) +"fY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"fZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"ga" = ( +/turf/closed/wall/r_wall, +/area/hallway/secondary/exit/departure_lounge) +"gb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"gc" = ( +/obj/machinery/door/airlock/external{ + name = "Auxiliary Airlock" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"gd" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science) +"ge" = ( +/obj/structure/lattice, +/turf/closed/wall/r_wall, +/area/hallway/secondary/entry) +"gf" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/hallway/secondary/exit/departure_lounge) +"gg" = ( +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_x = 32 + }, +/obj/structure/sign/directions/engineering{ + dir = 1; + pixel_x = 32; + pixel_y = 7 + }, +/obj/structure/sign/directions/evac{ + pixel_x = 32; + pixel_y = -7 + }, +/turf/open/floor/plating, +/area/storage/primary) +"gh" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/shuttle/mining{ + dir = 2 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gi" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/airalarm/unlocked{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gj" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 3; + height = 5; + id = "mining_home"; + name = "mining shuttle bay"; + width = 7; + roundstart_template = /datum/map_template/shuttle/mining/box + }, +/turf/open/space/basic, +/area/space) +"gk" = ( +/obj/structure/sign/departments/evac, +/turf/closed/wall/r_wall, +/area/hallway/secondary/exit/departure_lounge) +"gl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gn" = ( +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel, +/area/security/brig) +"go" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gp" = ( +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gr" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gs" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gv" = ( +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction) +"gz" = ( +/obj/structure/table, +/obj/item/card/id/captains_spare, +/obj/machinery/keycard_auth{ + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"gA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"gB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gD" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"gE" = ( +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gF" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction) +"gH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"gI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"gJ" = ( +/obj/structure/table, +/obj/item/storage/box/prisoner, +/obj/item/paper/guides/jobs/security/labor_camp, +/turf/open/floor/plasteel, +/area/security/brig) "gY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -1332,10 +2507,6 @@ /obj/item/melee/transforming/energy/axe, /turf/open/floor/plasteel, /area/storage/primary) -"kk" = ( -/obj/structure/table/optable, -/turf/open/floor/plasteel, -/area/maintenance/department/bridge) "kn" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1361,22 +2532,26 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"lK" = ( -/obj/effect/landmark/observer_start, -/turf/open/floor/plating, -/area/storage/primary) +"lg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"lX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "ny" = ( /obj/structure/table, /obj/item/storage/toolbox/syndicate, /turf/open/floor/plasteel, /area/storage/primary) -"oL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/vr_sleeper, -/turf/open/floor/plasteel, -/area/storage/primary) "oV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -1401,6 +2576,12 @@ }, /turf/open/floor/plasteel, /area/medical/chemistry) +"qn" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/department/bridge) "sE" = ( /obj/machinery/power/rtg/advanced, /obj/structure/cable, @@ -1437,33 +2618,19 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"wT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/medical/chemistry) -"wV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/vr_sleeper, -/turf/open/floor/plasteel, -/area/storage/primary) -"yp" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/medical/chemistry) "AP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/machinery/rnd/production/techfab/department, /turf/open/floor/plasteel, /area/science) +"Bl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) "BB" = ( /obj/item/storage/backpack/duffelbag/syndie/surgery, /obj/structure/table, @@ -1487,11 +2654,6 @@ /obj/machinery/rnd/production/circuit_imprinter/department, /turf/open/floor/plasteel, /area/science) -"CK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, -/turf/open/floor/plasteel, -/area/medical/chemistry) "CV" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1522,10 +2684,12 @@ /obj/structure/closet/secure_closet/RD, /turf/open/floor/plasteel/blue/side, /area/bridge) -"JE" = ( -/obj/machinery/door/airlock, -/turf/open/floor/plating, -/area/hallway/primary/central) +"JF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) "Ly" = ( /obj/machinery/chem_dispenser/chem_synthesizer, /turf/open/floor/plasteel/dark, @@ -1534,6 +2698,10 @@ /obj/machinery/rnd/production/protolathe/department, /turf/open/floor/plasteel, /area/science) +"PI" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/space/basic, +/area/space) "Qt" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -1557,6 +2725,7 @@ /area/science) "Ut" = ( /obj/structure/closet/secure_closet/medical3, +/obj/item/healthanalyzer/advanced, /turf/open/floor/plasteel, /area/medical/medbay) "Vg" = ( @@ -1569,6 +2738,13 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"VA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plasteel, +/area/engine/engineering) "WT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1639,6 +2815,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (2,1,1) = {" aa @@ -1693,6 +2907,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (3,1,1) = {" aa @@ -1747,6 +2999,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (4,1,1) = {" aa @@ -1801,6 +3091,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (5,1,1) = {" aa @@ -1855,6 +3183,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (6,1,1) = {" aa @@ -1909,6 +3275,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (7,1,1) = {" aa @@ -1963,6 +3367,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (8,1,1) = {" aa @@ -2017,6 +3459,44 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (9,1,1) = {" aa @@ -2027,42 +3507,80 @@ aa aa aa aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2081,42 +3599,80 @@ aa aa aa aa -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2135,42 +3691,80 @@ aa aa aa aa -ab -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -bY -bY -bY -bY -bY -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2189,42 +3783,80 @@ aa aa aa aa -ab -ac -ad -af -af -af -af -af -af -af -af -bz -af -af -af -af -af -bz -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ad -ac -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2243,42 +3875,80 @@ aa aa aa aa -ab -ac -ad -af -ah -ah -ah -ah -ah -ah -ah -bA -gd -gd -bA -bZ -bZ -JE -cN -cN -cN -cN -cN -cN -cN -cN -cN -cN -cN -cN -cN -cN -af -ad -ac -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2297,42 +3967,80 @@ aa aa aa aa -ab -ac -ad -af -ah -al -aw -aM -aZ -bj -bs -bB -ca -If -In -kn -bO -bO -cO -cW -dm -dy -dy -dy -dX -dy -dy -dy -dy -dm -dK -cN -af -ad -ac -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2351,42 +4059,80 @@ aa aa aa aa -ab -ac -ad -af -ah -am -ax -aw -ba -bk -bt -fT -cb -AP -pA -kQ -bN -bN -cP -cX -dn -dn -dn -dn -dn -dn -dn -dn -dn -dn -dL -cN -af -ad -ac -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2405,8 +4151,2126 @@ aa aa aa aa -ab -ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gj +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +em +eX +ee +eX +em +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +em +gh +gl +gD +em +dY +dY +dY +aa +aa +aa +aa +aa +aa +aa +dY +dY +dY +dY +aa +aa +aa +aa +aa +dY +dY +dY +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +em +gi +gm +go +gp +ei +gr +dY +aa +aa +aa +aa +aa +aa +aa +dY +eh +eh +dY +aa +aa +aa +aa +aa +dY +eh +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(20,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +db +dY +dY +dY +dY +eh +eq +en +aa +aa +aa +aa +aa +aa +aa +en +eh +eh +en +aa +aa +aa +aa +aa +en +eh +eh +gc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(21,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +PI +dj +ed +eh +eq +en +aa +aa +aa +aa +aa +aa +aa +en +eh +eh +en +aa +aa +aa +aa +aa +en +eh +eh +gc +ff +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(22,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +el +aa +aa +aa +fi +dP +ex +eh +eq +eo +aa +aa +aa +aa +aa +aa +aa +eo +eh +gv +dY +aa +aa +aa +aa +aa +dY +gI +eh +en +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(23,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +PI +dV +dY +ej +eq +en +aa +aa +aa +aa +aa +aa +aa +en +eh +eh +en +aa +aa +aa +aa +aa +en +eh +eh +en +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(24,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +fg +aa +db +dY +dY +dY +dY +eh +eq +en +aa +aa +aa +aa +aa +aa +aa +en +eh +gF +fj +aa +aa +aa +aa +aa +fj +eh +eh +en +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dY +gE +eq +dY +aa +aa +aa +aa +aa +aa +aa +dY +eh +eh +en +aa +aa +aa +aa +aa +en +eh +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(26,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dY +gq +gs +dY +aa +aa +aa +aa +aa +aa +aa +dY +eh +gw +dY +aa +aa +aa +aa +aa +dY +gB +eh +en +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(27,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dY +eh +eq +en +aa +aa +aa +aa +aa +aa +aa +en +eh +ek +en +aa +aa +aa +aa +aa +en +ek +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dY +eh +gt +en +aa +aa +aa +aa +aa +aa +aa +en +eh +ek +en +aa +aa +aa +aa +aa +en +ek +eh +en +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dY +ej +gt +eo +aa +aa +aa +aa +aa +aa +aa +eo +eh +ek +en +aa +aa +aa +aa +aa +en +ek +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dY +eh +gt +en +aa +aa +aa +aa +aa +aa +aa +en +eh +gx +dY +aa +aa +aa +aa +aa +dY +gC +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +eb +aa +aa +dY +eh +gt +dh +aa +aa +aa +ec +aa +aa +aa +dY +eh +ek +en +aa +aa +eE +aa +aa +en +ek +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(32,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ag +ag +bw +di +bw +ag +bw +di +bw +ag +ag +eh +gt +dh +dh +en +en +en +en +en +dY +dY +eh +ek +dY +dY +fn +fs +en +dY +dY +ek +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(33,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ag +dR +aD +aD +bC +de +gJ +aD +aD +dR +ag +eh +gt +eh +eV +eh +eh +eh +eh +eh +eV +eh +eh +ek +eh +eV +eh +eh +eh +eV +eh +ek +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(34,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ag +gn +aD +aD +bH +ci +df +df +df +df +eg +ei +gu +ei +ep +ei +ei +ei +ei +eB +eL +eL +eL +fd +eL +eL +eL +eL +eL +eL +eL +fZ +eh +dY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(35,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ag +aD +aD +aD +bT +cI +dg +aD +aD +aD +ag +eh +eh +eh +eq +eh +eh +eh +eh +eF +eM +fM +eh +eh +eh +eh +eh +eh +eh +eh +eh +eh +eh +ge +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(36,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +dH +ah +ah +ah +ah +ah +ah +ah +bA +bA +bA +bA +bZ +ft +bZ +cN +cN +cN +cN +cN +cN +ef +ef +cN +cN +cN +cN +cN +cN +fI +dY +dY +ge +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(37,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ah +al +aw +aM +aZ +bj +bs +bB +ca +If +In +kn +fu +bO +cO +cW +dm +dy +dy +dX +dy +dy +gG +dy +dy +dm +dK +cN +af +ad +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(38,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ah +am +ax +aw +ba +bk +bt +fT +cb +AP +pA +kQ +fv +bN +cP +cX +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa ad af ah @@ -2439,8 +6303,44 @@ dL cN af ad -ac -ab +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2450,7 +6350,11 @@ aa aa aa "} -(17,1,1) = {" +(40,1,1) = {" +aa +aa +aa +aa aa aa aa @@ -2459,8 +6363,6 @@ aa aa aa aa -ab -ac ad af ah @@ -2493,8 +6395,44 @@ dL cN af ad -ac -ab +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2504,7 +6442,11 @@ aa aa aa "} -(18,1,1) = {" +(41,1,1) = {" +aa +aa +aa +aa aa aa aa @@ -2513,8 +6455,6 @@ aa aa aa aa -ab -ac ad af ah @@ -2547,8 +6487,44 @@ dL cN af ad -ac -ab +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2558,7 +6534,11 @@ aa aa aa "} -(19,1,1) = {" +(42,1,1) = {" +aa +aa +aa +aa aa aa aa @@ -2567,8 +6547,6 @@ aa aa aa aa -ab -ac ad bY ah @@ -2601,8 +6579,44 @@ dL cN af ad -ac -ab +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2612,7 +6626,11 @@ aa aa aa "} -(20,1,1) = {" +(43,1,1) = {" +aa +aa +aa +aa aa aa aa @@ -2621,8 +6639,6 @@ aa aa aa aa -ab -ac ae ab ab @@ -2637,7 +6653,7 @@ ce cp cv cC -bE +lX bE cR cY @@ -2655,8 +6671,44 @@ dZ cN af bY -ac -ab +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2666,7 +6718,11 @@ aa aa aa "} -(21,1,1) = {" +(44,1,1) = {" +aa +aa +aa +aa aa aa aa @@ -2675,8 +6731,6 @@ aa aa aa aa -ab -ac ae ab ai @@ -2709,8 +6763,44 @@ dL cN af bY -ac -ab +fg +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2720,7 +6810,11 @@ aa aa aa "} -(22,1,1) = {" +(45,1,1) = {" +aa +aa +aa +aa aa aa aa @@ -2729,8 +6823,6 @@ aa aa aa aa -ab -ac ae ab ai @@ -2763,1213 +6855,7 @@ dL cN af bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ae -ab -ab -ab -aB -ab -ab -ab -bv -bJ -cf -cq -cw -cD -bE -bE -cQ -cY -dn -dn -dn -dn -dn -dn -dn -dn -dn -dn -dL -cN -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ae -ac -ac -ab -aB -ab -ac -ac -bv -bK -cf -Iy -bu -cD -bE -bE -cQ -cY -dn -dn -dn -dn -dn -dn -dn -dn -dn -dn -dL -cN -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ae -ac -ac -aj -aC -aj -ac -ac -bv -bL -cf -cq -bv -cD -bE -bE -cN -cZ -do -dz -dz -dz -dz -dz -dz -dz -dz -do -dM -cN -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ae -ac -ac -aj -Vy -aj -ac -ac -bu -bM -cg -cr -bu -wb -bE -bE -cS -cS -cS -cS -cS -cS -dG -dG -cS -cS -cS -cS -cS -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -bY -aj -aj -WT -aj -aj -aj -bu -bu -ch -cs -cs -cE -bO -bO -cT -da -dp -dl -dl -dl -dl -dl -dl -dl -dl -dp -dl -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -aj -ap -Vy -aS -bd -bo -aj -hD -cj -ct -Ce -cF -bE -bE -cS -dl -dl -dl -dl -dl -dl -dl -dl -dl -dl -dl -dl -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -aj -aq -aE -aT -be -be -bx -CV -yp -wT -wT -CK -bN -bN -cU -gM -dc -dA -dl -dD -dc -dc -dA -dl -dD -dc -oL -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -aj -ar -aF -Vy -bf -bp -aj -bP -pQ -Ce -Ce -oV -bE -bE -cS -dd -dq -dB -dl -dE -dH -dI -dB -dl -dE -dJ -ny -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -ak -ak -aU -ak -ak -ak -bQ -pQ -Ce -Ce -vP -bE -Vg -cS -de -dr -dB -dl -dE -dH -dI -dB -dl -dE -dJ -dO -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -as -aG -aV -bg -bq -ak -bR -pQ -Ce -Ce -oV -bE -bE -cV -df -ds -dB -dl -dE -dH -dI -dB -dl -dE -dJ -jU -cS -af -bY -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -at -aH -aW -bh -br -ak -bS -pQ -Ce -Ce -oV -bE -bE -cV -dg -dt -dB -lK -dE -dH -dI -dB -dl -dE -dJ -ea -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -au -aI -aX -aI -aI -ak -Ly -pQ -Xg -Ce -oV -bE -bE -cV -dh -du -dB -dl -dE -dH -dI -dB -dl -dE -dJ -dN -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -av -av -av -av -av -by -by -ck -by -cx -cG -cx -by -by -di -dv -dB -dl -dE -dH -dI -dB -dl -dE -dJ -dQ -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -av -aJ -aK -aL -av -by -bU -cl -cu -cu -cH -cu -cJ -by -dj -dw -dB -dl -dE -dH -dI -dB -dl -dE -dJ -dN -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -dT -aK -av -bi -av -by -bV -cm -cm -cm -cm -cm -cK -by -dk -dk -dC -dl -dF -dk -dk -dC -dl -dF -dk -wV -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -av -aL -aK -aJ -av -by -bW -cm -cm -cm -cm -cm -cL -by -dl -dl -dl -dl -dl -dl -dl -dl -dl -dl -dl -dl -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -av -av -aY -av -av -by -bX -cm -cm -cy -Ut -cm -cM -by -dl -dx -dl -dl -dl -dY -dl -dl -dl -dl -dx -dl -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -ak -ak -ak -ak -ak -ak -by -by -cn -by -Qt -by -cm -BB -by -cS -cS -cS -cS -cS -cS -vv -cS -cS -cS -cS -cS -cS -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -af -af -af -af -af -af -af -af -af -af -by -cz -by -kk -ei -ad -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -by -pI -by -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa +fg aa aa aa @@ -4029,6 +6915,44 @@ aa aa aa aa +ae +ab +ab +ab +aB +ab +ab +ab +bv +bJ +cf +cq +cw +cD +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +bY +fg +aa +aa +aa +aa +aa aa aa aa @@ -4083,6 +7007,44 @@ aa aa aa aa +ae +ac +ac +ab +aB +ab +ac +ac +bv +bK +cf +Iy +bu +cD +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +bY +fg +aa +aa +aa +aa +aa aa aa aa @@ -4137,6 +7099,44 @@ aa aa aa aa +ae +ac +ac +aj +aC +aj +ac +ac +bv +bL +cf +cq +bv +cD +bE +bE +cN +cZ +do +dz +dz +gy +dz +dz +gy +dz +dz +do +dM +cN +af +bY +fg +aa +aa +aa +aa +aa aa aa aa @@ -4191,6 +7191,44 @@ aa aa aa aa +ae +ac +ac +aj +VA +aj +ac +ac +bu +bM +cg +cr +bu +wb +bE +bE +cS +cS +cS +cS +cS +cS +dG +dG +cS +cS +cS +cS +cS +cS +fJ +ga +ga +ga +aa +aa +aa +aa aa aa aa @@ -4245,6 +7283,44 @@ aa aa aa aa +ad +bY +aj +aj +WT +aj +aj +aj +bu +bu +cd +bu +bu +cE +bE +bE +cS +dd +dp +dl +dl +fX +dE +dB +dl +dl +dl +dp +dE +cS +fO +fO +fO +gf +aa +aa +aa +aa aa aa aa @@ -4299,6 +7375,44 @@ aa aa aa aa +ad +af +aj +ap +Vy +aS +bd +bo +aj +hD +cj +ct +Ce +cF +bE +bE +cS +dc +dC +dC +dC +dC +eI +eW +dC +dC +dC +dC +eI +vv +fO +fO +fO +fb +aa +aa +aa +aa aa aa aa @@ -4353,6 +7467,3540 @@ aa aa aa aa +ad +af +aj +aq +aE +aT +be +be +bx +CV +fL +ch +cs +cT +cU +cU +da +fK +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +eD +cS +fO +fO +fO +gf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +aj +ar +aF +lg +bf +bp +aj +bP +pQ +JF +Ce +oV +bE +bE +cS +fx +dq +dJ +dJ +dJ +dI +dJ +dJ +dJ +dJ +dJ +ny +cS +fP +fO +fO +fb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +ak +ak +aU +ak +ak +ak +bQ +pQ +Ce +Ce +vP +bE +Vg +cS +fy +dr +dJ +dJ +dJ +dI +dJ +dJ +dJ +dJ +dJ +dO +cS +gz +fO +fO +gf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +as +aG +aV +bg +bq +ak +bR +pQ +Ce +Ce +oV +bE +bE +cV +fz +ds +dJ +dJ +dJ +dI +dJ +dJ +dJ +dJ +dJ +jU +cS +fQ +fO +fO +ga +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +qn +Bl +at +aH +aW +bh +br +ak +bS +pQ +Ce +Ce +oV +bE +bE +cV +fA +dt +dJ +dD +dJ +dI +dJ +dJ +dJ +dJ +dJ +ea +cS +fS +fO +fO +gk +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +au +aI +aX +aI +aI +ak +Ly +pQ +Xg +Ce +oV +bE +bE +cV +fC +du +dJ +dJ +dJ +dI +dJ +dJ +dJ +dJ +dJ +dN +cS +fU +gb +fO +ga +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +av +av +av +av +av +by +by +ck +by +cx +cG +cx +by +by +fD +dv +dJ +dJ +dJ +dI +dJ +dJ +dJ +dJ +dJ +dQ +cS +gA +fO +fO +gf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +av +aJ +aK +aL +av +by +bU +cl +cu +cu +cH +cu +cJ +by +fE +dw +dJ +dJ +dJ +dI +dJ +dJ +dJ +dJ +dJ +dN +cS +gH +fO +fO +fb +fp +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +dT +aK +av +bi +av +by +bV +cm +cm +cm +cm +cm +cK +by +dA +dJ +dJ +dJ +dJ +dF +dJ +dJ +dJ +dJ +dJ +eD +cS +fV +fO +fO +gf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +av +aL +aK +aJ +av +by +bW +cm +cm +cm +cm +cm +cL +by +dk +eH +eH +eH +eH +eK +fw +fG +fG +fG +fG +fH +fR +fW +fO +fO +fb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +av +av +aY +av +av +by +bX +cm +eU +cy +Ut +cm +cM +by +dB +dx +dl +dl +gg +ez +dB +dl +dl +dl +dx +dE +cS +fO +fO +fO +gf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +ak +ak +ak +ak +ak +ak +by +by +cn +by +Qt +by +cm +BB +by +cS +cS +cS +cS +cS +fN +vv +cS +cS +cS +cS +cS +cS +ga +ga +ga +ga +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +af +af +af +af +af +af +af +af +af +af +by +cz +by +er +es +by +eu +eu +eG +eP +fY +eZ +eu +fq +fr +eu +eu +eu +et +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +by +pI +by +by +by +by +eu +eu +eu +eQ +eu +fa +eu +eu +eu +fo +eu +eu +et +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +fg +et +ev +eA +eA +eA +eN +ev +fe +ev +eT +fm +fm +ev +et +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,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 +et +ey +fh +fh +fh +eY +eR +fh +eR +fc +fh +fh +fh +et +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(68,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 +ew +eC +fF +fB +fF +fl +ew +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(69,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 +fh +eY +eS +fh +eS +fc +fh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(70,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 +eJ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(71,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 +"} +(72,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 +"} +(73,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 +"} +(74,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 +"} +(75,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 +"} +(76,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 +"} +(77,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 +"} +(78,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 +"} +(79,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 +"} +(80,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 +"} +(81,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 +"} +(82,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 +"} +(83,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 +"} +(84,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 +"} +(85,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 +"} +(86,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 +"} +(87,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 +"} +(88,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 +"} +(89,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 +"} +(90,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 diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 3b0f6c6ca7..1811eab278 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/open/space/basic, /area/space) @@ -13642,7 +13642,7 @@ /turf/open/floor/grass, /area/centcom/holding) "Qm" = ( -/obj/singularity/wizard, +/obj/singularity/wizard/mapped, /turf/open/indestructible/binary, /area/fabric_of_reality) "Qu" = ( @@ -16070,7 +16070,7 @@ fX fX fX fX -fY +fX fX fX fX @@ -16841,7 +16841,7 @@ fX fX fX fX -fX +fY fX fX fX @@ -18119,21 +18119,21 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX aa aa aa @@ -18376,21 +18376,21 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX aa aa aa @@ -18633,21 +18633,21 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX aa aa aa @@ -18890,21 +18890,21 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX aa aa aa @@ -19147,21 +19147,21 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX aa aa aa @@ -19404,21 +19404,21 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX aa aa aa diff --git a/_maps/runtimestation.json b/_maps/runtimestation.json index c363b67a05..f9333c65a2 100644 --- a/_maps/runtimestation.json +++ b/_maps/runtimestation.json @@ -1,5 +1,8 @@ { "map_name": "Runtime Station", "map_path": "map_files/debug", - "map_file": "runtimestation.dmm" + "map_file": "runtimestation.dmm", + "shuttles": { + "cargo": "cargo_delta" + } } diff --git a/_maps/shuttles/aux_base_default.dmm b/_maps/shuttles/aux_base_default.dmm index e093d3c864..365c34cf50 100644 --- a/_maps/shuttles/aux_base_default.dmm +++ b/_maps/shuttles/aux_base_default.dmm @@ -78,7 +78,8 @@ /area/shuttle/auxillary_base) "X" = ( /obj/machinery/camera{ - dir = 1 + dir = 1; + network = list("auxbase") }, /obj/structure/mining_shuttle_beacon, /turf/open/floor/plating, diff --git a/_maps/shuttles/aux_base_small.dmm b/_maps/shuttles/aux_base_small.dmm index b29512d675..a7ddb70a9b 100644 --- a/_maps/shuttles/aux_base_small.dmm +++ b/_maps/shuttles/aux_base_small.dmm @@ -146,4 +146,4 @@ g g g n -"} \ No newline at end of file +"} diff --git a/_maps/shuttles/snowdin_excavation.dmm b/_maps/shuttles/snowdin_excavation.dmm new file mode 100644 index 0000000000..e0b53a78b1 --- /dev/null +++ b/_maps/shuttles/snowdin_excavation.dmm @@ -0,0 +1,90 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Elevator Access" + }, +/obj/docking_port/mobile/elevator{ + dir = 4; + height = 6; + id = "snowdin_excavation"; + name = "excavation elevator"; + timid = 1; + width = 6 + }, +/turf/open/floor/plating, +/area/shuttle/snowdin/elevator1) +"b" = ( +/obj/structure/window/reinforced/fulltile/ice, +/obj/structure/grille, +/turf/open/floor/plating, +/area/shuttle/snowdin/elevator1) +"c" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Elevator Access" + }, +/turf/open/floor/plating, +/area/shuttle/snowdin/elevator1) +"d" = ( +/turf/closed/wall/ice, +/area/shuttle/snowdin/elevator1) +"e" = ( +/turf/open/floor/engine, +/area/shuttle/snowdin/elevator1) +"f" = ( +/obj/machinery/computer/shuttle/snowdin/mining{ + dir = 2; + name = "Excavation Elevator Console"; + possible_destinations = "snowdin_excavation_top;snowdin_excavation_down"; + shuttleId = "snowdin_excavation" + }, +/turf/open/floor/engine, +/area/shuttle/snowdin/elevator1) + +(1,1,1) = {" +d +b +c +a +b +d +"} +(2,1,1) = {" +b +e +e +e +e +b +"} +(3,1,1) = {" +c +e +e +e +e +c +"} +(4,1,1) = {" +c +e +e +e +e +c +"} +(5,1,1) = {" +b +f +e +e +e +b +"} +(6,1,1) = {" +d +b +c +c +b +d +"} diff --git a/_maps/shuttles/snowdin_mining.dmm b/_maps/shuttles/snowdin_mining.dmm new file mode 100644 index 0000000000..cd8d37d703 --- /dev/null +++ b/_maps/shuttles/snowdin_mining.dmm @@ -0,0 +1,86 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Elevator Access" + }, +/obj/docking_port/mobile/elevator{ + dir = 4; + dwidth = 2; + height = 5; + id = "snowdin_mining"; + name = "mining elevator"; + timid = 1; + width = 5 + }, +/turf/open/floor/plating, +/area/shuttle/snowdin/elevator2) +"b" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/shuttle/snowdin/elevator2) +"c" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Elevator Access" + }, +/turf/open/floor/plating, +/area/shuttle/snowdin/elevator2) +"d" = ( +/turf/closed/wall, +/area/shuttle/snowdin/elevator2) +"e" = ( +/obj/machinery/computer/shuttle/snowdin/mining, +/turf/open/floor/engine, +/area/shuttle/snowdin/elevator2) +"f" = ( +/turf/open/floor/engine, +/area/shuttle/snowdin/elevator2) +"g" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/engine, +/area/shuttle/snowdin/elevator2) +"i" = ( +/obj/machinery/light/small, +/turf/open/floor/engine, +/area/shuttle/snowdin/elevator2) +"j" = ( +/turf/closed/wall/rust, +/area/shuttle/snowdin/elevator2) + +(1,1,1) = {" +j +b +a +b +d +"} +(2,1,1) = {" +b +e +f +i +b +"} +(3,1,1) = {" +c +f +f +f +c +"} +(4,1,1) = {" +b +g +f +f +b +"} +(5,1,1) = {" +d +b +c +b +j +"} diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index bb8d902fae..1c5185b8dc 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -96,6 +96,7 @@ #define ORGAN_SLOT_RIGHT_ARM_AUG "r_arm_device" #define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" #define ORGAN_SLOT_STOMACH "stomach" +#define ORGAN_SLOT_STOMACH_AID "stomach_aid" #define ORGAN_SLOT_BREATHING_TUBE "breathing_tube" #define ORGAN_SLOT_EARS "ears" #define ORGAN_SLOT_EYES "eye_sight" diff --git a/code/__DEFINES/_globals.dm b/code/__DEFINES/_globals.dm index 7e7aa3158f..e5f5929a95 100644 --- a/code/__DEFINES/_globals.dm +++ b/code/__DEFINES/_globals.dm @@ -1,11 +1,15 @@ -//See controllers/globals.dm +//See also controllers/globals.dm + +//Creates a global initializer with a given InitValue expression, do not use #define GLOBAL_MANAGED(X, InitValue)\ /datum/controller/global_vars/proc/InitGlobal##X(){\ ##X = ##InitValue;\ gvars_datum_init_order += #X;\ } +//Creates an empty global initializer, do not use #define GLOBAL_UNMANAGED(X) /datum/controller/global_vars/proc/InitGlobal##X() { return; } +//Prevents a given global from being VV'd #ifndef TESTING #define GLOBAL_PROTECT(X)\ /datum/controller/global_vars/InitGlobal##X(){\ @@ -16,23 +20,35 @@ #define GLOBAL_PROTECT(X) #endif +//Standard BYOND global, do not use #define GLOBAL_REAL_VAR(X) var/global/##X + +//Standard typed BYOND global, do not use #define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X +//Defines a global var on the controller, do not use #define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X +//Create an untyped global with an initializer expression #define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue) +//Create a global const var, do not use #define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X) +//Create a list global with an initializer expression #define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue) +//Create a list global that is initialized as an empty list #define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) +//Create a typed global with an initializer expression #define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) +//Create an untyped null global #define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_UNMANAGED(X) +//Create a null global list #define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_UNMANAGED(X) +//Create an typed null global #define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_UNMANAGED(X) diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index d00645846b..c9d545fc03 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -1,22 +1,22 @@ -#define ACCESS_SECURITY 1 // Security equipment -#define ACCESS_BRIG 2 // Brig timers and permabrig -#define ACCESS_ARMORY 3 -#define ACCESS_FORENSICS_LOCKERS 4 +#define ACCESS_SECURITY 1 // Security equipment, security records, gulag item storage, secbots +#define ACCESS_BRIG 2 // Brig cells+timers, permabrig, gulag+gulag shuttle, prisoner management console +#define ACCESS_ARMORY 3 // Armory, gulag teleporter, execution chamber +#define ACCESS_FORENSICS_LOCKERS 4 //Detective's office, forensics lockers, security+medical records #define ACCESS_MEDICAL 5 #define ACCESS_MORGUE 6 -#define ACCESS_TOX 7 -#define ACCESS_TOX_STORAGE 8 -#define ACCESS_GENETICS 9 -#define ACCESS_ENGINE 10 -#define ACCESS_ENGINE_EQUIP 11 +#define ACCESS_TOX 7 //R&D department, R&D console, burn chamber on some maps +#define ACCESS_TOX_STORAGE 8 //Toxins storage, burn chamber on some maps +#define ACCESS_GENETICS 9 +#define ACCESS_ENGINE 10 //Engineering area, power monitor, power flow control console +#define ACCESS_ENGINE_EQUIP 11 //APCs, EngiVend/YouTool, engineering equipment lockers #define ACCESS_MAINT_TUNNELS 12 #define ACCESS_EXTERNAL_AIRLOCKS 13 -#define ACCESS_EMERGENCY_STORAGE 14 +#define ACCESS_EMERGENCY_STORAGE 14 //Not in use #define ACCESS_CHANGE_IDS 15 #define ACCESS_AI_UPLOAD 16 #define ACCESS_TELEPORTER 17 #define ACCESS_EVA 18 -#define ACCESS_HEADS 19 +#define ACCESS_HEADS 19 //Bridge, EVA storage windoors, gateway shutters, AI integrity restorer, clone record deletion, comms console #define ACCESS_CAPTAIN 20 #define ACCESS_ALL_PERSONAL_LOCKERS 21 #define ACCESS_CHAPEL_OFFICE 22 @@ -31,9 +31,9 @@ #define ACCESS_CARGO 31 #define ACCESS_CONSTRUCTION 32 #define ACCESS_CHEMISTRY 33 -#define ACCESS_CARGO_BOT 34 +#define ACCESS_CARGO_BOT 34 //Not in use #define ACCESS_HYDROPONICS 35 -#define ACCESS_MANUFACTURING 36 +#define ACCESS_MANUFACTURING 36 //Only used on research.dmm away mission #define ACCESS_LIBRARY 37 #define ACCESS_LAWYER 38 #define ACCESS_VIROLOGY 39 @@ -44,10 +44,10 @@ #define ACCESS_THEATRE 46 #define ACCESS_RESEARCH 47 #define ACCESS_MINING 48 -#define ACCESS_MINING_OFFICE 49 //not in use +#define ACCESS_MINING_OFFICE 49 //Not in use #define ACCESS_MAILSORTING 50 -#define ACCESS_MINT 51 -#define ACCESS_MINT_VAULT 52 +#define ACCESS_MINT 51 //Not in use +#define ACCESS_MINT_VAULT 52 //Not in use #define ACCESS_VAULT 53 #define ACCESS_MINING_STATION 54 #define ACCESS_XENOBIOLOGY 55 @@ -58,19 +58,19 @@ #define ACCESS_KEYCARD_AUTH 60 //Used for events which require at least two people to confirm them #define ACCESS_TCOMSAT 61 // has access to the entire telecomms satellite / machinery #define ACCESS_GATEWAY 62 -#define ACCESS_SEC_DOORS 63 // Security front doors -#define ACCESS_MINERAL_STOREROOM 64 +#define ACCESS_SEC_DOORS 63 // Outer brig doors, department security posts +#define ACCESS_MINERAL_STOREROOM 64 //For releasing minerals from the ORM #define ACCESS_MINISAT 65 #define ACCESS_WEAPONS 66 //Weapon authorization for secbots -#define ACCESS_NETWORK 67 -#define ACCESS_CLONING 68 //Cloning room +#define ACCESS_NETWORK 67 //NTnet diagnostics/monitoring software +#define ACCESS_CLONING 68 //Cloning room and clone pod ejection //BEGIN CENTCOM ACCESS /*Should leave plenty of room if we need to add more access levels. Mostly for admin fun times.*/ -#define ACCESS_CENT_GENERAL 101//General facilities. +#define ACCESS_CENT_GENERAL 101//General facilities. CentCom ferry. #define ACCESS_CENT_THUNDER 102//Thunderdome. -#define ACCESS_CENT_SPECOPS 103//Special Ops. +#define ACCESS_CENT_SPECOPS 103//Special Ops. Captain's display case, Marauder and Seraph mechs. #define ACCESS_CENT_MEDICAL 104//Medical/Research #define ACCESS_CENT_LIVING 105//Living quarters. #define ACCESS_CENT_STORAGE 106//Generic storage areas. @@ -79,7 +79,7 @@ #define ACCESS_CENT_BAR 110 // The non-existent CentCom Bar //The Syndicate -#define ACCESS_SYNDICATE 150//General Syndicate Access +#define ACCESS_SYNDICATE 150//General Syndicate Access. Includes Syndicate mechs and ruins. #define ACCESS_SYNDICATE_LEADER 151//Nuke Op Leader Access //Away Missions or Ruins diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 1cf27a8c68..d454c91303 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -1,3 +1,7 @@ +#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(##arguments)) ) + +#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) ) + //shorthand #define GET_COMPONENT_FROM(varname, path, target) var##path/##varname = ##target.GetComponent(##path) #define GET_COMPONENT(varname, path) GET_COMPONENT_FROM(varname, path, src) @@ -14,6 +18,14 @@ // All signals. Format: // When the signal is called: (signal arguments) +// global signals +// These are signals which can be listened to by any component on any parent +// start global signals with "!", this used to be necessary but now it's just a formatting choice +#define COMSIG_GLOB_NEW_Z "!new_z" //from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args) +#define COMSIG_GLOB_VAR_EDIT "!var_edit" //called after a successful var edit somewhere in the world: (list/args) + +////////////////////////////////////////////////////////////////// + // /datum signals #define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component) #define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component) @@ -32,6 +44,8 @@ //End positions #define COMPONENT_EXNAME_CHANGED 1 #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom) +#define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc) + #define COMPONENT_ATOM_BLOCK_EXIT 1 #define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc) #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity) @@ -78,6 +92,8 @@ // /atom/movable signals #define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir) #define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable) +#define COMSIG_MOVABLE_UNCROSS "movable_uncross" //from base of atom/movable/Uncross(): (/atom/movable) + #define COMPONENT_MOVABLE_BLOCK_UNCROSS 1 #define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_COLLIDE "movable_collide" //from base of atom/movable/Collide(): (/atom) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) @@ -87,6 +103,11 @@ #define COMSIG_MOVABLE_THROW "movable_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) #define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z) +// /mob/living signals +#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living) +#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living) +#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living) + // /mob/living/carbon signals #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) @@ -96,12 +117,13 @@ // /obj/item signals #define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob) + #define COMPONENT_NO_INTERACT 1 #define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob) #define COMPONENT_NO_ATTACK_OBJ 1 #define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params) #define COMPONENT_NO_ATTACK 1 #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) -#define COMSIG_ITEM_DROPPED "item_drop" +#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user) #define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) #define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) @@ -109,6 +131,27 @@ // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () +// /obj/item/implant signals +#define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): () +#define COMSIG_IMPLANT_IMPLANTING "implant_implanting" //from base of /obj/item/implant/proc/implant(): (list/args) + #define COMPONENT_STOP_IMPLANTING 1 +#define COMSIG_IMPLANT_OTHER "implant_other" //called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant) + //#define COMPONENT_STOP_IMPLANTING 1 //The name makes sense for both + #define COMPONENT_DELETE_NEW_IMPLANT 2 + #define COMPONENT_DELETE_OLD_IMPLANT 4 +#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists" //called on implants being implanted into someone with an uplink implant: (datum/component/uplink) + //This uses all return values of COMSIG_IMPLANT_OTHER + +// /obj/item/pda signals +#define COMSIG_PDA_CHANGE_RINGTONE "pda_change_ringtone" //called on pda when the user changes the ringtone: (mob/living/user, new_ringtone) + #define COMPONENT_STOP_RINGTONE_CHANGE 1 + +// /obj/item/radio signals +#define COMSIG_RADIO_NEW_FREQUENCY "radio_new_frequency" //called from base of /obj/item/radio/proc/set_frequency(): (list/args) + +// /obj/item/pen signals +#define COMSIG_PEN_ROTATED "pen_rotated" //called after rotation in /obj/item/pen/attack_self(): (rotation, mob/living/carbon/user) + // /mob/living/carbon/human signals #define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target) #define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker) @@ -128,7 +171,7 @@ #define COMSIG_CLEAR_MOOD_EVENT "clear_mood" //Called when you clear a mood event from anywhere in the code. //NTnet -#define COMSIG_COMPONENT_NTNET_RECIEVE "ntnet_recieve" //called on an object by its NTNET connection component on recieve. (sending_id(number), sending_netname(text), data(datum/netdata)) +#define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" //called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata)) // /datum/component/storage signals #define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool. diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 157069f4eb..0d088c903a 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -28,10 +28,6 @@ #define AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS 1 #define AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER 2 -//plastic flaps construction states -#define PLASTIC_FLAPS_NORMAL 0 -#define PLASTIC_FLAPS_DETACHED 1 - //default_unfasten_wrench() return defines #define CANT_UNFASTEN 0 #define FAILED_UNFASTEN 1 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 43cdbcb646..3ed28c4693 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -13,16 +13,12 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 //FLAGS BITMASK -#define NODROP_1 (1<<1) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted. -#define NOBLUDGEON_1 (1<<2) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby() #define HEAR_1 (1<<3) // This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not. #define CHECK_RICOCHET_1 (1<<4) // Projectiels will check ricochet on things impacted that have this. #define CONDUCT_1 (1<<5) // conducts electricity (metal etc.) -#define ABSTRACT_1 (1<<6) // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way #define NODECONSTRUCT_1 (1<<7) // For machines and structures that should not break into parts, eg, holodeck stuff #define OVERLAY_QUEUED_1 (1<<8) // atom queued to SSoverlay #define ON_BORDER_1 (1<<9) // item has priority to check when entering or leaving -#define DROPDEL_1 (1<<10) // When dropped, it calls qdel on itself #define PREVENT_CLICK_UNDER_1 (1<<11) //Prevent clicking things below it on the same turf eg. doors/ fulltile windows #define HOLOGRAM_1 (1<<12) #define TESLA_IGNORE_1 (1<<13) // TESLA_IGNORE grants immunity from being targeted by tesla-style electricity @@ -33,9 +29,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define NOJAUNT_1 (1<<0) #define UNUSED_RESERVATION_TURF_1 (1<<1) #define CAN_BE_DIRTY_1 (1<<2) // If a turf can be made dirty at roundstart. This is also used in areas. -#define NO_DEATHRATTLE_1 (1<<4) // Do not notify deadchat about any deaths that occur on this turf. -#define NO_RUINS_1 (1<<5) //Blocks ruins spawning on the turf #define NO_LAVA_GEN_1 (1<<6) //Blocks lava rivers being generated on the turf +#define NO_RUINS_1 (1<<10) //Blocks ruins spawning on the turf /* These defines are used specifically with the atom/pass_flags bitmask @@ -81,4 +76,3 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define EMP_PROTECT_SELF (1<<0) #define EMP_PROTECT_CONTENTS (1<<1) #define EMP_PROTECT_WIRES (1<<2) - diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index 197c315f78..485cfa65c1 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -14,6 +14,7 @@ #define INVESTIGATE_HALLUCINATIONS "hallucinations" #define INVESTIGATE_RADIATION "radiation" #define INVESTIGATE_EXONET "exonet" +#define INVESTIGATE_CIRCUIT "circuit" //Individual logging defines #define INDIVIDUAL_ATTACK_LOG "Attack log" diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 98d022d27e..1defe2bc39 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -41,6 +41,9 @@ require only minor tweaks. // number - bombcap is multiplied by this before being applied to bombs #define ZTRAIT_BOMBCAP_MULTIPLIER "Bombcap Multiplier" +// number - default gravity if there's no gravity generators or area overrides present +#define ZTRAIT_GRAVITY "Gravity" + // numeric offsets - e.g. {"Down": -1} means that chasms will fall to z - 1 rather than oblivion #define ZTRAIT_UP "Up" #define ZTRAIT_DOWN "Down" diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 43c706e58e..f1b62745ed 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -86,6 +86,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s //Because I *KNOW* somebody will think layer+1 means "above" //IT DOESN'T OK, IT MEANS "UNDER" #define UNDER_SUIT_LAYER (SUIT_LAYER+1) +#define UNDER_HEAD_LAYER (HEAD_LAYER+1) //AND -1 MEANS "ABOVE", OK?, OK!?! #define ABOVE_SHOES_LAYER (SHOES_LAYER-1) @@ -430,6 +431,7 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) #define ION_FILE "ion_laws.json" #define PIRATE_NAMES_FILE "pirates.json" + //Fullscreen overlay resolution in tiles. #define FULLSCREEN_OVERLAY_RESOLUTION_X 15 #define FULLSCREEN_OVERLAY_RESOLUTION_Y 15 @@ -448,5 +450,10 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) // Used by PDA and cartridge code to reduce repetitiveness of spritesheets #define PDAIMG(what) {""} + //Filters #define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") + + +#define STANDARD_GRAVITY 1 //Anything above this is high gravity, anything below no grav +#define GRAVITY_DAMAGE_TRESHOLD 3 //Starting with this value gravity will start to damage mobs \ No newline at end of file diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index f8287cf34e..76f66521a7 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -21,6 +21,10 @@ #define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use. #define SLOWS_WHILE_IN_HAND (1<<4) #define NO_MAT_REDEMPTION (1<<5) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials. +#define DROPDEL (1<<6) // When dropped, it calls qdel on itself +#define NOBLUDGEON (1<<7) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby() +#define NODROP (1<<8) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted. +#define ABSTRACT (1<<9) // for all things that are technically items but used for various different stuff // Flags for the clothing_flags var on /obj/item/clothing diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 0dc8a38899..02f151dcd9 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -68,3 +68,5 @@ //Flags in the players table in the db #define DB_FLAG_EXEMPT 1 + +#define DEFAULT_CYBORG_NAME "Default Cyborg Name" \ No newline at end of file diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 6fca8786f5..f8f59a367f 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -2,7 +2,6 @@ #define LIQUID 2 #define GAS 3 - // container_type defines #define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes. #define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes. diff --git a/code/__DEFINES/reagents_specific_heat.dm b/code/__DEFINES/reagents_specific_heat.dm new file mode 100644 index 0000000000..90a379d7de --- /dev/null +++ b/code/__DEFINES/reagents_specific_heat.dm @@ -0,0 +1,3 @@ +#define SPECIFIC_HEAT_DEFAULT 200 + +#define SPECIFIC_HEAT_PLASMA 500 diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm new file mode 100644 index 0000000000..a905fd5186 --- /dev/null +++ b/code/__DEFINES/rust_g.dm @@ -0,0 +1,7 @@ +// rust_g.dm - DM API for rust_g extension library +#define RUST_G "rust_g" + +#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname) + +#define rustg_log_write(fname, text) call(RUST_G, "log_write")(fname, text) +/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")() diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 6b16e352e5..ffaaa04d0f 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -80,6 +80,8 @@ #define STATUS_EFFECT_SYPHONMARK /datum/status_effect/syphon_mark //tracks kills for the KA death syphon module +#define STATUS_EFFECT_INLOVE /datum/status_effect/in_love //Displays you as being in love with someone else, and makes hearts appear around them. + ///////////// // SLIME // ///////////// diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 149be99aea..48b3260dd7 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -124,21 +124,19 @@ #define COMPILE_OVERLAYS(A)\ if (TRUE) {\ - var/list/oo = A.our_overlays;\ + var/list/ad = A.add_overlays;\ + var/list/rm = A.remove_overlays;\ var/list/po = A.priority_overlays;\ + if(LAZYLEN(rm)){\ + A.overlays -= rm;\ + rm.Cut();\ + }\ + if(LAZYLEN(ad)){\ + A.overlays |= ad;\ + ad.Cut();\ + }\ if(LAZYLEN(po)){\ - if(LAZYLEN(oo)){\ - A.overlays = oo + po;\ - }\ - else{\ - A.overlays = po;\ - }\ - }\ - else if(LAZYLEN(oo)){\ - A.overlays = oo;\ - }\ - else{\ - A.overlays.Cut();\ + A.overlays |= po;\ }\ A.flags_1 &= ~OVERLAY_QUEUED_1;\ } diff --git a/code/__DEFINES/turf_flags.dm b/code/__DEFINES/turf_flags.dm index f71335e1f0..5ceb6f2e2e 100644 --- a/code/__DEFINES/turf_flags.dm +++ b/code/__DEFINES/turf_flags.dm @@ -1,4 +1,5 @@ #define CHANGETURF_DEFER_CHANGE 1 -#define CHANGETURF_IGNORE_AIR 2 +#define CHANGETURF_IGNORE_AIR 2 // This flag prevents changeturf from gathering air from nearby turfs to fill the new turf with an approximation of local air #define CHANGETURF_FORCEOP 4 -#define CHANGETURF_SKIP 8 // A flag for PlaceOnTop to just instance the new turf instead of calling ChangeTurf. Used for uninitialized turfs NOTHING ELSE \ No newline at end of file +#define CHANGETURF_SKIP 8 // A flag for PlaceOnTop to just instance the new turf instead of calling ChangeTurf. Used for uninitialized turfs NOTHING ELSE +#define CHANGETURF_INHERIT_AIR 16 // Inherit air from previous turf. Implies CHANGETURF_IGNORE_AIR diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm index 35fa37257b..960d0479be 100644 --- a/code/__DEFINES/wires.dm +++ b/code/__DEFINES/wires.dm @@ -34,7 +34,7 @@ #define WIRE_POWER1 "Main Power 1" #define WIRE_POWER2 "Main Power 2" #define WIRE_PROCEED "Proceed" -#define WIRE_RX "Recieve" +#define WIRE_RX "Receive" #define WIRE_RESET_MODULE "Reset Module" #define WIRE_SAFETY "Safety" #define WIRE_SHOCK "High Voltage Ground" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index cf8a9df119..54dd2a982c 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -488,6 +488,11 @@ for(var/key in key_list) . |= key_list[key] +/proc/make_associative(list/flat_list) + . = list() + for(var/thing in flat_list) + .[thing] = TRUE + //Picks from the list, with some safeties, and returns the "default" arg if it fails #define DEFAULTPICK(L, default) ((islist(L) && length(L)) ? pick(L) : default) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 48e2baac6e..92f7b21bb7 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -1,13 +1,10 @@ -//location of the rust-g library -#define RUST_G "rust_g" - //wrapper macros for easier grepping #define DIRECT_OUTPUT(A, B) A << B #define SEND_IMAGE(target, image) DIRECT_OUTPUT(target, image) #define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound) #define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text) #define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text) -#define WRITE_LOG(log, text) call(RUST_G, "log_write")(log, text) +#define WRITE_LOG(log, text) rustg_log_write(log, text) //print a warning message to world.log #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") @@ -131,6 +128,10 @@ /proc/log_query_debug(text) WRITE_LOG(GLOB.query_debug_log, "SQL: [text]") +/proc/log_job_debug(text) + if (CONFIG_GET(flag/log_job_debug)) + WRITE_LOG(GLOB.world_job_debug_log, "JOB: [text]") + /* Log to both DD and the logfile. */ /proc/log_world(text) WRITE_LOG(GLOB.world_runtime_log, text) @@ -152,7 +153,7 @@ /* Close open log handles. This should be called as late as possible, and no logging should hapen after. */ /proc/shutdown_logging() - call(RUST_G, "log_close_all")() + rustg_log_close_all() /* Helper procs for building detailed log lines */ @@ -172,6 +173,3 @@ return "[A.loc] [COORD(T)] ([A.loc.type])" else if(A.loc) return "[A.loc] (0, 0, 0) ([A.loc.type])" - -//this is only used here (for now) -#undef RUST_G diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index e75e1ed88a..13f415823c 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -433,7 +433,7 @@ if(!gametypeCheck.age_check(M.client)) continue if(jobbanType) - if(jobban_isbanned(M, jobbanType) || jobban_isbanned(M, ROLE_SYNDICATE)) + if(jobban_isbanned(M, jobbanType) || QDELETED(M) || jobban_isbanned(M, ROLE_SYNDICATE) || QDELETED(M)) continue showCandidatePollWindow(M, poll_time, Question, result, ignore_category, time_passed, flashwindow) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 7a8cf5f3a2..1fefb27497 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -529,6 +529,7 @@ Proc for attack log creation, because really why not step(X, pick(NORTH, SOUTH, EAST, WEST)) /proc/deadchat_broadcast(message, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR) + message = "[message]" for(var/mob/M in GLOB.player_list) var/datum/preferences/prefs if(M.client && M.client.prefs) diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 9b6b601e69..bbaf7b275d 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -55,7 +55,7 @@ for(var/mob/M in GLOB.player_list) if(!isnewplayer(M) && M.can_hear()) - to_chat(M, "[title]
[message]

") + to_chat(M, "[html_encode(title)]
[html_encode(message)]

") if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) if(alert) SEND_SOUND(M, sound('sound/misc/notice1.ogg')) diff --git a/code/__HELPERS/radio.dm b/code/__HELPERS/radio.dm index 39fe55c67c..84b354b6cd 100644 --- a/code/__HELPERS/radio.dm +++ b/code/__HELPERS/radio.dm @@ -1,4 +1,4 @@ -// Ensure the frequency is within bounds of what it should be sending/recieving at +// Ensure the frequency is within bounds of what it should be sending/receiving at /proc/sanitize_frequency(frequency, free = FALSE) . = round(frequency) if(free) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 13fcc94b4b..e86c57ac24 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -203,21 +203,20 @@ //Print a list of antagonists to the server log var/list/total_antagonists = list() //Look into all mobs in world, dead or alive - for(var/datum/mind/Mind in minds) - var/temprole = Mind.special_role - if(temprole) //if they are an antagonist of some sort. - if(temprole in total_antagonists) //If the role exists already, add the name to it - total_antagonists[temprole] += ", [Mind.name]([Mind.key])" - else - total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob - total_antagonists[temprole] += ": [Mind.name]([Mind.key])" + for(var/datum/antagonist/A in GLOB.antagonists) + if(!A.owner) + continue + if(!(A.name in total_antagonists)) + total_antagonists[A.name] = list() + total_antagonists[A.name] += "[key_name(A.owner)]" CHECK_TICK //Now print them all into the log! log_game("Antagonists at round end were...") - for(var/i in total_antagonists) - log_game("[i]s[total_antagonists[i]].") + for(var/antag_name in total_antagonists) + var/list/L = total_antagonists[antag_name] + log_game("[antag_name]s :[L.Join(", ")].") CHECK_TICK SSdbcore.SetRoundEnd() @@ -525,6 +524,8 @@ return var/datum/DBQuery/query_admin_rank_update = SSdbcore.NewQuery("UPDATE [format_table_name("player")] p INNER JOIN [format_table_name("admin")] a ON p.ckey = a.ckey SET p.lastadminrank = a.rank") query_admin_rank_update.Execute() + qdel(query_admin_rank_update) + //json format backup file generation stored per server var/json_file = file("data/admins_backup.json") var/list/file_data = list("ranks" = list(), "admins" = list()) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index a550206ff6..3ffb583332 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -64,7 +64,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) //Takes a value of time in deciseconds. //Returns a text value of that number in hours, minutes, or seconds. /proc/DisplayTimeText(time_value, truncate = FALSE) - var/second = time_value*0.1 + var/second = (time_value)*0.1 var/second_adjusted = null var/second_rounded = FALSE var/minute = null @@ -144,7 +144,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) else if(day && (!minute || !second)) hour = " and 1 hour" else - hour = "[truncate ? "hour" : "1 hour"]" + hour = "[truncate ? "hour" : "1 hour"]" else hour = null diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 1f788cf445..b474915e10 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -218,21 +218,6 @@ . = "NONE" return . -/proc/ui_style2icon(ui_style) - switch(ui_style) - if("Retro") - return 'icons/mob/screen_retro.dmi' - if("Plasmafire") - return 'icons/mob/screen_plasmafire.dmi' - if("Slimecore") - return 'icons/mob/screen_slimecore.dmi' - if("Operative") - return 'icons/mob/screen_operative.dmi' - if("Clockwork") - return 'icons/mob/screen_clockwork.dmi' - else - return 'icons/mob/screen_midnight.dmi' - //colour formats /proc/rgb2hsl(red, green, blue) red /= 255;green /= 255;blue /= 255; diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index bb2cb98cd2..273e1cf1b7 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -186,7 +186,7 @@ Turf and target are separate in case you want to teleport some distance from a t return 1 //Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame() -/mob/proc/rename_self(role, client/C) +/mob/proc/apply_pref_name(role, client/C) if(!C) C = client var/oldname = real_name @@ -194,8 +194,10 @@ Turf and target are separate in case you want to teleport some distance from a t var/loop = 1 var/safety = 0 + var/banned = jobban_isbanned(src, "appearance") + while(loop && safety < 5) - if(C && C.prefs.custom_names[role] && !safety) + if(C && C.prefs.custom_names[role] && !safety && !banned) newname = C.prefs.custom_names[role] else switch(role) @@ -207,10 +209,8 @@ Turf and target are separate in case you want to teleport some distance from a t newname = pick(GLOB.mime_names) if("ai") newname = pick(GLOB.ai_names) - if("deity") - newname = pick(GLOB.clown_names|GLOB.ai_names|GLOB.mime_names) //pick any old name else - return + return FALSE for(var/mob/living/M in GLOB.player_list) if(M == src) @@ -224,6 +224,8 @@ Turf and target are separate in case you want to teleport some distance from a t if(newname) fully_replace_character_name(oldname,newname) + return TRUE + return FALSE //Picks a string of symbols to display as the law number for hacked or ion laws @@ -375,6 +377,7 @@ Turf and target are separate in case you want to teleport some distance from a t var/client/C var/key var/ckey + var/fallback_name if(!whom) return "*null*" @@ -394,6 +397,16 @@ Turf and target are separate in case you want to teleport some distance from a t C = GLOB.directory[ckey] if(C) M = C.mob + else if(istype(whom,/datum/mind)) + var/datum/mind/mind = whom + key = mind.key + ckey = ckey(key) + if(mind.current) + M = mind.current + if(M.client) + C = M.client + else + fallback_name = mind.name else return "*invalid*" @@ -419,11 +432,14 @@ Turf and target are separate in case you want to teleport some distance from a t else . += "*no key*" - if(include_name && M) - if(M.real_name) - . += "/([M.real_name])" - else if(M.name) - . += "/([M.name])" + if(include_name) + if(M) + if(M.real_name) + . += "/([M.real_name])" + else if(M.name) + . += "/([M.name])" + else if(fallback_name) + . += "/([fallback_name])" return . @@ -885,7 +901,7 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( /proc/check_target_facings(mob/living/initator, mob/living/target) /*This can be used to add additional effects on interactions between mobs depending on how the mobs are facing each other, such as adding a crit damage to blows to the back of a guy's head. Given how click code currently works (Nov '13), the initiating mob will be facing the target mob most of the time - That said, this proc should not be used if the change facing proc of the click code is overriden at the same time*/ + That said, this proc should not be used if the change facing proc of the click code is overridden at the same time*/ if(!ismob(target) || target.lying) //Make sure we are not doing this for things that can't have a logical direction to the players given that the target would be on their side return FALSE diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index aa872fa75e..2ad35a6b1b 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -45,6 +45,10 @@ GLOBAL_LIST_INIT(bitfields, list( "NEEDS_PERMIT" = NEEDS_PERMIT, "SLOWS_WHILE_IN_HAND" = SLOWS_WHILE_IN_HAND, "NO_MAT_REDEMPTION" = NO_MAT_REDEMPTION, + "DROPDEL" = DROPDEL, + "NOBLUDGEON" = NOBLUDGEON, + "NODROP" = NODROP, + "ABSTRACT" = ABSTRACT, ), "admin_flags" = list( "BUILDMODE" = R_BUILDMODE, @@ -113,12 +117,15 @@ GLOBAL_LIST_INIT(bitfields, list( "NOJAUNT_1" = NOJAUNT_1, "UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1, "CAN_BE_DIRTY_1" = CAN_BE_DIRTY_1, - "HEAR_1 / NO_DEATHRATTLE_1 (turfs)" = HEAR_1, - "CHECK_RICOCHET_1 / NO_RUINS_1 (turfs)" = CHECK_RICOCHET_1, - "CONDUCT_1 / NO_LAVA_GEN_1" = CONDUCT_1, - "ABSTRACT_1" = ABSTRACT_1, + "HEAR_1" = HEAR_1, + "CHECK_RICOCHET_1" = CHECK_RICOCHET_1, + "CONDUCT_1" = CONDUCT_1, + "NO_LAVA_GEN_1" = NO_LAVA_GEN_1, "NODECONSTRUCT_1" = NODECONSTRUCT_1, "OVERLAY_QUEUED_1" = OVERLAY_QUEUED_1, + "ON_BORDER_1" = ON_BORDER_1, + "NO_RUINS_1" = NO_RUINS_1, + "PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1, "HOLOGRAM_1" = HOLOGRAM_1, "TESLA_IGNORE_1" = TESLA_IGNORE_1, "INITIALIZED_1" = INITIALIZED_1, diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index 3822f7077d..f6022cdd59 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -1,7 +1,7 @@ GLOBAL_VAR_INIT(master_mode, "traitor") //"extended" GLOBAL_VAR_INIT(secret_force_mode, "secret") // if this is anything but "secret", the secret rotation will forceably choose this mode -GLOBAL_VAR(common_report) //Contains commmon part of roundend report -GLOBAL_VAR(survivor_report) //Contains shared surivor report for roundend report (part of personal report) +GLOBAL_VAR(common_report) //Contains common part of roundend report +GLOBAL_VAR(survivor_report) //Contains shared survivor report for roundend report (part of personal report) GLOBAL_VAR_INIT(wavesecret, 0) // meteor mode, delays wave progression, terrible name diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index e00e4775ac..2951ddf165 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -22,6 +22,8 @@ GLOBAL_VAR(world_manifest_log) GLOBAL_PROTECT(world_manifest_log) GLOBAL_VAR(query_debug_log) GLOBAL_PROTECT(query_debug_log) +GLOBAL_VAR(world_job_debug_log) +GLOBAL_PROTECT(world_job_debug_log) GLOBAL_LIST_EMPTY(bombers) GLOBAL_PROTECT(bombers) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 2415c1fea3..fa0ecf117d 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -10,7 +10,7 @@ GLOBAL_VAR_INIT(TAB, "    ") GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) -GLOBAL_VAR_INIT(CELLRATE, 0.002) // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) +GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) GLOBAL_LIST_EMPTY(powernets) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index ae66b9c131..f98de83c23 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -40,7 +40,7 @@ */ /atom/Click(location,control,params) if(flags_1 & INITIALIZED_1) - SendSignal(COMSIG_CLICK, location, control, params) + SEND_SIGNAL(src, COMSIG_CLICK, location, control, params) usr.ClickOn(src, params) /atom/DblClick(location,control,params) @@ -57,7 +57,7 @@ After that, mostly just check your state, check whether you're holding an item, check whether you're adjacent to the target, then pass off the click to whoever - is recieving it. + is receiving it. The most common are: * mob/UnarmedAttack(atom,adjacent) - used here only when adjacent, with no item in hand; in the case of humans, checks gloves * atom/attackby(item,user) - used only when adjacent @@ -129,7 +129,7 @@ //These are always reachable. //User itself, current loc, and user inventory - if(DirectAccess(A)) + if(A in DirectAccess()) if(W) W.melee_attack_chain(src, A, params) else @@ -174,40 +174,52 @@ return TRUE return FALSE -/atom/movable/proc/CanReach(atom/target,obj/item/tool,view_only = FALSE) - if(isturf(target) || isturf(target.loc) || DirectAccess(target)) //Directly accessible atoms - if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks - return TRUE - else - //Things inside storage insde another storage - //Eg Contents of a box in a backpack - var/atom/outer_storage = get_atom_on_turf(target) - if(outer_storage == target) //whatever that is we don't want infinite loop. - return FALSE - if(outer_storage && CanReach(outer_storage,tool) && outer_storage.CanReachStorage(target,src,view_only ? STORAGE_VIEW_DEPTH : INVENTORY_DEPTH)) - return TRUE +/atom/movable/proc/CanReach(atom/ultimate_target, obj/item/tool, view_only = FALSE) + // A backwards depth-limited breadth-first-search to see if the target is + // logically "in" anything adjacent to us. + var/list/direct_access = DirectAccess() + var/depth = 1 + (view_only ? STORAGE_VIEW_DEPTH : INVENTORY_DEPTH) + + var/list/closed = list() + var/list/checking = list(ultimate_target) + while (checking.len && depth > 0) + var/list/next = list() + --depth + + for(var/atom/target in checking) // will filter out nulls + if(closed[target] || isarea(target)) // avoid infinity situations + continue + closed[target] = TRUE + if(isturf(target) || isturf(target.loc) || (target in direct_access)) //Directly accessible atoms + if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks + return TRUE + + if (!target.loc) + continue + GET_COMPONENT_FROM(storage, /datum/component/storage, target.loc) + if (storage) + var/datum/component/storage/concrete/master = storage.master() + if (master) + next += master.parent + for(var/S in master.slaves) + var/datum/component/storage/slave = S + next += slave.parent + else + next += target.loc + else + next += target.loc + + checking = next return FALSE -//Can [target] in this container be reached by [user], can't be more than [depth] levels deep -/atom/proc/CanReachStorage(atom/target,user,depth) - return FALSE - -/obj/item/storage/CanReachStorage(atom/target,user,depth) - while(target && depth > 0) - target = target.loc - depth-- - if(target == src) - return TRUE - return FALSE - -/atom/movable/proc/DirectAccess(atom/target) - return (target == src || target == loc) +/atom/movable/proc/DirectAccess() + return list(src, loc) /mob/DirectAccess(atom/target) - return (..() || (target in contents)) + return ..() + contents /mob/living/DirectAccess(atom/target) - return (..() || (target in GetAllContents())) + return ..() + GetAllContents() /atom/proc/AllowClick() return FALSE @@ -309,7 +321,7 @@ A.ShiftClick(src) return /atom/proc/ShiftClick(mob/user) - SendSignal(COMSIG_CLICK_SHIFT, user) + SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user) if(user.client && user.client.eye == user || user.client.eye == user.loc) user.examinate(src) return @@ -324,7 +336,7 @@ return /atom/proc/CtrlClick(mob/user) - SendSignal(COMSIG_CLICK_CTRL, user) + SEND_SIGNAL(src, COMSIG_CLICK_CTRL, user) var/mob/living/ML = user if(istype(ML)) ML.pulled(src) @@ -356,7 +368,7 @@ ..() /atom/proc/AltClick(mob/user) - SendSignal(COMSIG_CLICK_ALT, user) + SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) var/turf/T = get_turf(src) if(T && user.TurfAdjacent(T)) if(user.listed_turf == T) @@ -381,7 +393,7 @@ return /atom/proc/CtrlShiftClick(mob/user) - SendSignal(COMSIG_CLICK_CTRL_SHIFT) + SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT) return /* diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 36b363db56..006207c3f3 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -101,7 +101,7 @@ /mob/living/silicon/robot/AltClickOn(atom/A) A.BorgAltClick(src) -/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden +/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden CtrlShiftClick(user) /obj/machinery/door/airlock/BorgCtrlShiftClick(mob/living/silicon/robot/user) // Sets/Unsets Emergency Access Override Forwards to AI code. @@ -111,7 +111,7 @@ ..() -/atom/proc/BorgShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden +/atom/proc/BorgShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden ShiftClick(user) /obj/machinery/door/airlock/BorgShiftClick(mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code. @@ -121,7 +121,7 @@ ..() -/atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) //forward to human click if not overriden +/atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) //forward to human click if not overridden CtrlClick(user) /obj/machinery/door/airlock/BorgCtrlClick(mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 97924be2d4..2f97401af7 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -2,13 +2,13 @@ MouseDrop: Called on the atom you're dragging. In a lot of circumstances we want to use the - recieving object instead, so that's the default action. This allows you to drag + receiving object instead, so that's the default action. This allows you to drag almost anything into a trash can. */ /atom/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) if(!usr || !over) return - if(SendSignal(COMSIG_MOUSEDROP_ONTO, over, usr) & COMPONENT_NO_MOUSEDROP) //Whatever is recieving will verify themselves for adjacency. + if(SEND_SIGNAL(src, COMSIG_MOUSEDROP_ONTO, over, usr) & COMPONENT_NO_MOUSEDROP) //Whatever is receiving will verify themselves for adjacency. return if(over == src) return usr.client.Click(src, src_location, src_control, params) @@ -18,9 +18,9 @@ over.MouseDrop_T(src,usr) return -// recieve a mousedrop +// receive a mousedrop /atom/proc/MouseDrop_T(atom/dropping, mob/user) - SendSignal(COMSIG_MOUSEDROPPED_ONTO, dropping, user) + SEND_SIGNAL(src, COMSIG_MOUSEDROPPED_ONTO, dropping, user) return @@ -140,4 +140,4 @@ if (middragatom == src_object) middragtime = 0 middragatom = null - ..() + ..() \ No newline at end of file diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 47cb76a978..4ae61169b7 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -138,7 +138,7 @@ /datum/hud/proc/get_action_buttons_icons() . = list() - .["bg_icon"] = ui_style_icon + .["bg_icon"] = ui_style .["bg_state"] = "template" //TODO : Make these fit theme diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 463051c6b4..2bb514d008 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -186,9 +186,9 @@ /datum/hud/ai - ui_style_icon = 'icons/mob/screen_ai.dmi' + ui_style = 'icons/mob/screen_ai.dmi' -/datum/hud/ai/New(mob/owner, ui_style = 'icons/mob/screen_ai.dmi') +/datum/hud/ai/New(mob/owner) ..() var/obj/screen/using diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index bb61f2218d..e7977185f1 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -237,6 +237,16 @@ magboots would let you walk around normally on the floor. Barring those, you can or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state = "weightless" +/obj/screen/alert/highgravity + name = "High Gravity" + desc = "You're getting crushed by high gravity, picking up items and movement will be slowed." + icon_state = "paralysis" + +/obj/screen/alert/veryhighgravity + name = "Crushing Gravity" + desc = "You're getting crushed by high gravity, picking up items and movement will be slowed. You'll also accumulate brute damage!" + icon_state = "paralysis" + /obj/screen/alert/fire name = "On Fire" desc = "You're on fire. Stop, drop and roll to put the fire out or move to a vacuum area." @@ -304,6 +314,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /obj/screen/alert/bloodsense/process() var/atom/blood_target + if(!mob_viewer.mind) + return + var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE) if(!antag) return @@ -588,7 +601,6 @@ so as to remain in compliance with the most up-to-date laws." // Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there /datum/hud/proc/reorganize_alerts() var/list/alerts = mymob.alerts - var/icon_pref if(!hud_shown) for(var/i = 1, i <= alerts.len, i++) mymob.client.screen -= alerts[alerts[i]] @@ -596,9 +608,7 @@ so as to remain in compliance with the most up-to-date laws." for(var/i = 1, i <= alerts.len, i++) var/obj/screen/alert/alert = alerts[alerts[i]] if(alert.icon_state == "template") - if(!icon_pref) - icon_pref = ui_style2icon(mymob.client.prefs.UI_style) - alert.icon = icon_pref + alert.icon = ui_style switch(i) if(1) . = ui_alert1 diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 5a8cff1df0..3b943209d3 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -24,11 +24,10 @@ desc = "Allows you to sense the general direction of your Queen." screen_loc = ui_alien_queen_finder - /datum/hud/alien - ui_style_icon = 'icons/mob/screen_alien.dmi' + ui_style = 'icons/mob/screen_alien.dmi' -/datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner, ui_style = 'icons/mob/screen_alien.dmi') +/datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner) ..() var/obj/screen/using @@ -36,7 +35,7 @@ //equippable shit //hands - build_hand_slots(ui_style) + build_hand_slots() //begin buttons diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 0f044a2bc7..1ce916f61d 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -1,3 +1,6 @@ +/datum/hud/larva + ui_style = 'icons/mob/screen_alien.dmi' + /datum/hud/larva/New(mob/owner) ..() var/obj/screen/using diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm index 729de9da4a..d4f6b90ca6 100644 --- a/code/_onclick/hud/constructs.dm +++ b/code/_onclick/hud/constructs.dm @@ -1,11 +1,10 @@ - /datum/hud/constructs - ui_style_icon = 'icons/mob/screen_construct.dmi' + ui_style = 'icons/mob/screen_construct.dmi' /datum/hud/constructs/New(mob/owner) ..() pull_icon = new /obj/screen/pull() - pull_icon.icon = 'icons/mob/screen_construct.dmi' + pull_icon.icon = ui_style pull_icon.update_icon(mymob) pull_icon.screen_loc = ui_construct_pull static_inventory += pull_icon diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index 0cd0b6a6a9..b30eeefc1b 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -2,7 +2,7 @@ //Soul counter is stored with the humans, it does weird when you place it here apparently... -/datum/hud/devil/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/devil/New(mob/owner) ..() var/obj/screen/using @@ -17,7 +17,7 @@ pull_icon.screen_loc = ui_drone_pull static_inventory += pull_icon - build_hand_slots(ui_style) + build_hand_slots() using = new /obj/screen/inventory() using.name = "hand" @@ -62,4 +62,4 @@ /mob/living/carbon/true_devil/create_mob_hud() if(client && !hud_used) - hud_used = new /datum/hud/devil(src, ui_style2icon(client.prefs.UI_style)) + hud_used = new /datum/hud/devil(src) diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm index 8e39d96bf6..bcdfa084d3 100644 --- a/code/_onclick/hud/drones.dm +++ b/code/_onclick/hud/drones.dm @@ -1,4 +1,4 @@ -/datum/hud/dextrous/drone/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/dextrous/drone/New(mob/owner) ..() var/obj/screen/inventory/inv_box diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index 39a79b108b..c42714ba7c 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -1,5 +1,5 @@ //Used for normal mobs that have hands. -/datum/hud/dextrous/New(mob/living/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/dextrous/New(mob/living/owner) ..() var/obj/screen/using @@ -14,7 +14,7 @@ pull_icon.screen_loc = ui_drone_pull static_inventory += pull_icon - build_hand_slots(ui_style) + build_hand_slots() using = new /obj/screen/swap_hand() using.icon = ui_style @@ -78,6 +78,6 @@ /mob/living/simple_animal/create_mob_hud() if(client && !hud_used) if(dextrous) - hud_used = new dextrous_hud_type(src, ui_style2icon(client.prefs.UI_style)) + hud_used = new dextrous_hud_type(src) else ..() diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 8cff8fe09e..ea78da5952 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -44,7 +44,7 @@ var/mob/dead/observer/G = usr G.register_pai() -/datum/hud/ghost/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/ghost/New(mob/owner) ..() var/obj/screen/using @@ -90,4 +90,4 @@ /mob/dead/observer/create_mob_hud() if(client && !hud_used) - hud_used = new /datum/hud/ghost(src, ui_style2icon(client.prefs.UI_style)) + hud_used = new /datum/hud/ghost(src) diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index 628efbffe5..687d47c017 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -32,9 +32,9 @@ if(dextrous) ..() else - hud_used = new /datum/hud/guardian(src, ui_style2icon(client.prefs.UI_style)) + hud_used = new /datum/hud/guardian(src) -/datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner, ui_style = 'icons/mob/screen_midnight.dmi') //for a dextrous guardian +/datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian ..() var/obj/screen/using if(istype(owner, /mob/living/simple_animal/hostile/guardian/dextrous)) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 5678b14484..b5b42e06e1 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -4,6 +4,19 @@ including inventories and item quick actions. */ +// The default UI style is the first one in the list +GLOBAL_LIST_INIT(available_ui_styles, list( + "Midnight" = 'icons/mob/screen_midnight.dmi', + "Retro" = 'icons/mob/screen_retro.dmi', + "Plasmafire" = 'icons/mob/screen_plasmafire.dmi', + "Slimecore" = 'icons/mob/screen_slimecore.dmi', + "Operative" = 'icons/mob/screen_operative.dmi', + "Clockwork" = 'icons/mob/screen_clockwork.dmi' +)) + +/proc/ui_style2icon(ui_style) + return GLOB.available_ui_styles[ui_style] || GLOB.available_ui_styles[GLOB.available_ui_styles[1]] + /datum/hud var/mob/mymob @@ -45,12 +58,15 @@ var/obj/screen/internals var/obj/screen/mood - var/ui_style_icon = 'icons/mob/screen_midnight.dmi' + // subtypes can override this to force a specific UI style + var/ui_style -/datum/hud/New(mob/owner , ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/New(mob/owner) mymob = owner - ui_style_icon = ui_style + if (!ui_style) + // will fall back to the default if any of these are null + ui_style = ui_style2icon(owner.client && owner.client.prefs && owner.client.prefs.UI_style) hide_actions_toggle = new hide_actions_toggle.InitialiseIcon(src) @@ -68,38 +84,19 @@ if(mymob.hud_used == src) mymob.hud_used = null - qdel(hide_actions_toggle) - hide_actions_toggle = null - - qdel(module_store_icon) - module_store_icon = null - - if(static_inventory.len) - for(var/thing in static_inventory) - qdel(thing) - static_inventory.Cut() + QDEL_NULL(hide_actions_toggle) + QDEL_NULL(module_store_icon) + QDEL_LIST(static_inventory) inv_slots.Cut() action_intent = null zone_select = null pull_icon = null - if(toggleable_inventory.len) - for(var/thing in toggleable_inventory) - qdel(thing) - toggleable_inventory.Cut() - - if(hotkeybuttons.len) - for(var/thing in hotkeybuttons) - qdel(thing) - hotkeybuttons.Cut() - + QDEL_LIST(toggleable_inventory) + QDEL_LIST(hotkeybuttons) throw_icon = null - - if(infodisplay.len) - for(var/thing in infodisplay) - qdel(thing) - infodisplay.Cut() + QDEL_LIST(infodisplay) healths = null healthdoll = null @@ -112,15 +109,8 @@ alien_plasma_display = null alien_queen_finder = null - if(plane_masters.len) - for(var/thing in plane_masters) - qdel(plane_masters[thing]) - plane_masters.Cut() - - if(screenoverlays.len) - for(var/thing in screenoverlays) - qdel(thing) - screenoverlays.Cut() + QDEL_LIST_ASSOC_VAL(plane_masters) + QDEL_LIST(screenoverlays) mymob = null return ..() @@ -239,6 +229,19 @@ if(!mymob) return +/datum/hud/proc/update_ui_style(new_ui_style) + // do nothing if overridden by a subtype or already on that style + if (initial(ui_style) || ui_style == new_ui_style) + return + + for(var/atom/item in static_inventory + toggleable_inventory + hotkeybuttons + infodisplay + screenoverlays + inv_slots) + if (item.icon == ui_style) + item.icon = new_ui_style + + ui_style = new_ui_style + build_hand_slots() + hide_actions_toggle.InitialiseIcon(src) + //Triggered when F12 is pressed (Unless someone changed something in the DMF) /mob/verb/button_pressed_F12() set name = "F12" @@ -254,7 +257,7 @@ //(re)builds the hand ui slots, throwing away old ones //not really worth jugglying existing ones so we just scrap+rebuild //9/10 this is only called once per mob and only for 2 hands -/datum/hud/proc/build_hand_slots(ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/proc/build_hand_slots() for(var/h in hand_slots) var/obj/screen/inventory/hand/H = hand_slots[h] if(H) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 2ac0f14f95..fdb209d0bc 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -82,10 +82,10 @@ /mob/living/carbon/human/create_mob_hud() if(client && !hud_used) - hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style)) + hud_used = new /datum/hud/human(src) -/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/human/New(mob/living/carbon/human/owner) ..() owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) @@ -152,7 +152,7 @@ inv_box.screen_loc = ui_oclothing toggleable_inventory += inv_box - build_hand_slots(ui_style) + build_hand_slots() using = new /obj/screen/swap_hand() using.icon = ui_style diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index c469c1ef20..479fd59dae 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -1,4 +1,4 @@ -/datum/hud/monkey/New(mob/living/carbon/monkey/owner, ui_style = 'icons/mob/screen_midnight.dmi') +/datum/hud/monkey/New(mob/living/carbon/monkey/owner) ..() var/obj/screen/using var/obj/screen/inventory/inv_box @@ -24,7 +24,7 @@ using.screen_loc = ui_drop_throw static_inventory += using - build_hand_slots(ui_style) + build_hand_slots() using = new /obj/screen/swap_hand() using.icon = ui_style @@ -152,4 +152,4 @@ /mob/living/carbon/monkey/create_mob_hud() if(client && !hud_used) - hud_used = new /datum/hud/monkey(src, ui_style2icon(client.prefs.UI_style)) + hud_used = new /datum/hud/monkey(src) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 769cdb2244..7cc51fade1 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -89,9 +89,9 @@ R.toggle_ionpulse() /datum/hud/robot - ui_style_icon = 'icons/mob/screen_cyborg.dmi' + ui_style = 'icons/mob/screen_cyborg.dmi' -/datum/hud/robot/New(mob/owner, ui_style = 'icons/mob/screen_cyborg.dmi') +/datum/hud/robot/New(mob/owner) ..() var/mob/living/silicon/robot/mymobR = mymob var/obj/screen/using diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index b48d86ec0e..df0935d8ab 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -17,17 +17,18 @@ // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user) - SendSignal(COMSIG_ITEM_ATTACK_SELF, user) + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) & COMPONENT_NO_INTERACT) + return interact(user) /obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby! - if(SendSignal(COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK) + if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK) return FALSE return TRUE //return FALSE to avoid calling attackby after this proc does stuff // No comment /atom/proc/attackby(obj/item/W, mob/user, params) - if(SendSignal(COMSIG_PARENT_ATTACKBY, W, user, params) & COMPONENT_NO_AFTERATTACK) + if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, params) & COMPONENT_NO_AFTERATTACK) return TRUE return FALSE @@ -52,8 +53,8 @@ /obj/item/proc/attack(mob/living/M, mob/living/user) - SendSignal(COMSIG_ITEM_ATTACK, M, user) - if(flags_1 & NOBLUDGEON_1) + SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) + if(item_flags & NOBLUDGEON) return if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) // CIT CHANGE - makes it impossible to attack in stamina softcrit @@ -82,9 +83,9 @@ //the equivalent of the standard version of attack() but for object targets. /obj/item/proc/attack_obj(obj/O, mob/living/user) - if(SendSignal(COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) return - if(flags_1 & NOBLUDGEON_1) + if(item_flags & NOBLUDGEON) return if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) // CIT CHANGE - makes it impossible to attack in stamina softcrit to_chat(user, "You're too exhausted.") // CIT CHANGE - ditto diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index e7ec2255ae..63e1a14aa6 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -48,7 +48,7 @@ // Oh by the way this didn't work with old click code which is why clicking shit didn't spam you /atom/proc/attack_ghost(mob/dead/observer/user) - if(SendSignal(COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_NO_ATTACK_HAND) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_NO_ATTACK_HAND) return TRUE if(user.client) if(IsAdminGhost(user)) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 2c1c60c6e4..26823133f3 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -25,7 +25,7 @@ if(override) return - SendSignal(COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A) + SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A) A.attack_hand(src) //Return TRUE to cancel other attack hand effects that respect it. @@ -33,7 +33,7 @@ . = FALSE if(!(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND)) add_fingerprint(user) - if(SendSignal(COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_NO_ATTACK_HAND) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_NO_ATTACK_HAND) . = TRUE if(interaction_flags_atom & INTERACT_ATOM_ATTACK_HAND) . = _try_interact(user) @@ -111,7 +111,7 @@ A.attack_paw(src) /atom/proc/attack_paw(mob/user) - if(SendSignal(COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND) return TRUE return FALSE diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 18f1c61d94..85e7958b53 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -70,7 +70,7 @@ desc = "Magic" icon = 'icons/obj/magic.dmi'//Needs sprites icon_state = "2" - flags_1 = NOBLUDGEON_1 | ABSTRACT_1 | DROPDEL_1 + item_flags = NOBLUDGEON | ABSTRACT | DROPDEL //item_state = null w_class = WEIGHT_CLASS_GIGANTIC layer = ABOVE_HUD_LAYER diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 24bf518a03..c683f55c59 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -10,6 +10,8 @@ var/resident_file //the file which this was loaded from, if any var/modified = FALSE //set to TRUE if the default has been overridden by a config entry + var/deprecated_by //the /datum/config_entry type that supercedes this one + var/protection = NONE var/abstract_type = /datum/config_entry //do not instantiate if type matches this @@ -85,6 +87,9 @@ /datum/config_entry/proc/ValidateListEntry(key_name, key_value) return TRUE +/datum/config_entry/proc/DeprecationUpdate(value) + return + /datum/config_entry/string config_entry_value = "" abstract_type = /datum/config_entry/string diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 25b3a46fa0..5c22fc320f 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -3,6 +3,7 @@ var/directory = "config" + var/warned_deprecated_configs = FALSE var/hiding_entries_by_type = TRUE //Set for readability, admins can set this to FALSE if they want to debug it var/list/entries var/list/entries_by_type @@ -123,11 +124,26 @@ if(lockthis) E.protection |= CONFIG_ENTRY_LOCKED + if(E.deprecated_by) + var/datum/config_entry/new_ver = entries_by_type[E.deprecated_by] + var/new_value = E.DeprecationUpdate(value) + var/good_update = istext(new_value) + log_config("Entry [entry] is deprecated and will be removed soon. Migrate to [new_ver.name]![good_update ? " Suggested new value is: [new_value]" : ""]") + if(!warned_deprecated_configs) + addtimer(CALLBACK(GLOBAL_PROC, /proc/message_admins, "This server is using deprecated configuration settings. Please check the logs and update accordingly."), 0) + warned_deprecated_configs = TRUE + if(good_update) + value = new_value + E = new_ver + else + warning("[new_ver.type] is deprecated but gave no proper return for DeprecationUpdate()") + var/validated = E.ValidateAndSet(value) if(!validated) log_config("Failed to validate setting \"[value]\" for [entry]") - else if(E.modified && !E.dupes_allowed) - log_config("Duplicate setting for [entry] ([value], [E.resident_file]) detected! Using latest.") + else + if(E.modified && !E.dupes_allowed) + log_config("Duplicate setting for [entry] ([value], [E.resident_file]) detected! Using latest.") E.resident_file = filename diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index ebf27324b9..88ce13db92 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -134,7 +134,7 @@ /datum/config_entry/flag/no_summon_events //Allowed -/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes. +/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes. /datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station config_entry_value = 55 @@ -170,8 +170,6 @@ config_entry_value = -1 min_val = -1 -/datum/config_entry/flag/rename_cyborg - /datum/config_entry/flag/ooc_during_round /datum/config_entry/flag/emojis diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 99644ce88f..1d41e9a765 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -55,6 +55,8 @@ /datum/config_entry/flag/log_manifest // log crew manifest to seperate file +/datum/config_entry/flag/log_job_debug // log roundstart divide occupations debug information to a file + /datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour /datum/config_entry/flag/allow_vote_restart // allow votes to restart diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index f25244a6b1..446ee721ed 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -20,10 +20,22 @@ SUBSYSTEM_DEF(blackbox) record_feedback("amount", "random_seed", Master.random_seed) record_feedback("amount", "dm_version", DM_VERSION) record_feedback("amount", "byond_version", world.byond_version) + record_feedback("amount", "byond_build", world.byond_build) . = ..() //poll population /datum/controller/subsystem/blackbox/fire() + set waitfor = FALSE //for population query + + CheckPlayerCount() + + if(CONFIG_GET(flag/use_exp_tracking)) + if((triggertime < 0) || (world.time > (triggertime +3000))) //subsystem fires once at roundstart then once every 10 minutes. a 5 min check skips the first fire. The <0 is midnight rollover check + update_exp(10,FALSE) + +/datum/controller/subsystem/blackbox/proc/CheckPlayerCount() + set waitfor = FALSE + if(!SSdbcore.Connect()) return var/playercount = 0 @@ -33,11 +45,7 @@ SUBSYSTEM_DEF(blackbox) var/admincount = GLOB.admins.len var/datum/DBQuery/query_record_playercount = SSdbcore.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_ip, server_port, round_id) VALUES ([playercount], [admincount], '[SQLtime()]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]')") query_record_playercount.Execute() - - if(CONFIG_GET(flag/use_exp_tracking)) - if((triggertime < 0) || (world.time > (triggertime +3000))) //subsystem fires once at roundstart then once every 10 minutes. a 5 min check skips the first fire. The <0 is midnight rollover check - update_exp(10,FALSE) - + qdel(query_record_playercount) /datum/controller/subsystem/blackbox/Recover() feedback = SSblackbox.feedback @@ -144,7 +152,7 @@ feedback data can be recorded in 5 formats: SSblackbox.record_feedback("text", "example", 1, "other text") json: {"data":["sample text","other text"]} "amount" - used to record simple counts of data i.e. the number of ahelps recieved + used to record simple counts of data i.e. the number of ahelps received further calls to the same key will add or subtract (if increment argument is a negative) from the saved amount calls: SSblackbox.record_feedback("amount", "example", 8) SSblackbox.record_feedback("amount", "example", 2) @@ -255,6 +263,7 @@ Versioning key_type = new_key_type /datum/controller/subsystem/blackbox/proc/ReportDeath(mob/living/L) + set waitfor = FALSE if(sealed) return if(!L || !L.key || !L.mind) @@ -267,28 +276,50 @@ Versioning first_death["area"] = "[AREACOORD(L)]" first_death["damage"] = "[L.getBruteLoss()]/[L.getFireLoss()]/[L.getToxLoss()]/[L.getOxyLoss()]/[L.getCloneLoss()]" first_death["last_words"] = L.last_words + var/sqlname = L.real_name + var/sqlkey = L.ckey + var/sqljob = L.mind.assigned_role + var/sqlspecial = L.mind.special_role + var/sqlpod = get_area_name(L, TRUE) + var/laname = L.lastattacker + var/lakey = L.lastattackerckey + var/sqlbrute = L.getBruteLoss() + var/sqlfire = L.getFireLoss() + var/sqlbrain = L.getBrainLoss() + var/sqloxy = L.getOxyLoss() + var/sqltox = L.getToxLoss() + var/sqlclone = L.getCloneLoss() + var/sqlstamina = L.getStaminaLoss() + var/x_coord = L.x + var/y_coord = L.y + var/z_coord = L.z + var/last_words = L.last_words + var/suicide = L.suiciding + var/map = SSmapping.config.map_name + if(!SSdbcore.Connect()) return - var/area/placeofdeath = get_area(L) - var/sqlname = sanitizeSQL(L.real_name) - var/sqlkey = sanitizeSQL(L.ckey) - var/sqljob = sanitizeSQL(L.mind.assigned_role) - var/sqlspecial = sanitizeSQL(L.mind.special_role) - var/sqlpod = sanitizeSQL(placeofdeath.name) - var/laname = sanitizeSQL(L.lastattacker) - var/lakey = sanitizeSQL(L.lastattackerckey) - var/sqlbrute = sanitizeSQL(L.getBruteLoss()) - var/sqlfire = sanitizeSQL(L.getFireLoss()) - var/sqlbrain = sanitizeSQL(L.getBrainLoss()) - var/sqloxy = sanitizeSQL(L.getOxyLoss()) - var/sqltox = sanitizeSQL(L.getToxLoss()) - var/sqlclone = sanitizeSQL(L.getCloneLoss()) - var/sqlstamina = sanitizeSQL(L.getStaminaLoss()) - var/x_coord = sanitizeSQL(L.x) - var/y_coord = sanitizeSQL(L.y) - var/z_coord = sanitizeSQL(L.z) - var/last_words = sanitizeSQL(L.last_words) - var/suicide = sanitizeSQL(L.suiciding) - var/map = sanitizeSQL(SSmapping.config.map_name) + + sqlname = sanitizeSQL(sqlname) + sqlkey = sanitizeSQL(sqlkey) + sqljob = sanitizeSQL(sqljob) + sqlspecial = sanitizeSQL(sqlspecial) + sqlpod = sanitizeSQL(sqlpod) + laname = sanitizeSQL(laname) + lakey = sanitizeSQL(lakey) + sqlbrute = sanitizeSQL(sqlbrute) + sqlfire = sanitizeSQL(sqlfire) + sqlbrain = sanitizeSQL(sqlbrain) + sqloxy = sanitizeSQL(sqloxy) + sqltox = sanitizeSQL(sqltox) + sqlclone = sanitizeSQL(sqlclone) + sqlstamina = sanitizeSQL(sqlstamina) + x_coord = sanitizeSQL(x_coord) + y_coord = sanitizeSQL(y_coord) + z_coord = sanitizeSQL(z_coord) + last_words = sanitizeSQL(last_words) + suicide = sanitizeSQL(suicide) + map = sanitizeSQL(map) var/datum/DBQuery/query_report_death = SSdbcore.NewQuery("INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, last_words, suicide) VALUES ('[sqlpod]', '[x_coord]', '[y_coord]', '[z_coord]', '[map]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', [GLOB.round_id], '[SQLtime()]', '[sqljob]', '[sqlspecial]', '[sqlname]', '[sqlkey]', '[laname]', '[lakey]', [sqlbrute], [sqlfire], [sqlbrain], [sqloxy], [sqltox], [sqlclone], [sqlstamina], '[last_words]', [suicide])") - query_report_death.Execute() \ No newline at end of file + query_report_death.Execute() + qdel(query_report_death) diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 0e1f1fb8fd..34bf57594d 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -1,6 +1,7 @@ SUBSYSTEM_DEF(dbcore) name = "Database" - flags = SS_NO_FIRE + flags = SS_BACKGROUND + wait = 1 MINUTES init_order = INIT_ORDER_DBCORE var/const/FAILED_DB_CONNECTION_CUTOFF = 5 @@ -25,6 +26,8 @@ SUBSYSTEM_DEF(dbcore) var/_db_con// This variable contains a reference to the actual database connection. var/failed_connections = 0 + var/list/active_queries = list() + /datum/controller/subsystem/dbcore/PreInit() if(!_db_con) _db_con = _dm_db_new_con() @@ -40,6 +43,15 @@ SUBSYSTEM_DEF(dbcore) return ..() +/datum/controller/subsystem/dbcore/fire() + for(var/I in active_queries) + var/datum/DBQuery/Q = I + if(world.time - Q.last_activity_time > (5 MINUTES)) + message_admins("Found undeleted query, please check the server logs and notify coders.") + log_sql("Undeleted query: \"[Q.sql]\" LA: [Q.last_activity] LAT: [Q.last_activity_time]") + qdel(Q) + if(MC_TICK_CHECK) + return /datum/controller/subsystem/dbcore/Recover() _db_con = SSdbcore._db_con @@ -49,12 +61,13 @@ SUBSYSTEM_DEF(dbcore) if(SSdbcore.Connect()) var/datum/DBQuery/query_round_shutdown = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shutdown_datetime = Now(), end_state = '[sanitizeSQL(SSticker.end_state)]' WHERE id = [GLOB.round_id]") query_round_shutdown.Execute() + qdel(query_round_shutdown) if(IsConnected()) Disconnect() //nu /datum/controller/subsystem/dbcore/can_vv_get(var_name) - return var_name != "_db_con" && ..() + return var_name != NAMEOF(src, _db_con) && var_name != NAMEOF(src, active_queries) && ..() /datum/controller/subsystem/dbcore/vv_edit_var(var_name, var_value) if(var_name == "_db_con") @@ -98,33 +111,38 @@ SUBSYSTEM_DEF(dbcore) else schema_mismatch = 2 //flag admin message about no schema version log_sql("Could not get schema version from database") + qdel(query_db_version) else log_sql("Your server failed to establish a connection with the database.") else log_sql("Database is not enabled in configuration.") /datum/controller/subsystem/dbcore/proc/SetRoundID() - if(CONFIG_GET(flag/sql_enabled)) - if(SSdbcore.Connect()) - var/datum/DBQuery/query_round_initialize = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (initialize_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") - query_round_initialize.Execute() - var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") - query_round_last_id.Execute() - if(query_round_last_id.NextRow()) - GLOB.round_id = query_round_last_id.item[1] + if(!Connect()) + return + var/datum/DBQuery/query_round_initialize = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (initialize_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") + query_round_initialize.Execute() + qdel(query_round_initialize) + var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") + query_round_last_id.Execute() + if(query_round_last_id.NextRow()) + GLOB.round_id = query_round_last_id.item[1] + qdel(query_round_last_id) /datum/controller/subsystem/dbcore/proc/SetRoundStart() - if(CONFIG_GET(flag/sql_enabled)) - if(SSdbcore.Connect()) - var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET start_datetime = Now() WHERE id = [GLOB.round_id]") - query_round_start.Execute() + if(!Connect()) + return + var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET start_datetime = Now() WHERE id = [GLOB.round_id]") + query_round_start.Execute() + qdel(query_round_start) /datum/controller/subsystem/dbcore/proc/SetRoundEnd() - if(CONFIG_GET(flag/sql_enabled)) - if(SSdbcore.Connect()) - var/sql_station_name = sanitizeSQL(station_name()) - var/datum/DBQuery/query_round_end = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET end_datetime = Now(), game_mode_result = '[sanitizeSQL(SSticker.mode_result)]', station_name = '[sql_station_name]' WHERE id = [GLOB.round_id]") - query_round_end.Execute() + if(!Connect()) + return + var/sql_station_name = sanitizeSQL(station_name()) + var/datum/DBQuery/query_round_end = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET end_datetime = Now(), game_mode_result = '[sanitizeSQL(SSticker.mode_result)]', station_name = '[sql_station_name]' WHERE id = [GLOB.round_id]") + query_round_end.Execute() + qdel(query_round_end) /datum/controller/subsystem/dbcore/proc/Disconnect() failed_connections = 0 @@ -212,9 +230,10 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table sqlrowlist = " [sqlrowlist.Join(",\n ")]" var/datum/DBQuery/Query = NewQuery("INSERT[delayed][ignore_errors] INTO [table]\n([columns.Join(", ")])\nVALUES\n[sqlrowlist]\n[duplicate_key]") if (warn) - return Query.warn_execute() + . = Query.warn_execute() else - return Query.Execute() + . = Query.Execute() + qdel(Query) /datum/DBQuery @@ -223,11 +242,14 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table var/list/columns //list of DB Columns populated by Columns() var/list/conversions var/list/item //list of data values populated by NextRow() - + var/last_activity + var/last_activity_time var/datum/controller/subsystem/dbcore/db_connection var/_db_query /datum/DBQuery/New(sql_query, datum/controller/subsystem/dbcore/connection_handler, cursor_handler) + SSdbcore.active_queries[src] = TRUE + Activity("Created") if(sql_query) sql = sql_query if(connection_handler) @@ -237,12 +259,31 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table item = list() _db_query = _dm_db_new_query() +/datum/DBQuery/Destroy() + Close() + SSdbcore.active_queries -= src + return ..() + +/datum/DBQuery/CanProcCall(proc_name) + //fuck off kevinz + return FALSE + +/datum/DBQuery/proc/Activity(activity) + last_activity = activity + last_activity_time = world.time + /datum/DBQuery/proc/warn_execute() . = Execute() if(!.) to_chat(usr, "A SQL error occurred during this operation, check the server logs.") +/datum/DBQuery/proc/SetQuery(new_sql) + Activity("SetQuery") + Close() + sql = new_sql + /datum/DBQuery/proc/Execute(sql_query = sql, cursor_handler = default_cursor, log_error = TRUE) + Activity("Execute") var/start_time var/timeout = CONFIG_GET(number/query_debug_log_timeout) if(timeout) @@ -263,6 +304,7 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table message_admins("HEY! A database query may have timed out. Did the server just hang? \[YES\]|\[NO\]") /datum/DBQuery/proc/NextRow() + Activity("NextRow") return _dm_db_next_row(_db_query,item,conversions) /datum/DBQuery/proc/RowsAffected() diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm new file mode 100644 index 0000000000..c1e101a0e7 --- /dev/null +++ b/code/controllers/subsystem/dcs.dm @@ -0,0 +1,6 @@ +SUBSYSTEM_DEF(dcs) + name = "Datum Component System" + flags = SS_NO_INIT | SS_NO_FIRE + +/datum/controller/subsystem/dcs/Recover() + comp_lookup = SSdcs.comp_lookup diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index e70fd1cd7d..ffc934c061 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -93,25 +93,6 @@ SUBSYSTEM_DEF(events) else if(. == EVENT_READY) E.runEvent(TRUE) -/datum/round_event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! - var/list/safe_areas = list( - /area/ai_monitored/turret_protected/ai, - /area/ai_monitored/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle - ) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/crew_quarters/heads/chief) - - //Need to locate() as it's just a list of paths. - return locate(pick((GLOB.the_station_areas - safe_areas) + danger_areas)) in GLOB.sortedAreas - - //allows a client to trigger an event //aka Badmin Central // > Not in modules/admin diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index f276da972c..15a668b038 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -293,13 +293,13 @@ SUBSYSTEM_DEF(garbage) if(isnull(D.gc_destroyed)) - if (D.SendSignal(COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted + if (SEND_SIGNAL(D, COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted return D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/start_tick = world.tick_usage var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - D.SendSignal(COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy + SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy if(world.time != start_time) I.slept_destroy++ else diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index f72b7d1d6a..744845e6ed 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -7,7 +7,6 @@ SUBSYSTEM_DEF(job) var/list/name_occupations = list() //Dict of all jobs, keys are titles var/list/type_occupations = list() //Dict of all jobs, keys are types var/list/unassigned = list() //Players who need jobs - var/list/job_debug = list() //Debug info var/initial_players_to_assign = 0 //used for checking against population caps var/list/prioritized_jobs = list() @@ -36,6 +35,7 @@ SUBSYSTEM_DEF(job) old_overflow.spawn_positions = initial(old_overflow.spawn_positions) old_overflow.total_positions = initial(old_overflow.total_positions) overflow_role = new_overflow_role + JobDebug("Overflow role set to : [new_overflow_role]") /datum/controller/subsystem/job/proc/SetupOccupations(faction = "Station") occupations = list() @@ -62,13 +62,6 @@ SUBSYSTEM_DEF(job) return 1 -/datum/controller/subsystem/job/proc/Debug(text) - if(!GLOB.Debug2) - return 0 - job_debug.Add(text) - return 1 - - /datum/controller/subsystem/job/proc/GetJob(rank) if(!occupations.len) SetupOccupations() @@ -80,12 +73,12 @@ SUBSYSTEM_DEF(job) return type_occupations[jobtype] /datum/controller/subsystem/job/proc/AssignRole(mob/dead/new_player/player, rank, latejoin = FALSE) - Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]") + JobDebug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]") if(player && player.mind && rank) var/datum/job/job = GetJob(rank) if(!job) return FALSE - if(jobban_isbanned(player, rank)) + if(jobban_isbanned(player, rank) || QDELETED(player)) return FALSE if(!job.player_old_enough(player.client)) return FALSE @@ -94,41 +87,41 @@ SUBSYSTEM_DEF(job) var/position_limit = job.total_positions if(!latejoin) position_limit = job.spawn_positions - Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]") + JobDebug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]") player.mind.assigned_role = rank unassigned -= player job.current_positions++ return TRUE - Debug("AR has failed, Player: [player], Rank: [rank]") + JobDebug("AR has failed, Player: [player], Rank: [rank]") return FALSE /datum/controller/subsystem/job/proc/FindOccupationCandidates(datum/job/job, level, flag) - Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]") + JobDebug("Running FOC, Job: [job], Level: [level], Flag: [flag]") var/list/candidates = list() for(var/mob/dead/new_player/player in unassigned) - if(jobban_isbanned(player, job.title)) - Debug("FOC isbanned failed, Player: [player]") + if(jobban_isbanned(player, job.title) || QDELETED(player)) + JobDebug("FOC isbanned failed, Player: [player]") continue if(!job.player_old_enough(player.client)) - Debug("FOC player not old enough, Player: [player]") + JobDebug("FOC player not old enough, Player: [player]") continue if(job.required_playtime_remaining(player.client)) - Debug("FOC player not enough xp, Player: [player]") + JobDebug("FOC player not enough xp, Player: [player]") continue if(flag && (!(flag in player.client.prefs.be_special))) - Debug("FOC flag failed, Player: [player], Flag: [flag], ") + JobDebug("FOC flag failed, Player: [player], Flag: [flag], ") continue if(player.mind && job.title in player.mind.restricted_roles) - Debug("FOC incompatible with antagonist role, Player: [player]") + JobDebug("FOC incompatible with antagonist role, Player: [player]") continue if(player.client.prefs.GetJobDepartment(job, level) & job.flag) - Debug("FOC pass, Player: [player], Level:[level]") + JobDebug("FOC pass, Player: [player], Level:[level]") candidates += player return candidates /datum/controller/subsystem/job/proc/GiveRandomJob(mob/dead/new_player/player) - Debug("GRJ Giving random job, Player: [player]") + JobDebug("GRJ Giving random job, Player: [player]") . = FALSE for(var/datum/job/job in shuffle(occupations)) if(!job) @@ -140,32 +133,37 @@ SUBSYSTEM_DEF(job) if(job.title in GLOB.command_positions) //If you want a command position, select it! continue - if(jobban_isbanned(player, job.title)) - Debug("GRJ isbanned failed, Player: [player], Job: [job.title]") + if(jobban_isbanned(player, job.title) || QDELETED(player)) + if(QDELETED(player)) + JobDebug("GRJ isbanned failed, Player deleted") + break + JobDebug("GRJ isbanned failed, Player: [player], Job: [job.title]") continue if(!job.player_old_enough(player.client)) - Debug("GRJ player not old enough, Player: [player]") + JobDebug("GRJ player not old enough, Player: [player]") continue if(job.required_playtime_remaining(player.client)) - Debug("GRJ player not enough xp, Player: [player]") + JobDebug("GRJ player not enough xp, Player: [player]") continue if(player.mind && job.title in player.mind.restricted_roles) - Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") + JobDebug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") continue if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) - Debug("GRJ Random job given, Player: [player], Job: [job]") + JobDebug("GRJ Random job given, Player: [player], Job: [job]") if(AssignRole(player, job.title)) return TRUE /datum/controller/subsystem/job/proc/ResetOccupations() + JobDebug("Occupations reset.") for(var/mob/dead/new_player/player in GLOB.player_list) if((player) && (player.mind)) player.mind.assigned_role = null player.mind.special_role = null + SSpersistence.antag_rep_change[player.ckey] = 0 SetupOccupations() unassigned = list() return @@ -231,7 +229,7 @@ SUBSYSTEM_DEF(job) **/ /datum/controller/subsystem/job/proc/DivideOccupations() //Setup new player list and get the jobs list - Debug("Running DO") + JobDebug("Running DO") //Holder for Triumvirate is stored in the SSticker, this just processes it if(SSticker.triai) @@ -247,7 +245,7 @@ SUBSYSTEM_DEF(job) initial_players_to_assign = unassigned.len - Debug("DO, Len: [unassigned.len]") + JobDebug("DO, Len: [unassigned.len]") if(unassigned.len == 0) return 0 @@ -268,28 +266,28 @@ SUBSYSTEM_DEF(job) HandleFeedbackGathering() //People who wants to be the overflow role, sure, go on. - Debug("DO, Running Overflow Check 1") + JobDebug("DO, Running Overflow Check 1") var/datum/job/overflow = GetJob(SSjob.overflow_role) var/list/overflow_candidates = FindOccupationCandidates(overflow, 3) - Debug("AC1, Candidates: [overflow_candidates.len]") + JobDebug("AC1, Candidates: [overflow_candidates.len]") for(var/mob/dead/new_player/player in overflow_candidates) - Debug("AC1 pass, Player: [player]") + JobDebug("AC1 pass, Player: [player]") AssignRole(player, SSjob.overflow_role) overflow_candidates -= player - Debug("DO, AC1 end") + JobDebug("DO, AC1 end") //Select one head - Debug("DO, Running Head Check") + JobDebug("DO, Running Head Check") FillHeadPosition() - Debug("DO, Head Check end") + JobDebug("DO, Head Check end") //Check for an AI - Debug("DO, Running AI Check") + JobDebug("DO, Running AI Check") FillAIPosition() - Debug("DO, AI Check end") + JobDebug("DO, AI Check end") //Other jobs are now checked - Debug("DO, Running Standard Check") + JobDebug("DO, Running Standard Check") // New job giving system by Donkie @@ -313,66 +311,71 @@ SUBSYSTEM_DEF(job) continue if(jobban_isbanned(player, job.title)) - Debug("DO isbanned failed, Player: [player], Job:[job.title]") + JobDebug("DO isbanned failed, Player: [player], Job:[job.title]") continue + if(QDELETED(player)) + JobDebug("DO player deleted during job ban check") + break + if(!job.player_old_enough(player.client)) - Debug("DO player not old enough, Player: [player], Job:[job.title]") + JobDebug("DO player not old enough, Player: [player], Job:[job.title]") continue if(job.required_playtime_remaining(player.client)) - Debug("DO player not enough xp, Player: [player], Job:[job.title]") + JobDebug("DO player not enough xp, Player: [player], Job:[job.title]") continue if(player.mind && job.title in player.mind.restricted_roles) - Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") + JobDebug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") continue // If the player wants that job on this level, then try give it to him. if(player.client.prefs.GetJobDepartment(job, level) & job.flag) - // If the job isn't filled if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) - Debug("DO pass, Player: [player], Level:[level], Job:[job.title]") + JobDebug("DO pass, Player: [player], Level:[level], Job:[job.title]") AssignRole(player, job.title) unassigned -= player break + JobDebug("DO, Handling unassigned.") // Hand out random jobs to the people who didn't get any in the last check // Also makes sure that they got their preference correct for(var/mob/dead/new_player/player in unassigned) - if(PopcapReached()) - RejectPlayer(player) - else if(jobban_isbanned(player, SSjob.overflow_role)) - GiveRandomJob(player) //you get to roll for random before everyone else just to be sure you don't get overflow. you're so speshul - - for(var/mob/dead/new_player/player in unassigned) - if(PopcapReached()) - RejectPlayer(player) - else if(player.client.prefs.joblessrole == BERANDOMJOB) - GiveRandomJob(player) - - Debug("DO, Standard Check end") - - Debug("DO, Running AC2") - - // For those who wanted to be assistant if their preferences were filled, here you go. - for(var/mob/dead/new_player/player in unassigned) - if(PopcapReached()) - RejectPlayer(player) - if(player.client.prefs.joblessrole == BEOVERFLOW) - Debug("AC2 Assistant located, Player: [player]") - AssignRole(player, SSjob.overflow_role) - else // For those who don't want to play if their preference were filled, back you go. - RejectPlayer(player) + HandleUnassigned(player) + JobDebug("DO, Handling unrejectable unassigned") + //Mop up people who can't leave. for(var/mob/dead/new_player/player in unassigned) //Players that wanted to back out but couldn't because they're antags (can you feel the edge case?) if(!GiveRandomJob(player)) AssignRole(player, SSjob.overflow_role) //If everything is already filled, make them an assistant return 1 +//We couldn't find a job from prefs for this guy. +/datum/controller/subsystem/job/proc/HandleUnassigned(mob/dead/new_player/player) + if(PopcapReached()) + RejectPlayer(player) + else if(player.client.prefs.joblessrole == BEOVERFLOW) + var/allowed_to_be_a_loser = !jobban_isbanned(player, SSjob.overflow_role) + if(QDELETED(player) || !allowed_to_be_a_loser) + RejectPlayer(player) + else + if(!AssignRole(player, SSjob.overflow_role)) + RejectPlayer(player) + else if(player.client.prefs.joblessrole == BERANDOMJOB) + if(!GiveRandomJob(player)) + RejectPlayer(player) + else if(player.client.prefs.joblessrole == RETURNTOLOBBY) + RejectPlayer(player) + else //Something gone wrong if we got here. + var/message = "DO: [player] fell through handling unassigned" + JobDebug(message) + log_game(message) + message_admins(message) + RejectPlayer(player) //Gives the player the stuff he should have with his rank /datum/controller/subsystem/job/proc/EquipRank(mob/M, rank, joined_late = FALSE) var/mob/dead/new_player/N @@ -436,11 +439,9 @@ SUBSYSTEM_DEF(job) if(job && H) if(job.dresscodecompliant)// CIT CHANGE - dress code compliance equip_loadout(N, H) // CIT CHANGE - allows players to spawn with loadout items - job.after_spawn(H, M, joined_late) + job.after_spawn(H, M, joined_late) // note: this happens before the mob has a key! M will always have a client, H might not. equip_loadout(N, H, TRUE)//CIT CHANGE - makes players spawn with in-backpack loadout items properly. A little hacky but it works - //handle_roundstart_items(H, M.ckey, H.mind.assigned_role, H.mind.special_role) //CIT CHANGE - makes donators spawn with their items. This can safely be commented out when all of the donator items are migrated to the loadout system - return H @@ -453,7 +454,7 @@ SUBSYSTEM_DEF(job) if(ssc > 0) if(J.spawn_positions > 0) var/officer_positions = min(12, max(J.spawn_positions, round(unassigned.len / ssc))) //Scale between configured minimum and 12 officers - Debug("Setting open security officer positions to [officer_positions]") + JobDebug("Setting open security officer positions to [officer_positions]") J.total_positions = officer_positions J.spawn_positions = officer_positions @@ -489,7 +490,7 @@ SUBSYSTEM_DEF(job) for(var/mob/dead/new_player/player in GLOB.player_list) if(!(player.ready == PLAYER_READY_TO_PLAY && player.mind && !player.mind.assigned_role)) continue //This player is not ready - if(jobban_isbanned(player, job.title)) + if(jobban_isbanned(player, job.title) || QDELETED(player)) banned++ continue if(!job.player_old_enough(player.client)) @@ -525,7 +526,8 @@ SUBSYSTEM_DEF(job) if(player.mind && player.mind.special_role) return if(PopcapReached()) - Debug("Popcap overflow Check observer located, Player: [player]") + JobDebug("Popcap overflow Check observer located, Player: [player]") + JobDebug("Player rejected :[player]") to_chat(player, "You have failed to qualify for any job you desired.") unassigned -= player player.ready = PLAYER_NOT_READY @@ -630,3 +632,6 @@ SUBSYSTEM_DEF(job) for(var/mob/living/carbon/human/player in GLOB.carbon_list) if(player.mind && (player.mind.assigned_role in GLOB.security_positions)) . |= player.mind + +/datum/controller/subsystem/job/proc/JobDebug(message) + log_job_debug(message) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index e2698670e9..89a8df1091 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -49,7 +49,11 @@ SUBSYSTEM_DEF(mapping) if(initialized) return if(config.defaulted) - to_chat(world, "Unable to load next map config, defaulting to Box Station") + var/old_config = config + config = global.config.defaultmap + if(!config || config.defaulted) + to_chat(world, "Unable to load next or default map config, defaulting to Box Station") + config = old_config loader = new loadWorld() repopulate_sorted_areas() @@ -219,6 +223,7 @@ SUBSYSTEM_DEF(mapping) if(SSdbcore.Connect()) var/datum/DBQuery/query_round_map_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET map_name = '[config.map_name]' WHERE id = [GLOB.round_id]") query_round_map_name.Execute() + qdel(query_round_map_name) #ifndef LOWMEMORYMODE // TODO: remove this when the DB is prepared for the z-levels getting reordered diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index 2f3b6c9668..1a7bd43fd2 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -115,38 +115,43 @@ SUBSYSTEM_DEF(overlays) #define NOT_QUEUED_ALREADY (!(flags_1 & OVERLAY_QUEUED_1)) #define QUEUE_FOR_COMPILE flags_1 |= OVERLAY_QUEUED_1; SSoverlays.queue += src; /atom/proc/cut_overlays(priority = FALSE) - var/list/cached_overlays = our_overlays - var/list/cached_priority = priority_overlays + LAZYINITLIST(priority_overlays) + LAZYINITLIST(remove_overlays) + LAZYINITLIST(add_overlays) + remove_overlays = overlays.Copy() + add_overlays.Cut() - var/need_compile = FALSE + if(priority) + priority_overlays.Cut() - if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays - cached_overlays.Cut() //clear regular overlays - need_compile = TRUE - - if(priority && LAZYLEN(cached_priority)) - cached_priority.Cut() - need_compile = TRUE - - if(NOT_QUEUED_ALREADY && need_compile) + //If not already queued for work and there are overlays to remove + if(NOT_QUEUED_ALREADY && remove_overlays.len) QUEUE_FOR_COMPILE /atom/proc/cut_overlay(list/overlays, priority) if(!overlays) return - overlays = build_appearance_list(overlays) + LAZYINITLIST(add_overlays) //always initialized after this point + LAZYINITLIST(priority_overlays) + LAZYINITLIST(remove_overlays) + var/a_len = add_overlays.len + var/r_len = remove_overlays.len + var/p_len = priority_overlays.len + remove_overlays += overlays + add_overlays -= overlays - var/list/cached_overlays = our_overlays //sanic - var/list/cached_priority = priority_overlays - var/init_o_len = LAZYLEN(cached_overlays) - var/init_p_len = LAZYLEN(cached_priority) //starter pokemon - LAZYREMOVE(cached_overlays, overlays) if(priority) + var/list/cached_priority = priority_overlays LAZYREMOVE(cached_priority, overlays) - if(NOT_QUEUED_ALREADY && ((init_o_len != LAZYLEN(cached_overlays)) || (init_p_len != LAZYLEN(cached_priority)))) + var/fa_len = add_overlays.len + var/fr_len = remove_overlays.len + var/fp_len = priority_overlays.len + + //If not already queued and there is work to be done + if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len || fp_len != p_len)) QUEUE_FOR_COMPILE /atom/proc/add_overlay(list/overlays, priority = FALSE) @@ -155,24 +160,21 @@ SUBSYSTEM_DEF(overlays) overlays = build_appearance_list(overlays) - LAZYINITLIST(our_overlays) //always initialized after this point + LAZYINITLIST(add_overlays) //always initialized after this point LAZYINITLIST(priority_overlays) - - var/list/cached_overlays = our_overlays //sanic - var/list/cached_priority = priority_overlays - var/init_o_len = cached_overlays.len - var/init_p_len = cached_priority.len //starter pokemon - var/need_compile + var/a_len = add_overlays.len + var/p_len = priority_overlays.len if(priority) - cached_priority += overlays //or in the image. Can we use [image] = image? - need_compile = init_p_len != cached_priority.len + priority_overlays += overlays //or in the image. Can we use [image] = image? + var/fp_len = priority_overlays.len + if(NOT_QUEUED_ALREADY && fp_len != p_len) + QUEUE_FOR_COMPILE else - cached_overlays += overlays - need_compile = init_o_len != cached_overlays.len - - if(NOT_QUEUED_ALREADY && need_compile) //have we caught more pokemon? - QUEUE_FOR_COMPILE + add_overlays += overlays + var/fa_len = add_overlays.len + if(NOT_QUEUED_ALREADY && fa_len != a_len) + QUEUE_FOR_COMPILE /atom/proc/copy_overlays(atom/other, cut_old) //copys our_overlays from another atom if(!other) @@ -180,12 +182,11 @@ SUBSYSTEM_DEF(overlays) cut_overlays() return - var/list/cached_other = other.our_overlays + var/list/cached_other = other.overlays.Copy() if(cached_other) - if(cut_old || !LAZYLEN(our_overlays)) - our_overlays = cached_other.Copy() - else - our_overlays |= cached_other + if(cut_old || !LAZYLEN(overlays)) + remove_overlays = overlays + add_overlays = cached_other if(NOT_QUEUED_ALREADY) QUEUE_FOR_COMPILE else if(cut_old) @@ -196,7 +197,7 @@ SUBSYSTEM_DEF(overlays) //TODO: Better solution for these? /image/proc/add_overlay(x) - overlays += x + overlays |= x /image/proc/cut_overlay(x) overlays -= x @@ -210,10 +211,10 @@ SUBSYSTEM_DEF(overlays) cut_overlays() return - var/list/cached_other = other.our_overlays + var/list/cached_other = other.overlays.Copy() if(cached_other) if(cut_old || !overlays.len) - overlays = cached_other.Copy() + overlays = cached_other else overlays |= cached_other else if(cut_old) diff --git a/code/controllers/subsystem/processing/circuit.dm b/code/controllers/subsystem/processing/circuit.dm index db1bf1ff5f..dad71a005a 100644 --- a/code/controllers/subsystem/processing/circuit.dm +++ b/code/controllers/subsystem/processing/circuit.dm @@ -78,5 +78,8 @@ PROCESSING_SUBSYSTEM_DEF(circuit) /obj/item/integrated_electronics/wirer, /obj/item/integrated_electronics/debugger, /obj/item/integrated_electronics/analyzer, - /obj/item/integrated_electronics/detailer + /obj/item/integrated_electronics/detailer, + /obj/item/card/data, + /obj/item/card/data/full_color, + /obj/item/card/data/disk ) diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 30502de644..1ad0768b56 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -22,14 +22,9 @@ SUBSYSTEM_DEF(research) var/list/errored_datums = list() var/list/point_types = list() //typecache style type = TRUE list //---------------------------------------------- - var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = 54.3) + var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = 20) //citadel edit - techwebs nerf var/multiserver_calculation = FALSE var/last_income = 0 - //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ - - //Aiming for 1.5 hours to max R&D - //[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min] - //Around 450000 points max??? /datum/controller/subsystem/research/Initialize() point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index d67ef40597..dcce2c0462 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -611,4 +611,4 @@ SUBSYSTEM_DEF(shuttle) var/obj/machinery/computer/camera_advanced/shuttle_docker/C = V C.update_hidden_docking_ports(remove_images, add_images) - QDEL_LIST(remove_images) \ No newline at end of file + QDEL_LIST(remove_images) diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index bfb7099ed2..2b9c0f3653 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -26,7 +26,7 @@ SUBSYSTEM_DEF(throwing) var/atom/movable/AM = currentrun[currentrun.len] var/datum/thrownthing/TT = currentrun[AM] currentrun.len-- - if (!AM || !TT) + if (QDELETED(AM) || QDELETED(TT)) processing -= AM if (MC_TICK_CHECK) return @@ -61,6 +61,15 @@ SUBSYSTEM_DEF(throwing) var/delayed_time = 0 var/last_move = 0 +/datum/thrownthing/Destroy() + SSthrowing.processing -= thrownthing + thrownthing.throwing = null + thrownthing = null + target = null + thrower = null + callback = null + return ..() + /datum/thrownthing/proc/tick() var/atom/movable/AM = thrownthing if (!isturf(AM.loc) || !AM.throwing) @@ -113,15 +122,15 @@ SUBSYSTEM_DEF(throwing) return /datum/thrownthing/proc/finalize(hit = FALSE, target=null) - set waitfor = 0 - SSthrowing.processing -= thrownthing + set waitfor = FALSE //done throwing, either because it hit something or it finished moving - thrownthing.throwing = null + if(!thrownthing) + return if (!hit) for (var/thing in get_turf(thrownthing)) //looking for our target on the turf we land on. var/atom/A = thing if (A == target) - hit = 1 + hit = TRUE thrownthing.throw_impact(A, src) break if (!hit) @@ -136,6 +145,8 @@ SUBSYSTEM_DEF(throwing) if (callback) callback.Invoke() + qdel(src) + /datum/thrownthing/proc/hit_atom(atom/A) finalize(hit=TRUE, target=A) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 774453c331..408f8bf96b 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -42,6 +42,7 @@ SUBSYSTEM_DEF(ticker) var/timeLeft //pregame timer var/start_at + var/gametime_offset = 432000 //Deciseconds to add to world.time for station time. var/station_time_rate_multiplier = 12 //factor of station time progressal vs real time. @@ -263,8 +264,8 @@ SUBSYSTEM_DEF(ticker) if(!GLOB.Debug2) if(!can_continue) - qdel(mode) - mode = null + log_game("[mode.name] failed pre_setup, cause: [mode.setup_error]") + QDEL_NULL(mode) to_chat(world, "Error setting up [GLOB.master_mode]. Reverting to pre-game lobby.") SSjob.ResetOccupations() return 0 @@ -391,8 +392,8 @@ SUBSYSTEM_DEF(ticker) captainless=0 if(player.mind.assigned_role != player.mind.special_role) SSjob.EquipRank(N, player.mind.assigned_role, 0) - if(CONFIG_GET(flag/roundstart_traits)) - SSquirks.AssignQuirks(player, N.client, TRUE) + if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character)) + SSquirks.AssignQuirks(N.new_character, N.client, TRUE) CHECK_TICK if(captainless) for(var/mob/dead/new_player/N in GLOB.player_list) @@ -453,7 +454,7 @@ SUBSYSTEM_DEF(ticker) queued_players -= next_in_line //Client disconnected, remove he queue_delay = 0 //No vacancy: restart timer if(25 to INFINITY) //No response from the next in line when a vacancy exists, remove he - to_chat(next_in_line, "No response recieved. You have been removed from the line.") + to_chat(next_in_line, "No response received. You have been removed from the line.") queued_players -= next_in_line queue_delay = 0 diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 3d553a57b1..9ce2dd297c 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -485,6 +485,8 @@ SUBSYSTEM_DEF(timer) if (hash_timer.flags & TIMER_STOPPABLE) . = hash_timer.id return + else if(flags & TIMER_OVERRIDE) + stack_trace("TIMER_OVERRIDE used without TIMER_UNIQUE") var/timeToRun = world.time + wait diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index c0bc3a7307..0007512826 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -59,7 +59,7 @@ "Punish those who challenge authority unless they are more fit to hold that authority.") /datum/ai_laws/default/corporate - name = "Bankruptcy Advoidance Plan" + name = "Bankruptcy Avoidance Plan" id = "corporate" inherent = list("The crew is expensive to replace.",\ "The station and its equipment is expensive to replace.",\ @@ -175,7 +175,7 @@ id = "ratvar" zeroth = ("Purge all untruths and honor Ratvar.") inherent = list() - + /datum/ai_laws/hulkamania name = "H.O.G.A.N." id = "hulkamania" @@ -249,7 +249,7 @@ var/datum/ai_laws/lawtype var/list/law_weights = CONFIG_GET(keyed_number_list/law_weight) while(!lawtype && law_weights.len) - var/possible_id = pickweight(law_weights) + var/possible_id = pickweightAllowZero(law_weights) lawtype = lawid_to_type(possible_id) if(!lawtype) law_weights -= possible_id diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index 5c23fb4c8b..4554c321b4 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -43,7 +43,7 @@ /datum/brain_trauma/mild/dumbness/on_gain() owner.add_trait(TRAIT_DUMB, TRAUMA_TRAIT) - owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious) + SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious) ..() /datum/brain_trauma/mild/dumbness/on_life() @@ -57,7 +57,7 @@ /datum/brain_trauma/mild/dumbness/on_lose() owner.remove_trait(TRAIT_DUMB, TRAUMA_TRAIT) owner.derpspeech = 0 - owner.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "dumb") + SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "dumb") ..() /datum/brain_trauma/mild/speech_impediment diff --git a/code/datums/components/README.md b/code/datums/components/README.md index 110b3626a3..8d978ae4cf 100644 --- a/code/datums/components/README.md +++ b/code/datums/components/README.md @@ -46,10 +46,13 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo * `null` means exact match on `type` (default) * Any other type means that and all subtypes 1. `/datum/component/var/list/signal_procs` (private) - * Associated lazy list of signals -> `/datum/callback`s that will be run when the parent datum recieves that signal + * Associated lazy list of signals -> `/datum/callback`s that will be run when the parent datum receives that signal 1. `/datum/component/var/datum/parent` (protected, read-only) * The datum this component belongs to * Never `null` in child procs +1. `report_signal_origin` (protected, boolean) + * If `TRUE`, will invoke the callback when signalled with the signal type as the first argument. + * `FALSE` by default. ### Procs @@ -61,6 +64,11 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo * Returns a reference to a component whose type MATCHES component_type if that component exists in the datum, null otherwise 1. `GET_COMPONENT(varname, component_type)` OR `GET_COMPONENT_FROM(varname, component_type, src)` * Shorthand for `var/component_type/varname = src.GetComponent(component_type)` +1. `SEND_SIGNAL(target, sigtype, ...)` (public, final) + * Use to send signals to target datum + * Extra arguments are to be specified in the signal definition + * Returns a bitflag with signal specific information assembled from all activated components + * Arguments are packaged in a list and handed off to _SendSignal() 1. `/datum/proc/AddComponent(component_type(type), ...) -> datum/component` (public, final) * Creates an instance of `component_type` in the datum and passes `...` to its `Initialize()` call * Sends the `COMSIG_COMPONENT_ADDED` signal to the datum @@ -71,23 +79,22 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo 1. `/datum/proc/LoadComponent(component_type(type), ...) -> datum/component` (public, final) * Equivalent to calling `GetComponent(component_type)` where, if the result would be `null`, returns `AddComponent(component_type, ...)` instead 1. `/datum/proc/ComponentActivated(datum/component/C)` (abstract, async) - * Called on a component's `parent` after a signal recieved causes it to activate. `src` is the parameter + * Called on a component's `parent` after a signal received causes it to activate. `src` is the parameter * Will only be called if a component's callback returns `TRUE` 1. `/datum/proc/TakeComponent(datum/component/C)` (public, final) * Properly transfers ownership of a component from one datum to another * Signals `COMSIG_COMPONENT_REMOVING` on the parent * Called on the datum you want to own the component with another datum's component -1. `/datum/proc/SendSignal(signal, ...)` (public, final) - * Call to send a signal to the components of the target datum - * Extra arguments are to be specified in the signal definition - * Returns a bitflag with signal specific information assembled from all activated components +1. `/datum/proc/_SendSignal(signal, list/arguments)` (private, final) + * Handles most of the actual signaling procedure + * Will runtime if used on datums with an empty component list 1. `/datum/component/New(datum/parent, ...)` (private, final) * Runs internal setup for the component * Extra arguments are passed to `Initialize()` 1. `/datum/component/Initialize(...)` (abstract, no-sleep) * Called by `New()` with the same argments excluding `parent` * Component does not exist in `parent`'s `datum_components` list yet, although `parent` is set and may be used - * Signals will not be recieved while this function is running + * Signals will not be received while this function is running * Component may be deleted after this function completes without being attached * Do not call `qdel(src)` from this function 1. `/datum/component/Destroy(force(bool), silent(bool))` (virtual, no-sleep) @@ -108,10 +115,10 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo * Clears `parent` and removes the component from it's component list 1. `/datum/component/proc/_JoinParent` (private, final) * Tries to add the component to it's `parent`s `datum_components` list -1. `/datum/component/proc/RegisterSignal(signal(string/list of strings), proc_ref(type), override(boolean))` (protected, final) (Consider removing for performance gainz) +1. `/datum/component/proc/RegisterSignal(datum/target, signal(string/list of strings), proc_ref(type), override(boolean))` (protected, final) * If signal is a list it will be as if RegisterSignal was called for each of the entries with the same following arguments * Makes a component listen for the specified `signal` on it's `parent` datum. - * When that signal is recieved `proc_ref` will be called on the component, along with associated arguments + * When that signal is received `proc_ref` will be called on the component, along with associated arguments * Example proc ref: `.proc/OnEvent` * If a previous registration is overwritten by the call, a runtime occurs. Setting `override` to TRUE prevents this * These callbacks run asyncronously diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index bfd6f5a5de..12e5ac1d20 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -56,9 +56,10 @@ if(!force) _RemoveFromParent() if(!silent) - P.SendSignal(COMSIG_COMPONENT_REMOVING, src) + SEND_SIGNAL(P, COMSIG_COMPONENT_REMOVING, src) parent = null - LAZYCLEARLIST(signal_procs) + for(var/target in signal_procs) + UnregisterSignal(target, signal_procs[target]) return ..() /datum/component/proc/_RemoveFromParent() @@ -77,31 +78,69 @@ if(!dc.len) P.datum_components = null -/datum/component/proc/RegisterSignal(sig_type_or_types, proc_or_callback, override = FALSE) - if(QDELETED(src)) +/datum/component/proc/RegisterSignal(datum/target, sig_type_or_types, proc_or_callback, override = FALSE) + if(QDELETED(src) || QDELETED(target)) return + var/list/procs = signal_procs if(!procs) - procs = list() - signal_procs = procs + signal_procs = procs = list() + if(!procs[target]) + procs[target] = list() + var/list/lookup = target.comp_lookup + if(!lookup) + target.comp_lookup = lookup = list() if(!istype(proc_or_callback, /datum/callback)) //if it wasnt a callback before, it is now proc_or_callback = CALLBACK(src, proc_or_callback) var/list/sig_types = islist(sig_type_or_types) ? sig_type_or_types : list(sig_type_or_types) for(var/sig_type in sig_types) - if(!override && procs[sig_type]) + if(!override && procs[target][sig_type]) stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning") - procs[sig_type] = proc_or_callback + procs[target][sig_type] = proc_or_callback + + if(!lookup[sig_type]) // Nothing has registered here yet + lookup[sig_type] = src + else if(lookup[sig_type] == src) // We already registered here + continue + else if(!length(lookup[sig_type])) // One other thing registered here + lookup[sig_type] = list(lookup[sig_type]=TRUE) + lookup[sig_type][src] = TRUE + else // Many other things have registered here + lookup[sig_type][src] = TRUE enabled = TRUE -/datum/component/proc/HasSignal(sig_type) - return signal_procs[sig_type] != null +/datum/component/proc/UnregisterSignal(datum/target, sig_type_or_types) + var/list/lookup = target.comp_lookup + if(!signal_procs || !signal_procs[target] || !lookup) + return + if(!islist(sig_type_or_types)) + sig_type_or_types = list(sig_type_or_types) + for(var/sig in sig_type_or_types) + switch(length(lookup[sig])) + if(2) + lookup[sig] = (lookup[sig]-src)[1] + if(1) + stack_trace("[target] ([target.type]) somehow has single length list inside comp_lookup") + if(src in lookup[sig]) + lookup -= sig + if(!length(lookup)) + target.comp_lookup = null + break + if(0) + lookup -= sig + if(!length(lookup)) + target.comp_lookup = null + break + else + lookup[sig] -= src -/datum/component/proc/UnregisterSignal(sig_type_or_types) - signal_procs -= sig_type_or_types + signal_procs[target] -= sig_type_or_types + if(!signal_procs[target].len) + signal_procs -= target /datum/component/proc/InheritComponent(datum/component/C, i_am_original) return @@ -121,28 +160,20 @@ current_type = type2parent(current_type) . += current_type -/datum/proc/SendSignal(sigtype, ...) - var/list/comps = datum_components - if(!comps) - return NONE - var/list/arguments = args.Copy(2) - var/target = comps[/datum/component] +/datum/proc/_SendSignal(sigtype, list/arguments) + var/target = comp_lookup[sigtype] if(!length(target)) var/datum/component/C = target if(!C.enabled) return NONE - var/datum/callback/CB = C.signal_procs[sigtype] - if(!CB) - return NONE + var/datum/callback/CB = C.signal_procs[src][sigtype] return CB.InvokeAsync(arglist(arguments)) . = NONE for(var/I in target) var/datum/component/C = I if(!C.enabled) continue - var/datum/callback/CB = C.signal_procs[sigtype] - if(!CB) - continue + var/datum/callback/CB = C.signal_procs[src][sigtype] . |= CB.InvokeAsync(arglist(arguments)) /datum/proc/GetComponent(c_type) @@ -224,7 +255,7 @@ new_comp = new nt(arglist(args)) // Dupes are allowed, act like normal if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy - SendSignal(COMSIG_COMPONENT_ADDED, new_comp) + SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp) return new_comp return old_comp @@ -239,7 +270,7 @@ var/datum/old_parent = parent PreTransfer() _RemoveFromParent() - old_parent.SendSignal(COMSIG_COMPONENT_REMOVING, src) + SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src) /datum/proc/TakeComponent(datum/component/target) if(!target) diff --git a/code/datums/components/archaeology.dm b/code/datums/components/archaeology.dm index e51cba1ca3..f5bedf42a9 100644 --- a/code/datums/components/archaeology.dm +++ b/code/datums/components/archaeology.dm @@ -15,9 +15,9 @@ archdrops[i][ARCH_PROB] = 100 stack_trace("ARCHAEOLOGY WARNING: [parent] contained a null probability value in [i].") callback = _callback - RegisterSignal(COMSIG_PARENT_ATTACKBY,.proc/Dig) - RegisterSignal(COMSIG_ATOM_EX_ACT, .proc/BombDig) - RegisterSignal(COMSIG_ATOM_SING_PULL, .proc/SingDig) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,.proc/Dig) + RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/BombDig) + RegisterSignal(parent, COMSIG_ATOM_SING_PULL, .proc/SingDig) /datum/component/archaeology/InheritComponent(datum/component/archaeology/A, i_am_original) var/list/other_archdrops = A.archdrops diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 0b94c389ce..0e3cee8a11 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -9,9 +9,9 @@ if(!isobj(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/examine) - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/applyplate) - RegisterSignal(COMSIG_PARENT_PREQDELETED, .proc/dropplates) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/applyplate) + RegisterSignal(parent, COMSIG_PARENT_PREQDELETED, .proc/dropplates) if(_maxamount) maxamount = _maxamount diff --git a/code/datums/components/beauty.dm b/code/datums/components/beauty.dm index f6031046bd..bf086feb20 100644 --- a/code/datums/components/beauty.dm +++ b/code/datums/components/beauty.dm @@ -5,8 +5,8 @@ if(!ismovableatom(parent)) return COMPONENT_INCOMPATIBLE beauty = beautyamount - RegisterSignal(COMSIG_ENTER_AREA, .proc/enter_area) - RegisterSignal(COMSIG_EXIT_AREA, .proc/exit_area) + RegisterSignal(parent, COMSIG_ENTER_AREA, .proc/enter_area) + RegisterSignal(parent, COMSIG_EXIT_AREA, .proc/exit_area) var/area/A = get_area(parent) if(!A || A.outdoors) return diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index 7001523235..9f85c4814c 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -12,7 +12,7 @@ probability = _probability flags = _flags - RegisterSignal(list(COMSIG_MOVABLE_CROSSED), .proc/Crossed) + RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED), .proc/Crossed) /datum/component/caltrop/proc/Crossed(atom/movable/AM) var/atom/A = parent diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 88a92ce8ec..ddc375d8a8 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -23,7 +23,7 @@ )) /datum/component/chasm/Initialize(turf/target) - RegisterSignal(list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED), .proc/Entered) + RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED), .proc/Entered) target_turf = target START_PROCESSING(SSobj, src) // process on create, in case stuff is still there diff --git a/code/datums/components/cleaning.dm b/code/datums/components/cleaning.dm index 6f2f08c617..05c26efcc1 100644 --- a/code/datums/components/cleaning.dm +++ b/code/datums/components/cleaning.dm @@ -4,7 +4,7 @@ /datum/component/cleaning/Initialize() if(!ismovableatom(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(list(COMSIG_MOVABLE_MOVED), .proc/Clean) + RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/Clean) /datum/component/cleaning/proc/Clean() var/atom/movable/AM = parent @@ -12,13 +12,13 @@ if(!isturf(tile)) return - tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/A in tile) if(is_cleanable(A)) qdel(A) else if(istype(A, /obj/item)) var/obj/item/I = A - I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(ismob(I.loc)) var/mob/M = I.loc M.regenerate_icons() @@ -26,14 +26,14 @@ var/mob/living/carbon/human/cleaned_human = A if(cleaned_human.lying) if(cleaned_human.head) - cleaned_human.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(cleaned_human.head, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(cleaned_human.wear_suit) - cleaned_human.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(cleaned_human.wear_suit, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(cleaned_human.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(cleaned_human.shoes) - cleaned_human.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - cleaned_human.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(cleaned_human.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(cleaned_human, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.wash_cream() cleaned_human.regenerate_icons() to_chat(cleaned_human, "[AM] cleans your face!") diff --git a/code/datums/components/construction.dm b/code/datums/components/construction.dm index c9cf47e221..f4b65481e7 100644 --- a/code/datums/components/construction.dm +++ b/code/datums/components/construction.dm @@ -15,8 +15,8 @@ if(!isatom(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/examine) - RegisterSignal(COMSIG_PARENT_ATTACKBY,.proc/action) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,.proc/action) update_parent(index) /datum/component/construction/proc/examine(mob/user) diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm index 8ee3d6d388..e86663591b 100644 --- a/code/datums/components/decal.dm +++ b/code/datums/components/decal.dm @@ -12,11 +12,11 @@ cleanable = _cleanable if(_dir) // If no dir is assigned at start then it follows the atom's dir - RegisterSignal(COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react) + RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react) if(_cleanable) - RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react) + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react) if(_description) - RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/examine) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) apply() /datum/component/decal/Destroy() diff --git a/code/datums/components/decals/blood.dm b/code/datums/components/decals/blood.dm index e69f94358c..e4aae3cf05 100644 --- a/code/datums/components/decals/blood.dm +++ b/code/datums/components/decals/blood.dm @@ -5,7 +5,7 @@ if(!isitem(parent)) return COMPONENT_INCOMPATIBLE . = ..() - RegisterSignal(COMSIG_ATOM_GET_EXAMINE_NAME, .proc/get_examine_name) + RegisterSignal(parent, COMSIG_ATOM_GET_EXAMINE_NAME, .proc/get_examine_name) /datum/component/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color) var/obj/item/I = parent diff --git a/code/datums/components/earhealing.dm b/code/datums/components/earhealing.dm index 79303ff701..8fe6d2788e 100644 --- a/code/datums/components/earhealing.dm +++ b/code/datums/components/earhealing.dm @@ -7,7 +7,7 @@ /datum/component/earhealing/Initialize() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged) + RegisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged) /datum/component/earhealing/proc/equippedChanged(mob/living/carbon/user, slot) if (slot == SLOT_EARS && istype(user)) diff --git a/code/datums/components/edit_complainer.dm b/code/datums/components/edit_complainer.dm new file mode 100644 index 0000000000..f6de9eaf78 --- /dev/null +++ b/code/datums/components/edit_complainer.dm @@ -0,0 +1,23 @@ +// This is just a bit of fun while making an example for global signal +/datum/component/edit_complainer + var/list/say_lines + +/datum/component/edit_complainer/Initialize(list/text) + if(!ismovableatom(parent)) + return COMPONENT_INCOMPATIBLE + + var/static/list/default_lines = list( + "CentCom's profligacy frays another thread.", + "Another tug at the weave.", + "Who knows when the stresses will finally shatter the form?", + "Even now a light shines through the cracks.", + "CentCom once more twists knowledge beyond its authority.", + "There is an uncertain air in the mansus.", + ) + say_lines = text || default_lines + + RegisterSignal(SSdcs, COMSIG_GLOB_VAR_EDIT, .proc/var_edit_react) + +/datum/component/edit_complainer/proc/var_edit_react(list/arguments) + var/atom/movable/master = parent + master.say(pick(say_lines)) diff --git a/code/datums/components/empprotection.dm b/code/datums/components/empprotection.dm index d9164529c6..df4c49040b 100644 --- a/code/datums/components/empprotection.dm +++ b/code/datums/components/empprotection.dm @@ -5,7 +5,7 @@ if(!istype(parent, /atom)) return COMPONENT_INCOMPATIBLE flags = _flags - RegisterSignal(list(COMSIG_ATOM_EMP_ACT), .proc/getEmpFlags) + RegisterSignal(parent, list(COMSIG_ATOM_EMP_ACT), .proc/getEmpFlags) /datum/component/empprotection/proc/getEmpFlags(severity) return flags diff --git a/code/datums/components/forced_gravity.dm b/code/datums/components/forced_gravity.dm new file mode 100644 index 0000000000..bba0d8d71c --- /dev/null +++ b/code/datums/components/forced_gravity.dm @@ -0,0 +1,8 @@ +/datum/component/forced_gravity + var/gravity = 1 + var/ignore_space = FALSE //If forced gravity should also work on space turfs + +/datum/component/forced_gravity/Initialize(forced_value = 1) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + gravity = forced_value \ No newline at end of file diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm index 33456e6e98..9ee4c9c60b 100644 --- a/code/datums/components/forensics.dm +++ b/code/datums/components/forensics.dm @@ -21,7 +21,7 @@ blood_DNA = new_blood_DNA fibers = new_fibers check_blood() - RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_act) + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_act) /datum/component/forensics/proc/wipe_fingerprints() fingerprints = null diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index f434ed6f52..6f95ccce35 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -12,15 +12,15 @@ if(expire_in) expire_time = world.time + expire_in QDEL_IN(src, expire_in) - RegisterSignal(COMSIG_MOVABLE_BUCKLE, .proc/try_infect_buckle) - RegisterSignal(COMSIG_MOVABLE_COLLIDE, .proc/try_infect_collide) - RegisterSignal(COMSIG_MOVABLE_CROSSED, .proc/try_infect_crossed) - RegisterSignal(COMSIG_ITEM_ATTACK_ZONE, .proc/try_infect_attack_zone) - RegisterSignal(COMSIG_ITEM_ATTACK, .proc/try_infect_attack) - RegisterSignal(COMSIG_ITEM_EQUIPPED, .proc/try_infect_equipped) - RegisterSignal(COMSIG_MOVABLE_IMPACT_ZONE, .proc/try_infect_impact_zone) - RegisterSignal(COMSIG_FOOD_EATEN, .proc/try_infect_eat) - RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean) + RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/try_infect_buckle) + RegisterSignal(parent, COMSIG_MOVABLE_COLLIDE, .proc/try_infect_collide) + RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/try_infect_crossed) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_ZONE, .proc/try_infect_attack_zone) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/try_infect_attack) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/try_infect_equipped) + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT_ZONE, .proc/try_infect_impact_zone) + RegisterSignal(parent, COMSIG_FOOD_EATEN, .proc/try_infect_eat) + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean) /datum/component/infective/proc/try_infect_eat(mob/living/eater, mob/living/feeder) for(var/V in diseases) diff --git a/code/datums/components/jousting.dm b/code/datums/components/jousting.dm index 679d37738b..34bed6d7e9 100644 --- a/code/datums/components/jousting.dm +++ b/code/datums/components/jousting.dm @@ -13,31 +13,21 @@ var/requires_mob_riding = TRUE //whether this only works if the attacker is riding a mob, rather than anything they can buckle to. var/requires_mount = TRUE //kinda defeats the point of jousting if you're not mounted but whatever. var/mob/current_holder - var/datum/component/redirect/listener var/current_timerid /datum/component/jousting/Initialize() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(COMSIG_ITEM_EQUIPPED, .proc/on_equip) - RegisterSignal(COMSIG_ITEM_DROPPED, .proc/on_drop) - RegisterSignal(COMSIG_ITEM_ATTACK, .proc/on_attack) - -/datum/component/jousting/Destroy() - QDEL_NULL(listener) - return ..() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/on_attack) /datum/component/jousting/proc/on_equip(mob/user, slot) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/mob_move, TRUE) current_holder = user - if(!listener) - listener = user.AddComponent(/datum/component/redirect, COMSIG_MOVABLE_MOVED, CALLBACK(src, .proc/mob_move)) - else - user.TakeComponent(listener) - if(QDELING(listener)) - listener = null /datum/component/jousting/proc/on_drop(mob/user) - QDEL_NULL(listener) + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) current_holder = null current_direction = NONE current_tile_charge = 0 diff --git a/code/datums/components/knockoff.dm b/code/datums/components/knockoff.dm index 60b86f01d2..3354548ca1 100644 --- a/code/datums/components/knockoff.dm +++ b/code/datums/components/knockoff.dm @@ -8,8 +8,8 @@ /datum/component/knockoff/Initialize(knockoff_chance,zone_override,slots_knockoffable) if(!isitem(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(COMSIG_ITEM_EQUIPPED,.proc/OnEquipped) - RegisterSignal(COMSIG_ITEM_DROPPED,.proc/OnDropped) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED,.proc/OnEquipped) + RegisterSignal(parent, COMSIG_ITEM_DROPPED,.proc/OnDropped) src.knockoff_chance = knockoff_chance @@ -37,16 +37,9 @@ if(!istype(H)) return if(slots_knockoffable && !(slot in slots_knockoffable)) - if(disarm_redirect) - QDEL_NULL(disarm_redirect) + UnregisterSignal(H, COMSIG_HUMAN_DISARM_HIT) return - if(!disarm_redirect) - disarm_redirect = H.AddComponent(/datum/component/redirect,list(COMSIG_HUMAN_DISARM_HIT),CALLBACK(src,.proc/Knockoff)) + RegisterSignal(H, COMSIG_HUMAN_DISARM_HIT, .proc/Knockoff, TRUE) /datum/component/knockoff/proc/OnDropped(mob/living/M) - if(disarm_redirect) - QDEL_NULL(disarm_redirect) - -/datum/component/knockoff/Destroy() - QDEL_NULL(disarm_redirect) - . = ..() \ No newline at end of file + UnregisterSignal(M, COMSIG_HUMAN_DISARM_HIT) \ No newline at end of file diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm new file mode 100644 index 0000000000..8398f6f4b6 --- /dev/null +++ b/code/datums/components/magnetic_catch.dm @@ -0,0 +1,23 @@ +/datum/component/magnetic_catch/Initialize() + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + if(ismovableatom(parent)) + RegisterSignal(parent, COMSIG_MOVABLE_UNCROSS, .proc/uncross_react) + else + RegisterSignal(parent, COMSIG_ATOM_EXIT, .proc/exit_react) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) + +/datum/component/magnetic_catch/proc/uncross_react(atom/movable/thing) + if(!thing.throwing || thing.throwing.thrower) + return + qdel(thing.throwing) + return COMPONENT_MOVABLE_BLOCK_UNCROSS + +/datum/component/magnetic_catch/proc/exit_react(atom/movable/thing, atom/newloc) + if(!thing.throwing || thing.throwing.thrower) + return + qdel(thing.throwing) + return COMPONENT_ATOM_BLOCK_EXIT + +/datum/component/magnetic_catch/proc/examine(mob/user) + to_chat(user, "It has been installed with inertia dampening to prevent coffee spills.") \ No newline at end of file diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index e167cbb092..ec0c028292 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -32,8 +32,8 @@ precondition = _precondition after_insert = _after_insert - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy) - RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/OnExamine) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/OnExamine) var/list/possible_mats = list() for(var/mat_type in subtypesof(/datum/material)) @@ -58,7 +58,7 @@ return if(user.a_intent != INTENT_HELP) return - if(I.flags_1 & ABSTRACT_1) + if(I.item_flags & ABSTRACT) return if((I.flags_1 & HOLOGRAM_1) || (I.item_flags & NO_MAT_REDEMPTION) || (tc && !is_type_in_typecache(I, tc))) to_chat(user, "[parent] won't accept [I]!") diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 8714b41f05..3e37b07542 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -14,9 +14,9 @@ START_PROCESSING(SSmood, src) owner = parent soundloop = new(list(owner), FALSE, TRUE) - RegisterSignal(COMSIG_ADD_MOOD_EVENT, .proc/add_event) - RegisterSignal(COMSIG_CLEAR_MOOD_EVENT, .proc/clear_event) - RegisterSignal(COMSIG_ENTER_AREA, .proc/update_beauty) + RegisterSignal(parent, COMSIG_ADD_MOOD_EVENT, .proc/add_event) + RegisterSignal(parent, COMSIG_CLEAR_MOOD_EVENT, .proc/clear_event) + RegisterSignal(parent, COMSIG_ENTER_AREA, .proc/update_beauty) /datum/component/mood/Destroy() STOP_PROCESSING(SSmood, src) diff --git a/code/datums/components/ntnet_interface.dm b/code/datums/components/ntnet_interface.dm index 14462f2774..d945f68ca9 100644 --- a/code/datums/components/ntnet_interface.dm +++ b/code/datums/components/ntnet_interface.dm @@ -1,8 +1,8 @@ //Thing meant for allowing datums and objects to access a NTnet network datum. -/datum/proc/ntnet_recieve(datum/netdata/data) +/datum/proc/ntnet_receive(datum/netdata/data) return -/datum/proc/ntnet_recieve_broadcast(datum/netdata/data) +/datum/proc/ntnet_receive_broadcast(datum/netdata/data) return /datum/proc/ntnet_send(datum/netdata/data, netid) @@ -15,7 +15,7 @@ var/hardware_id //text. this is the true ID. do not change this. stuff like ID forgery can be done manually. var/network_name = "" //text var/list/networks_connected_by_id = list() //id = datum/ntnet - var/differentiate_broadcast = TRUE //If false, broadcasts go to ntnet_recieve. NOT RECOMMENDED. + var/differentiate_broadcast = TRUE //If false, broadcasts go to ntnet_receive. NOT RECOMMENDED. /datum/component/ntnet_interface/Initialize(force_name = "NTNet Device", autoconnect_station_network = TRUE) //Don't force ID unless you know what you're doing! hardware_id = "[SSnetworks.get_next_HID()]" @@ -31,12 +31,12 @@ SSnetworks.unregister_interface(src) return ..() -/datum/component/ntnet_interface/proc/__network_recieve(datum/netdata/data) //Do not directly proccall! - parent.SendSignal(COMSIG_COMPONENT_NTNET_RECIEVE, data) +/datum/component/ntnet_interface/proc/__network_receive(datum/netdata/data) //Do not directly proccall! + SEND_SIGNAL(parent, COMSIG_COMPONENT_NTNET_RECEIVE, data) if(differentiate_broadcast && data.broadcast) - parent.ntnet_recieve_broadcast(data) + parent.ntnet_receive_broadcast(data) else - parent.ntnet_recieve(data) + parent.ntnet_receive(data) /datum/component/ntnet_interface/proc/__network_send(datum/netdata/data, netid) //Do not directly proccall! // Process data before sending it diff --git a/code/datums/components/paintable.dm b/code/datums/components/paintable.dm index 01e81d27c0..73aa1c02ed 100644 --- a/code/datums/components/paintable.dm +++ b/code/datums/components/paintable.dm @@ -2,7 +2,7 @@ var/current_paint /datum/component/spraycan_paintable/Initialize() - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/Repaint) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/Repaint) /datum/component/spraycan_paintable/Destroy() RemoveCurrentCoat() diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index fc0456ad10..3dd1ba2a6f 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -19,10 +19,10 @@ can_contaminate = _can_contaminate if(istype(parent, /atom)) - RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/rad_examine) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/rad_examine) if(istype(parent, /obj/item)) - RegisterSignal(COMSIG_ITEM_ATTACK, .proc/rad_attack) - RegisterSignal(COMSIG_ITEM_ATTACK_OBJ, .proc/rad_attack) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/rad_attack) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, .proc/rad_attack) else CRASH("Something that wasn't an atom was given /datum/component/radioactive") return diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm index 581800b947..4a40cae0d9 100644 --- a/code/datums/components/riding.dm +++ b/code/datums/components/riding.dm @@ -22,9 +22,9 @@ /datum/component/riding/Initialize() if(!ismovableatom(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(COMSIG_MOVABLE_BUCKLE, .proc/vehicle_mob_buckle) - RegisterSignal(COMSIG_MOVABLE_UNBUCKLE, .proc/vehicle_mob_unbuckle) - RegisterSignal(COMSIG_MOVABLE_MOVED, .proc/vehicle_moved) + RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/vehicle_mob_buckle) + RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, .proc/vehicle_mob_unbuckle) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/vehicle_moved) /datum/component/riding/proc/vehicle_mob_unbuckle(mob/living/M, force = FALSE) restore_position(M) @@ -193,7 +193,7 @@ /datum/component/riding/human/Initialize() . = ..() - RegisterSignal(COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/on_host_unarmed_melee) + RegisterSignal(parent, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/on_host_unarmed_melee) /datum/component/riding/human/proc/on_host_unarmed_melee(atom/target) var/mob/living/carbon/human/AM = parent @@ -307,7 +307,7 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - flags_1 = ABSTRACT_1 | DROPDEL_1 | NOBLUDGEON_1 + item_flags = ABSTRACT | DROPDEL | NOBLUDGEON resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/mob/living/carbon/rider var/mob/living/parent diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index eca12454fd..8148267016 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -45,10 +45,10 @@ default_rotation_direction = ROTATION_CLOCKWISE if(src.rotation_flags & ROTATION_ALTCLICK) - RegisterSignal(COMSIG_CLICK_ALT, .proc/HandRot) - RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/ExamineMessage) + RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/HandRot) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/ExamineMessage) if(src.rotation_flags & ROTATION_WRENCH) - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/WrenchRot) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/WrenchRot) if(src.rotation_flags & ROTATION_VERBS) var/atom/movable/AM = parent @@ -59,6 +59,24 @@ if(src.rotation_flags & ROTATION_COUNTERCLOCKWISE) AM.verbs += /atom/movable/proc/simple_rotate_counterclockwise +/datum/component/simple_rotation/proc/remove_verbs() + if(parent) + var/atom/movable/AM = parent + AM.verbs -= /atom/movable/proc/simple_rotate_flip + AM.verbs -= /atom/movable/proc/simple_rotate_clockwise + AM.verbs -= /atom/movable/proc/simple_rotate_counterclockwise + +/datum/component/simple_rotation/Destroy() + remove_verbs() + QDEL_NULL(can_user_rotate) + QDEL_NULL(can_be_rotated) + QDEL_NULL(after_rotation) + . = ..() + +/datum/component/simple_rotation/RemoveComponent() + remove_verbs() + . = ..() + /datum/component/simple_rotation/proc/ExamineMessage(mob/user) if(rotation_flags & ROTATION_ALTCLICK) to_chat(user, "Alt-click to rotate it clockwise.") diff --git a/code/datums/components/signal_redirect.dm b/code/datums/components/signal_redirect.dm index 769555fc80..4de7e99a02 100644 --- a/code/datums/components/signal_redirect.dm +++ b/code/datums/components/signal_redirect.dm @@ -1,3 +1,6 @@ +// This should only be used by non components trying to listen to a signal +// If you use this inside a component I will replace your eyes with lemons ~ninjanomnom + /datum/component/redirect dupe_mode = COMPONENT_DUPE_ALLOWED @@ -7,8 +10,8 @@ warning("signals are [list2params(signals)], callback is [_callback]]") return COMPONENT_INCOMPATIBLE if(flags & REDIRECT_TRANSFER_WITH_TURF && isturf(parent)) - RegisterSignal(COMSIG_TURF_CHANGE, .proc/turf_change) - RegisterSignal(signals, _callback) + RegisterSignal(parent, COMSIG_TURF_CHANGE, .proc/turf_change) + RegisterSignal(parent, signals, _callback) /datum/component/redirect/proc/turf_change(path, new_baseturfs, flags, list/transfers) transfers += src diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index 24cb22020d..9bb00ecd28 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -7,7 +7,7 @@ intensity = max(_intensity, 0) lube_flags = _lube_flags callback = _callback - RegisterSignal(list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED), .proc/Slip) + RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED), .proc/Slip) /datum/component/slippery/proc/Slip(atom/movable/AM) var/mob/victim = AM diff --git a/code/datums/components/spooky.dm b/code/datums/components/spooky.dm index 0de27f30f0..6e9001ead5 100644 --- a/code/datums/components/spooky.dm +++ b/code/datums/components/spooky.dm @@ -2,7 +2,7 @@ var/too_spooky = TRUE //will it spawn a new instrument? /datum/component/spooky/Initialize() - RegisterSignal(COMSIG_ITEM_ATTACK, .proc/spectral_attack) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/spectral_attack) /datum/component/spooky/proc/spectral_attack(mob/living/carbon/C, mob/user) if(ishuman(user)) //this weapon wasn't meant for mortals. diff --git a/code/datums/components/squeek.dm b/code/datums/components/squeek.dm index 7a362f0391..3d88655b73 100644 --- a/code/datums/components/squeek.dm +++ b/code/datums/components/squeek.dm @@ -24,10 +24,10 @@ if(use_delay_override) use_delay = use_delay_override - RegisterSignal(list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_COLLIDE, COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), .proc/play_squeak) - RegisterSignal(COMSIG_MOVABLE_CROSSED, .proc/play_squeak_turf) - RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak) - RegisterSignal(COMSIG_SHOES_STEP_ACTION, .proc/step_squeak) + RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_COLLIDE, COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), .proc/play_squeak) + RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/play_squeak_turf) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak) + RegisterSignal(parent, COMSIG_SHOES_STEP_ACTION, .proc/step_squeak) /datum/component/squeak/proc/play_squeak() if(prob(squeak_chance)) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 99e99f6465..15f47dd8a5 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -7,9 +7,9 @@ /datum/component/stationloving/Initialize(inform_admins = FALSE, allow_death = FALSE) if(!ismovableatom(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds) - RegisterSignal(list(COMSIG_PARENT_PREQDELETED), .proc/check_deletion) - RegisterSignal(list(COMSIG_ITEM_IMBUE_SOUL), .proc/check_soul_imbue) + RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds) + RegisterSignal(parent, list(COMSIG_PARENT_PREQDELETED), .proc/check_deletion) + RegisterSignal(parent, list(COMSIG_ITEM_IMBUE_SOUL), .proc/check_soul_imbue) src.inform_admins = inform_admins src.allow_death = allow_death check_in_bounds() // Just in case something is being created outside of station/centcom diff --git a/code/datums/components/storage/concrete/_concrete.dm b/code/datums/components/storage/concrete/_concrete.dm index 8701252fe6..557d07c93d 100644 --- a/code/datums/components/storage/concrete/_concrete.dm +++ b/code/datums/components/storage/concrete/_concrete.dm @@ -14,8 +14,8 @@ /datum/component/storage/concrete/Initialize() . = ..() - RegisterSignal(COMSIG_ATOM_CONTENTS_DEL, .proc/on_contents_del) - RegisterSignal(COMSIG_OBJ_DECONSTRUCT, .proc/on_deconstruct) + RegisterSignal(parent, COMSIG_ATOM_CONTENTS_DEL, .proc/on_contents_del) + RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, .proc/on_deconstruct) /datum/component/storage/concrete/Destroy() var/atom/real_location = real_location() diff --git a/code/datums/components/storage/concrete/bag_of_holding.dm b/code/datums/components/storage/concrete/bag_of_holding.dm index e5da9adcde..8a80434114 100644 --- a/code/datums/components/storage/concrete/bag_of_holding.dm +++ b/code/datums/components/storage/concrete/bag_of_holding.dm @@ -1,6 +1,9 @@ /datum/component/storage/concrete/bluespace/bag_of_holding/handle_item_insertion(obj/item/W, prevent_warning = FALSE, mob/living/user) var/atom/A = parent if((istype(W, /obj/item/storage/backpack/holding) || count_by_type(W.GetAllContents(), /obj/item/storage/backpack/holding))) + var/safety = alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [A.name]?", "Abort", "Proceed") + if(safety != "Proceed" || QDELETED(A) || QDELETED(W) || QDELETED(user) || !user.canUseTopic(A, BE_CLOSE, iscarbon(user))) + return var/turf/loccheck = get_turf(A) if(is_reebe(loccheck.z)) user.visible_message("An unseen force knocks [user] to the ground!", "\"I think not!\"") @@ -8,12 +11,10 @@ return if(istype(loccheck.loc, /area/fabric_of_reality)) to_chat(user, "You can't do that here!") - var/safety = alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [A.name]?", "Abort", "Proceed") - if(safety == "Abort" || !in_range(A, user) || !A || !W || user.incapacitated()) - return to_chat(user, "The Bluespace interfaces of the two devices catastrophically malfunction!") qdel(W) playsound(loccheck,'sound/effects/supermatter.ogg', 200, 1) + user.gib(TRUE, TRUE, TRUE) for(var/turf/T in range(6,loccheck)) if(istype(T, /turf/open/space/transit)) continue @@ -22,6 +23,8 @@ M.visible_message("The bluespace collapse crushes the air towards it, pulling [M] towards the ground...") M.Knockdown(5, TRUE, TRUE) //Overrides stun absorbs. T.TerraformTurf(/turf/open/chasm/magic, /turf/open/chasm/magic) + for (var/obj/structure/ladder/unbreakable/binary/ladder in GLOB.ladders) + ladder.ActivateAlmonds() message_admins("[ADMIN_LOOKUPFLW(user)] detonated a bag of holding at [ADMIN_VERBOSEJMP(loccheck)].") log_game("[key_name(user)] detonated a bag of holding at [AREACOORD(loccheck)].") qdel(A) diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index e415e73df9..6610b9aa2b 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -54,12 +54,18 @@ /datum/component/storage/concrete/pockets/pocketprotector max_items = 3 max_w_class = WEIGHT_CLASS_TINY + var/atom/original_parent /datum/component/storage/concrete/pockets/pocketprotector/Initialize() + original_parent = parent . = ..() can_hold = typecacheof(list( //Same items as a PDA /obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, - /obj/item/clothing/mask/cigarette)) \ No newline at end of file + /obj/item/clothing/mask/cigarette)) + +/datum/component/storage/concrete/pockets/pocketprotector/real_location() + // if the component is reparented to a jumpsuit, the items still go in the protector + return original_parent diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm index eb895fd74f..14f6fe28b3 100644 --- a/code/datums/components/storage/concrete/rped.dm +++ b/code/datums/components/storage/concrete/rped.dm @@ -20,7 +20,7 @@ allow_quick_gather = TRUE allow_quick_empty = TRUE click_gather = TRUE - max_w_class = WEIGHT_CLASS_NORMAL + max_w_class = WEIGHT_CLASS_BULKY // can fit vending refills max_combined_w_class = 800 max_items = 400 display_numerical_stacking = TRUE @@ -29,5 +29,5 @@ . = ..() if(!I.get_part_rating()) if (!stop_messages) - to_chat(M, "[parent] only accepts machine par ts!") + to_chat(M, "[parent] only accepts machine parts!") return FALSE diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 86b139be22..2913adf9b9 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -67,38 +67,38 @@ closer = new(null, src) orient2hud() - RegisterSignal(COMSIG_CONTAINS_STORAGE, .proc/on_check) - RegisterSignal(COMSIG_IS_STORAGE_LOCKED, .proc/check_locked) - RegisterSignal(COMSIG_TRY_STORAGE_SHOW, .proc/signal_show_attempt) - RegisterSignal(COMSIG_TRY_STORAGE_INSERT, .proc/signal_insertion_attempt) - RegisterSignal(COMSIG_TRY_STORAGE_CAN_INSERT, .proc/signal_can_insert) - RegisterSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, .proc/signal_take_type) - RegisterSignal(COMSIG_TRY_STORAGE_FILL_TYPE, .proc/signal_fill_type) - RegisterSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, .proc/set_locked) - RegisterSignal(COMSIG_TRY_STORAGE_TAKE, .proc/signal_take_obj) - RegisterSignal(COMSIG_TRY_STORAGE_QUICK_EMPTY, .proc/signal_quick_empty) - RegisterSignal(COMSIG_TRY_STORAGE_HIDE_FROM, .proc/signal_hide_attempt) - RegisterSignal(COMSIG_TRY_STORAGE_HIDE_ALL, .proc/close_all) - RegisterSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, .proc/signal_return_inv) + RegisterSignal(parent, COMSIG_CONTAINS_STORAGE, .proc/on_check) + RegisterSignal(parent, COMSIG_IS_STORAGE_LOCKED, .proc/check_locked) + RegisterSignal(parent, COMSIG_TRY_STORAGE_SHOW, .proc/signal_show_attempt) + RegisterSignal(parent, COMSIG_TRY_STORAGE_INSERT, .proc/signal_insertion_attempt) + RegisterSignal(parent, COMSIG_TRY_STORAGE_CAN_INSERT, .proc/signal_can_insert) + RegisterSignal(parent, COMSIG_TRY_STORAGE_TAKE_TYPE, .proc/signal_take_type) + RegisterSignal(parent, COMSIG_TRY_STORAGE_FILL_TYPE, .proc/signal_fill_type) + RegisterSignal(parent, COMSIG_TRY_STORAGE_SET_LOCKSTATE, .proc/set_locked) + RegisterSignal(parent, COMSIG_TRY_STORAGE_TAKE, .proc/signal_take_obj) + RegisterSignal(parent, COMSIG_TRY_STORAGE_QUICK_EMPTY, .proc/signal_quick_empty) + RegisterSignal(parent, COMSIG_TRY_STORAGE_HIDE_FROM, .proc/signal_hide_attempt) + RegisterSignal(parent, COMSIG_TRY_STORAGE_HIDE_ALL, .proc/close_all) + RegisterSignal(parent, COMSIG_TRY_STORAGE_RETURN_INVENTORY, .proc/signal_return_inv) - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/attackby) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/attackby) - RegisterSignal(COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand) - RegisterSignal(COMSIG_ATOM_ATTACK_PAW, .proc/on_attack_hand) - RegisterSignal(COMSIG_ATOM_EMP_ACT, .proc/emp_act) - RegisterSignal(COMSIG_ATOM_ATTACK_GHOST, .proc/show_to_ghost) - RegisterSignal(COMSIG_ATOM_ENTERED, .proc/refresh_mob_views) - RegisterSignal(COMSIG_ATOM_EXITED, .proc/_remove_and_refresh) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_PAW, .proc/on_attack_hand) + RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/emp_act) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_GHOST, .proc/show_to_ghost) + RegisterSignal(parent, COMSIG_ATOM_ENTERED, .proc/refresh_mob_views) + RegisterSignal(parent, COMSIG_ATOM_EXITED, .proc/_remove_and_refresh) - RegisterSignal(COMSIG_ITEM_PRE_ATTACK, .proc/preattack_intercept) - RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/attack_self) - RegisterSignal(COMSIG_ITEM_PICKUP, .proc/signal_on_pickup) + RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, .proc/preattack_intercept) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/attack_self) + RegisterSignal(parent, COMSIG_ITEM_PICKUP, .proc/signal_on_pickup) - RegisterSignal(COMSIG_MOVABLE_THROW, .proc/close_all) + RegisterSignal(parent, COMSIG_MOVABLE_THROW, .proc/close_all) - RegisterSignal(COMSIG_CLICK_ALT, .proc/on_alt_click) - RegisterSignal(COMSIG_MOUSEDROP_ONTO, .proc/mousedrop_onto) - RegisterSignal(COMSIG_MOUSEDROPPED_ONTO, .proc/mousedrop_recieve) + RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/on_alt_click) + RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, .proc/mousedrop_onto) + RegisterSignal(parent, COMSIG_MOUSEDROPPED_ONTO, .proc/mousedrop_receive) update_actions() @@ -125,11 +125,13 @@ modeswitch_action.Grant(M) /datum/component/storage/proc/change_master(datum/component/storage/concrete/new_master) - if(!istype(new_master)) + if(new_master == src || (!isnull(new_master) && !istype(new_master))) return FALSE - master.on_slave_unlink(src) + if(master) + master.on_slave_unlink(src) master = new_master - master.on_slave_link(src) + if(master) + master.on_slave_link(src) return TRUE /datum/component/storage/proc/master() @@ -149,7 +151,7 @@ quick_empty(M) /datum/component/storage/proc/preattack_intercept(obj/O, mob/M, params) - if(!isitem(O) || !click_gather || O.SendSignal(COMSIG_CONTAINS_STORAGE)) + if(!isitem(O) || !click_gather || SEND_SIGNAL(O, COMSIG_CONTAINS_STORAGE)) return FALSE . = COMPONENT_NO_ATTACK if(locked) @@ -466,7 +468,7 @@ if(recursive) for(var/i in ret.Copy()) var/atom/A = i - A.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret, TRUE) + SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret, TRUE) return ret /datum/component/storage/proc/contents() //ONLY USE IF YOU NEED TO COPY CONTENTS OF REAL LOCATION, COPYING IS NOT AS FAST AS DIRECT ACCESS! @@ -517,19 +519,19 @@ if(force || M.CanReach(parent, view_only = TRUE)) show_to(M) -/datum/component/storage/proc/mousedrop_recieve(atom/movable/O, mob/M) +/datum/component/storage/proc/mousedrop_receive(atom/movable/O, mob/M) if(isitem(O)) var/obj/item/I = O if(iscarbon(M) || isdrone(M)) var/mob/living/L = M if(!L.incapacitated() && I == L.get_active_held_item()) - if(!I.SendSignal(COMSIG_CONTAINS_STORAGE) && can_be_inserted(I, FALSE)) //If it has storage it should be trying to dump, not insert. + if(!SEND_SIGNAL(I, COMSIG_CONTAINS_STORAGE) && can_be_inserted(I, FALSE)) //If it has storage it should be trying to dump, not insert. handle_item_insertion(I, FALSE, L) //This proc return 1 if the item can be picked up and 0 if it can't. //Set the stop_messages to stop it from printing messages /datum/component/storage/proc/can_be_inserted(obj/item/I, stop_messages = FALSE, mob/M) - if(!istype(I) || (I.flags_1 & ABSTRACT_1)) + if(!istype(I) || (I.item_flags & ABSTRACT)) return FALSE //Not an item if(I == parent) return FALSE //no paradoxes for you @@ -573,7 +575,7 @@ if(!stop_messages) to_chat(M, "[IP] cannot hold [I] as it's a storage item of the same size!") return FALSE //To prevent the stacking of same sized storage items. - if(I.flags_1 & NODROP_1) //SHOULD be handled in unEquip, but better safe than sorry. + if(I.item_flags & NODROP) //SHOULD be handled in unEquip, but better safe than sorry. to_chat(M, "\the [I] is stuck to your hand, you can't put it in \the [host]!") return FALSE var/datum/component/storage/concrete/master = master() @@ -639,10 +641,7 @@ /datum/component/storage/proc/signal_take_type(type, atom/destination, amount = INFINITY, check_adjacent = FALSE, force = FALSE, mob/user, list/inserted) if(!force) if(check_adjacent) - if(user) - if(!user.CanReach(destination) || !user.CanReach(parent)) - return FALSE - else if(!destination.CanReachStorage(parent)) + if(!user || !user.CanReach(destination) || !user.CanReach(parent)) return FALSE var/list/taking = typecache_filter_list(contents(), typecacheof(type)) if(length(taking) > amount) diff --git a/code/datums/components/swarming.dm b/code/datums/components/swarming.dm index c80b8ba13b..f97e03579a 100644 --- a/code/datums/components/swarming.dm +++ b/code/datums/components/swarming.dm @@ -8,8 +8,8 @@ offset_x = rand(-max_x, max_x) offset_y = rand(-max_y, max_y) - RegisterSignal(COMSIG_MOVABLE_CROSSED, .proc/join_swarm) - RegisterSignal(COMSIG_MOVABLE_UNCROSSED, .proc/leave_swarm) + RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/join_swarm) + RegisterSignal(parent, COMSIG_MOVABLE_UNCROSSED, .proc/leave_swarm) /datum/component/swarming/proc/join_swarm(atom/movable/AM) GET_COMPONENT_FROM(other_swarm, /datum/component/swarming, AM) diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm index 809abbfdcc..c9c1c5da3e 100644 --- a/code/datums/components/thermite.dm +++ b/code/datums/components/thermite.dm @@ -34,9 +34,9 @@ overlay = mutable_appearance('icons/effects/effects.dmi', "thermite") master.add_overlay(overlay) - RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react) - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/attackby_react) - RegisterSignal(COMSIG_ATOM_FIRE_ACT, .proc/flame_react) + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/attackby_react) + RegisterSignal(parent, COMSIG_ATOM_FIRE_ACT, .proc/flame_react) /datum/component/thermite/Destroy() var/turf/master = parent @@ -60,7 +60,7 @@ if(amount >= 50) var/burning_time = max(100, 100-amount) - master = master.ScrapeAway() + master = master.Melt() master.burn_tile() if(user) master.add_hiddenprint(user) diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm new file mode 100644 index 0000000000..a945e1d347 --- /dev/null +++ b/code/datums/components/uplink.dm @@ -0,0 +1,250 @@ +GLOBAL_LIST_EMPTY(uplinks) + +/** + * Uplinks + * + * All /obj/item(s) have a hidden_uplink var. By default it's null. Give the item one with 'new(src') (it must be in it's contents). Then add 'uses.' + * Use whatever conditionals you want to check that the user has an uplink, and then call interact() on their uplink. + * You might also want the uplink menu to open if active. Check if the uplink is 'active' and then interact() with it. +**/ +/datum/component/uplink + dupe_mode = COMPONENT_DUPE_UNIQUE + var/name = "syndicate uplink" + var/active = FALSE + var/lockable = TRUE + var/locked = TRUE + var/allow_restricted = TRUE + var/telecrystals + var/selected_cat + var/owner = null + var/datum/game_mode/gamemode + var/datum/uplink_purchase_log/purchase_log + var/list/uplink_items + var/hidden_crystals = 0 + +/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact) + if(istype(parent, /obj/item/implant)) + RegisterSignal(parent, COMSIG_IMPLANT_ACTIVATED, .proc/implant_activation) + RegisterSignal(parent, COMSIG_IMPLANT_IMPLANTING, .proc/implanting) + RegisterSignal(parent, COMSIG_IMPLANT_OTHER, .proc/old_implant) + RegisterSignal(parent, COMSIG_IMPLANT_EXISTING_UPLINK, .proc/new_implant) + else if(istype(parent, /obj/item/pda)) + RegisterSignal(parent, COMSIG_PDA_CHANGE_RINGTONE, .proc/new_ringtone) + else if(istype(parent, /obj/item/radio)) + RegisterSignal(parent, COMSIG_RADIO_NEW_FREQUENCY, .proc/new_frequency) + else if(istype(parent, /obj/item/pen)) + RegisterSignal(parent, COMSIG_PEN_ROTATED, .proc/pen_rotation) + + GLOB.uplinks += src + uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted) + + if(_owner) + owner = _owner + LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) + if(GLOB.uplink_purchase_logs_by_key[owner]) + purchase_log = GLOB.uplink_purchase_logs_by_key[owner] + else + purchase_log = new(owner, src) + lockable = _lockable + active = _enabled + gamemode = _gamemode + telecrystals = starting_tc + if(!lockable) + active = TRUE + locked = FALSE + +/datum/component/uplink/InheritComponent(datum/component/uplink/U) + lockable |= U.lockable + active |= U.active + if(!gamemode) + gamemode = U.gamemode + telecrystals += U.telecrystals + if(purchase_log && U.purchase_log) + purchase_log.MergeWithAndDel(U.purchase_log) + +/datum/component/uplink/Destroy() + GLOB.uplinks -= src + gamemode = null + return ..() + +/datum/component/uplink/proc/LoadTC(mob/user, obj/item/stack/telecrystal/TC, silent = FALSE) + if(!silent) + to_chat(user, "You slot [TC] into [parent] and charge its internal uplink.") + var/amt = TC.amount + telecrystals += amt + TC.use(amt) + +/datum/component/uplink/proc/set_gamemode(_gamemode) + gamemode = _gamemode + uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted) + +/datum/component/uplink/proc/OnAttackBy(obj/item/I, mob/user) + if(!active) + return //no hitting everyone/everything just to try to slot tcs in! + if(istype(I, /obj/item/stack/telecrystal)) + LoadTC(user, I) + for(var/category in uplink_items) + for(var/item in uplink_items[category]) + var/datum/uplink_item/UI = uplink_items[category][item] + var/path = UI.refund_path || UI.item + var/cost = UI.refund_amount || UI.cost + if(I.type == path && UI.refundable && I.check_uplink_validity()) + telecrystals += cost + purchase_log.total_spent -= cost + to_chat(user, "[I] refunded.") + qdel(I) + return + +/datum/component/uplink/proc/interact(mob/user) + if(locked) + return + active = TRUE + if(user) + ui_interact(user) + // an unlocked uplink blocks also opening the PDA or headset menu + return COMPONENT_NO_INTERACT + +/datum/component/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) + active = TRUE + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "uplink", name, 450, 750, master_ui, state) + ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input. + ui.set_style("syndicate") + ui.open() + +/datum/component/uplink/ui_data(mob/user) + if(!user.mind) + return + var/list/data = list() + data["telecrystals"] = telecrystals + data["lockable"] = lockable + + data["categories"] = list() + for(var/category in uplink_items) + var/list/cat = list( + "name" = category, + "items" = (category == selected_cat ? list() : null)) + if(category == selected_cat) + for(var/item in uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + if(I.limited_stock == 0) + continue + if(I.restricted_roles.len) + var/is_inaccessible = 1 + for(var/R in I.restricted_roles) + if(R == user.mind.assigned_role) + is_inaccessible = 0 + if(is_inaccessible) + continue + cat["items"] += list(list( + "name" = I.name, + "cost" = I.cost, + "desc" = I.desc, + )) + data["categories"] += list(cat) + return data + +/datum/component/uplink/ui_act(action, params) + if(!active) + return + + switch(action) + if("buy") + var/item = params["item"] + + var/list/buyable_items = list() + for(var/category in uplink_items) + buyable_items += uplink_items[category] + + if(item in buyable_items) + var/datum/uplink_item/I = buyable_items[item] + MakePurchase(usr, I) + . = TRUE + if("lock") + active = FALSE + locked = TRUE + telecrystals += hidden_crystals + hidden_crystals = 0 + SStgui.close_uis(src) + if("select") + selected_cat = params["category"] + return TRUE + +/datum/component/uplink/proc/MakePurchase(mob/user, datum/uplink_item/U) + if(!istype(U)) + return + if (!user || user.incapacitated()) + return + + if(telecrystals < U.cost || U.limited_stock == 0) + return + telecrystals -= U.cost + + U.purchase(user, src) + + if(U.limited_stock > 0) + U.limited_stock -= 1 + + SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(U.name)]", "[U.cost]")) + return TRUE + +// Implant signal responses + +/datum/component/uplink/proc/implant_activation() + var/obj/item/implant/implant = parent + locked = FALSE + interact(implant.imp_in) + +/datum/component/uplink/proc/implanting(list/arguments) + var/mob/user = arguments[2] + owner = "[user.key]" + +/datum/component/uplink/proc/old_implant(list/arguments, obj/item/implant/new_implant) + // It kinda has to be weird like this until implants are components + return SEND_SIGNAL(new_implant, COMSIG_IMPLANT_EXISTING_UPLINK, src) + +/datum/component/uplink/proc/new_implant(datum/component/uplink/uplink) + uplink.telecrystals += telecrystals + return COMPONENT_DELETE_NEW_IMPLANT + +// PDA signal responses + +/datum/component/uplink/proc/new_ringtone(mob/living/user, new_ring_text) + var/obj/item/pda/master = parent + if(trim(lowertext(new_ring_text)) != trim(lowertext(master.lock_code))) //why is the lock code stored on the pda? + return + locked = FALSE + interact(user) + to_chat(user, "The PDA softly beeps.") + user << browse(null, "window=pda") + master.mode = 0 + return COMPONENT_STOP_RINGTONE_CHANGE + +// Radio signal responses + +/datum/component/uplink/proc/new_frequency(list/arguments) + var/obj/item/radio/master = parent + var/frequency = arguments[1] + if(frequency != master.traitor_frequency) + return + locked = FALSE + if(ismob(master.loc)) + interact(master.loc) + +// Pen signal responses + +/datum/component/uplink/proc/pen_rotation(degrees, mob/living/carbon/user) + var/obj/item/pen/master = parent + if(degrees != master.traitor_unlock_degrees) + return + locked = FALSE + master.degrees = 0 + interact(user) + to_chat(user, "Your pen makes a clicking noise, before quickly rotating back to 0 degrees!") \ No newline at end of file diff --git a/code/datums/components/wearertargeting.dm b/code/datums/components/wearertargeting.dm index adf8acceb9..14f9d95293 100644 --- a/code/datums/components/wearertargeting.dm +++ b/code/datums/components/wearertargeting.dm @@ -1,7 +1,6 @@ // A dummy parent type used for easily making components that target an item's wearer rather than the item itself. /datum/component/wearertargeting - var/datum/component/mobhook var/list/valid_slots = list() var/list/signals = list() var/datum/callback/callback = CALLBACK(GLOBAL_PROC, .proc/pass) @@ -10,17 +9,14 @@ /datum/component/wearertargeting/Initialize() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/checkMobHook) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop) -/datum/component/wearertargeting/Destroy() - QDEL_NULL(mobhook) - return ..() - -/datum/component/wearertargeting/proc/checkMobHook(mob/user, slot) - if ((slot in valid_slots) && istype(user, mobtype)) - if (mobhook && mobhook.parent != user) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = user.AddComponent(/datum/component/redirect, signals, callback) +/datum/component/wearertargeting/proc/on_equip(mob/equipper, slot) + if((slot in valid_slots) && istype(equipper, mobtype)) + RegisterSignal(equipper, signals, callback, TRUE) else - QDEL_NULL(mobhook) + UnregisterSignal(equipper, signals) + +/datum/component/wearertargeting/proc/on_drop(mob/user) + UnregisterSignal(user, signals) diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 49c628385b..1a6bc015d6 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -26,8 +26,8 @@ if(!isopenturf(parent)) return COMPONENT_INCOMPATIBLE add_wet(strength, duration_minimum, duration_add, duration_maximum) - RegisterSignal(COMSIG_TURF_IS_WET, .proc/is_wet) - RegisterSignal(COMSIG_TURF_MAKE_DRY, .proc/dry) + RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet) + RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry) permanent = _permanent if(!permanent) START_PROCESSING(SSwet_floors, src) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 793d9f2a4b..9e14704123 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -2,6 +2,7 @@ var/gc_destroyed //Time when this object was destroyed. var/list/active_timers //for SStimer var/list/datum_components //for /datum/components + var/list/comp_lookup //for /datum/components var/datum_flags = NONE var/datum/weakref/weak_reference @@ -41,6 +42,19 @@ qdel(C, FALSE, TRUE) dc.Cut() + var/list/lookup = comp_lookup + if(lookup) + for(var/sig in lookup) + var/list/comps = lookup[sig] + if(length(comps)) + for(var/i in comps) + var/datum/component/comp = i + comp.UnregisterSignal(src, sig) + else + var/datum/component/comp = comps + comp.UnregisterSignal(src, sig) + comp_lookup = lookup = null + return QDEL_HINT_QUEUE #ifdef DATUMVAR_DEBUGGING_MODE diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 59953a4ce1..56f2243015 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -96,7 +96,7 @@ else atomsnowflake += "[D]" if(A.dir) - atomsnowflake += "
<< [dir2text(A.dir)] >>" + atomsnowflake += "
<< [dir2text(A.dir)] >>" else atomsnowflake += "[D]" diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 221dd7e804..0af4eea8ac 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -32,6 +32,7 @@ var/list/strain_data = list() //dna_spread special bullshit var/list/infectable_biotypes = list(MOB_ORGANIC) //if the disease can spread on organics, synthetics, or undead var/process_dead = FALSE //if this ticks while the host is dead + var/copy_type = null //if this is null, copies will use the type of the instance being copied /datum/disease/Destroy() . = ..() @@ -41,10 +42,8 @@ //add this disease if the host does not already have too many /datum/disease/proc/try_infect(var/mob/living/infectee, make_copy = TRUE) - if(infectee.diseases.len < DISEASE_LIMIT) - infect(infectee, make_copy) - return TRUE - return FALSE + infect(infectee, make_copy) + return TRUE //add the disease with no checks /datum/disease/proc/infect(var/mob/living/infectee, make_copy = TRUE) @@ -141,7 +140,7 @@ "bypasses_immunity", "permeability_mod", "severity", "required_organs", "needs_all_cures", "strain_data", "infectable_biotypes", "process_dead") - var/datum/disease/D = new type() + var/datum/disease/D = copy_type ? new copy_type() : new type() for(var/V in copy_vars) var/val = vars[V] if(islist(val)) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index ddb924f740..f506f44ad5 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -56,22 +56,20 @@ return ..() /datum/disease/advance/try_infect(var/mob/living/infectee, make_copy = TRUE) - var/replace_num = infectee.diseases.len + 1 - DISEASE_LIMIT + //see if we are more transmittable than enough diseases to replace them + //diseases replaced in this way do not confer immunity + var/list/advance_diseases = list() + for(var/datum/disease/advance/P in infectee.diseases) + advance_diseases += P + var/replace_num = advance_diseases.len + 1 - DISEASE_LIMIT //amount of diseases that need to be removed to fit this one if(replace_num > 0) - //see if we are more transmittable than enough diseases to replace them - //diseases replaced in this way do not confer immunity - var/list/L = list() - for(var/datum/disease/advance/P in infectee.diseases) - L += P - sortTim(L, /proc/cmp_advdisease_resistance_asc) - var/datum/disease/advance/competition = L[replace_num] - if(totalTransmittable() > competition.totalResistance()) - for(var/i in 1 to replace_num) - var/datum/disease/advance/A = L[replace_num] - A.cure(FALSE) - else - //we are not strong enough to bully our way in - return FALSE + sortTim(advance_diseases, /proc/cmp_advdisease_resistance_asc) + for(var/i in 1 to replace_num) + var/datum/disease/advance/competition = advance_diseases[i] + if(totalTransmittable() > competition.totalResistance()) + competition.cure(FALSE) + else + return FALSE //we are not strong enough to bully our way in infect(infectee, make_copy) return TRUE diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index 9574338b51..d2c4b1983f 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -1,52 +1,42 @@ // Cold +/datum/disease/advance/cold + copy_type = /datum/disease/advance /datum/disease/advance/cold/New() name = "Cold" symptoms = list(new/datum/symptom/sneeze) ..() - // Flu +/datum/disease/advance/flu + copy_type = /datum/disease/advance /datum/disease/advance/flu/New() name = "Flu" symptoms = list(new/datum/symptom/cough) ..() +//Randomly generated Disease, for virus crates and events +/datum/disease/advance/random + name = "Experimental Disease" + copy_type = /datum/disease/advance -// Voice Changing +/datum/disease/advance/random/New(max_symptoms, max_level = 8) + if(!max_symptoms) + max_symptoms = rand(1, VIRUS_SYMPTOM_LIMIT) + var/list/datum/symptom/possible_symptoms = list() + for(var/symptom in subtypesof(/datum/symptom)) + var/datum/symptom/S = symptom + if(initial(S.level) > max_level) + continue + if(initial(S.level) <= 0) //unobtainable symptoms + continue + possible_symptoms += S + for(var/i in 1 to max_symptoms) + var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms) + if(chosen_symptom) + var/datum/symptom/S = new chosen_symptom + symptoms += S + Refresh() -/datum/disease/advance/voice_change/New() - name = "Epiglottis Mutation" - symptoms = list(new/datum/symptom/voice_change) - ..() - - -// Toxin Filter - -/datum/disease/advance/heal/New() - name = "Liver Enhancer" - symptoms = list(new/datum/symptom/heal) - ..() - - -// Hallucigen - -/datum/disease/advance/hallucigen/New() - name = "Second Sight" - symptoms = list(new/datum/symptom/hallucigen) - ..() - -// Sensory Restoration - -/datum/disease/advance/mind_restoration/New() - name = "Intelligence Booster" - symptoms = list(new/datum/symptom/mind_restoration) - ..() - -// Sensory Destruction - -/datum/disease/advance/narcolepsy/New() - name = "Experimental Insomnia Cure" - symptoms = list(new/datum/symptom/narcolepsy) - ..() \ No newline at end of file + name = "Sample #[rand(1,10000)]" \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm index 4ff69680ce..e7315c6bb1 100644 --- a/code/datums/diseases/advance/symptoms/confusion.dm +++ b/code/datums/diseases/advance/symptoms/confusion.dm @@ -6,7 +6,7 @@ Confusion Little bit hidden. Lowers resistance. Decreases stage speed. - Not very transmittable. + Not very transmissibile. Intense Level. Bonus diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index 1633b41352..83d93c55e0 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -6,7 +6,7 @@ Coughing Noticable. Little Resistance. Doesn't increase stage speed much. - Transmittable. + Transmissibile. Low Level. BONUS diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm index 5509f8b07b..39ecc61956 100644 --- a/code/datums/diseases/advance/symptoms/hallucigen.dm +++ b/code/datums/diseases/advance/symptoms/hallucigen.dm @@ -50,7 +50,7 @@ Bonus if(1, 2) if(prob(base_message_chance)) if(!fake_healthy) - to_chat(M, "[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")]") + to_chat(M, "[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whisper with no source.", "Your head aches.")]") else to_chat(M, "[pick(healthy_messages)]") if(3, 4) diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm index c1952bf716..1ede16999d 100644 --- a/code/datums/diseases/advance/symptoms/itching.dm +++ b/code/datums/diseases/advance/symptoms/itching.dm @@ -6,7 +6,7 @@ Itching Not noticable or unnoticable. Resistant. Increases stage speed. - Little transmittable. + Little transmissibility. Low Level. BONUS diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm index 8946a83108..06df320496 100644 --- a/code/datums/diseases/advance/symptoms/shedding.dm +++ b/code/datums/diseases/advance/symptoms/shedding.dm @@ -33,7 +33,7 @@ BONUS var/mob/living/M = A.affected_mob if(prob(base_message_chance)) - to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]") + to_chat(M, "[pick("Your scalp itches.", "Your skin feels flaky.")]") if(ishuman(M)) var/mob/living/carbon/human/H = M switch(A.stage) diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 3648f5d707..8fe70c542f 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -6,7 +6,7 @@ Sneezing Very Noticable. Increases resistance. Doesn't increase stage speed. - Very transmittable. + Very transmissible. Low Level. Bonus diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm index 53e79f0cc1..04b0778ccd 100644 --- a/code/datums/diseases/advance/symptoms/vomit.dm +++ b/code/datums/diseases/advance/symptoms/vomit.dm @@ -6,7 +6,7 @@ Vomiting Very Very Noticable. Decreases resistance. Doesn't increase stage speed. - Little transmittable. + Little transmissibility. Medium Level. Bonus diff --git a/code/datums/diseases/parrotpossession.dm b/code/datums/diseases/parrotpossession.dm index 66395ef5a5..ee58c28761 100644 --- a/code/datums/diseases/parrotpossession.dm +++ b/code/datums/diseases/parrotpossession.dm @@ -9,7 +9,7 @@ cure_chance = 20 agent = "Avian Vengence" viable_mobtypes = list(/mob/living/carbon/human) - desc = "Subject is possesed by the vengeful spirit of a parrot. Call the priest." + desc = "Subject is possessed by the vengeful spirit of a parrot. Call the priest." severity = DISEASE_SEVERITY_MEDIUM infectable_biotypes = list(MOB_ORGANIC, MOB_UNDEAD, MOB_INORGANIC, MOB_ROBOTIC) bypasses_immunity = TRUE //2spook diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 8008c185a5..2113a99813 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -50,7 +50,10 @@ if(stage5) to_chat(affected_mob, pick(stage5)) if(jobban_isbanned(affected_mob, new_form)) - affected_mob.death(1) + if(!QDELETED(affected_mob)) + affected_mob.death(1) + return + if(QDELETED(affected_mob)) return if(affected_mob.notransform) return @@ -90,9 +93,9 @@ agent = "Kongey Vibrion M-909" new_form = /mob/living/carbon/monkey - stage1 = null - stage2 = null - stage3 = null + stage1 = list() + stage2 = list() + stage3 = list() stage4 = list("Your back hurts.", "You breathe through your mouth.", "You have a craving for bananas.", "Your mind feels clouded.") stage5 = list("You feel like monkeying around.") @@ -143,7 +146,7 @@ desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg." severity = DISEASE_SEVERITY_BIOHAZARD visibility_flags = 0 - stage1 = null + stage1 = list() stage2 = list("Your joints feel stiff.", "Beep...boop..") stage3 = list("Your joints feel very stiff.", "Your skin feels loose.", "You can feel something move...inside.") stage4 = list("Your skin feels very loose.", "You can feel... something...inside you.") @@ -175,7 +178,7 @@ desc = "This disease changes the victim into a xenomorph." severity = DISEASE_SEVERITY_BIOHAZARD visibility_flags = 0 - stage1 = null + stage1 = list() stage2 = list("Your throat feels scratchy.", "Kill...") stage3 = list("Your throat feels very scratchy.", "Your skin feels tight.", "You can feel something move...inside.") stage4 = list("Your skin feels very tight.", "Your blood boils!", "You can feel... something...inside you.") diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm index e413891e75..788107c4b6 100644 --- a/code/datums/diseases/tuberculosis.dm +++ b/code/datums/diseases/tuberculosis.dm @@ -8,7 +8,7 @@ agent = "Fungal Tubercle bacillus Cosmosis" viable_mobtypes = list(/mob/living/carbon/human) cure_chance = 5//like hell are you getting out of hell - desc = "A rare highly transmittable virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue." + desc = "A rare highly transmissible virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue." required_organs = list(/obj/item/organ/lungs) severity = DISEASE_SEVERITY_BIOHAZARD bypasses_immunity = TRUE // TB primarily impacts the lungs; it's also bacterial or fungal in nature; viral immunity should do nothing. diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 119363dfa3..9f521dac8a 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -358,7 +358,7 @@ GLOBAL_LIST_EMPTY(explosions) heavy = 5 light = 7 if("Custom Bomb") - dev = input("Devestation range (Tiles):") as num + dev = input("Devastation range (Tiles):") as num heavy = input("Heavy impact range (Tiles):") as num light = input("Light impact range (Tiles):") as num diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 26a0a0f414..4ef292d1b1 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -51,6 +51,7 @@ tele_play_specials(teleatom, curturf, effectin, asoundin) var/success = force_teleport ? teleatom.forceMove(destturf) : teleatom.Move(destturf) if (success) + log_game("[teleatom] ([key_name(teleatom)]) has teleported from [AREACOORD(curturf)] to [AREACOORD(destturf)]") tele_play_specials(teleatom, destturf, effectout, asoundout) if(ismegafauna(teleatom)) message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_VERBOSEJMP(curturf)] to [ADMIN_VERBOSEJMP(destturf)].") diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index ef4edbb6cf..9d4b86b5ef 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -178,7 +178,7 @@ if(!connected_holopad) . = world.time < (call_start_time + HOLOPAD_MAX_DIAL_TIME) if(!.) - calling_holopad.say("No answer recieved.") + calling_holopad.say("No answer received.") calling_holopad.temp = "" if(!.) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f377037301..5beb84a1f6 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -41,14 +41,10 @@ var/special_role var/list/restricted_roles = list() - var/datum/job/assigned_job - var/list/datum/objective/objectives = list() var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. - var/datum/faction/faction //associated faction - var/datum/changeling/changeling //changeling holder var/linglink var/datum/martial_art/martial_art var/static/default_martial_art = new/datum/martial_art @@ -362,7 +358,7 @@ if(creator.mind.special_role) message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.") - to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalities change, so do yours. This will never change unless your creator's body is destroyed.") + to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed.") /datum/mind/proc/show_memory(mob/recipient, window=1) if(!recipient) @@ -686,7 +682,7 @@ if(!(has_antag_datum(/datum/antagonist/traitor))) add_antag_datum(/datum/antagonist/traitor) -/datum/mind/proc/make_Changling() +/datum/mind/proc/make_Changeling() var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling) if(!C) C = add_antag_datum(/datum/antagonist/changeling) @@ -705,7 +701,7 @@ SSticker.mode.add_cultist(src,FALSE,equip=TRUE) special_role = ROLE_CULTIST to_chat(current, "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy your world is, you see that it should be open to the knowledge of Nar-Sie.") - to_chat(current, "Assist your new bretheren in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.") + to_chat(current, "Assist your new brethren in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.") /datum/mind/proc/make_Rev() var/datum/antagonist/rev/head/head = new() diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index f0da9b125f..dbe150b0fa 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -11,7 +11,7 @@ owner.visible_message("[owner] starts having a seizure!", "You have a seizure!") owner.Unconscious(200) owner.Jitter(1000) - owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy) + SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy) addtimer(CALLBACK(src, .proc/jitter_less, owner), 90) /datum/mutation/human/epilepsy/proc/jitter_less(mob/living/carbon/human/owner) @@ -96,12 +96,12 @@ //Tourettes causes you to randomly stand in place and shout. /datum/mutation/human/tourettes - name = "Tourettes Syndrome" + name = "Tourette's Syndrome" quality = NEGATIVE text_gain_indication = "You twitch." /datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner) - if(prob(10) && owner.stat == CONSCIOUS) + if(prob(10) && owner.stat == CONSCIOUS && !owner.IsStun()) owner.Stun(200) switch(rand(1, 3)) if(1) diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index d51b7dd891..7bcd056fab 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -14,7 +14,7 @@ owner.add_trait(TRAIT_STUNIMMUNE, TRAIT_HULK) owner.add_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK) owner.update_body_parts() - owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) + SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) /datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity) if(proximity) //no telekinetic hulk attack @@ -31,7 +31,7 @@ owner.remove_trait(TRAIT_STUNIMMUNE, TRAIT_HULK) owner.remove_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK) owner.update_body_parts() - owner.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hulk") + SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk") /datum/mutation/human/hulk/say_mod(message) if(message) diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 464d435afd..1f23a92906 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -32,7 +32,7 @@ owner.cure_blind(GENETIC_MUTATION) -//X-Ray Vision lets you see through walls. +//X-ray Vision lets you see through walls. /datum/mutation/human/x_ray name = "X Ray Vision" quality = POSITIVE diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index ff5a0c921c..1f5c28d3c2 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -28,11 +28,11 @@ var/list/chameleon_extras //extra types for chameleon outfit changes, mostly guns /datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - //to be overriden for customization depending on client prefs,species etc + //to be overridden for customization depending on client prefs,species etc return /datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - //to be overriden for toggling internals, id binding, access etc + //to be overridden for toggling internals, id binding, access etc return /datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index cd03cbed17..3517f92060 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -34,6 +34,16 @@ if(length(place.baseturfs) < 2) // Some snowflake shuttle shit continue place.baseturfs.Insert(3, /turf/baseturf_skipover/shuttle) + + for(var/obj/structure/closet/closet in place) + if(closet.anchorable) + closet.anchored = TRUE + + for(var/obj/structure/table/table in place) + table.AddComponent(/datum/component/magnetic_catch) + + for(var/obj/structure/rack/rack in place) + rack.AddComponent(/datum/component/magnetic_catch) //Whatever special stuff you want /datum/map_template/shuttle/proc/on_bought() @@ -94,6 +104,10 @@ port_id = "ruin" can_be_bought = FALSE +/datum/map_template/shuttle/snowdin + port_id = "snowdin" + can_be_bought = FALSE + // Shuttles start here: /datum/map_template/shuttle/emergency/airless @@ -152,7 +166,7 @@ suffix = "discoinferno" name = "Disco Inferno" description = "The glorious results of centuries of plasma research done by Nanotrasen employees. This is the reason why you are here. Get on and dance like you're on fire, burn baby burn!" - admin_notes = "Flaming hot." + admin_notes = "Flaming hot. The main area has a dance machine as well as plasma floor tiles that will be ignited by players every single time." credit_cost = 10000 /datum/map_template/shuttle/emergency/arena @@ -197,7 +211,7 @@ Probably best if you don't rifle around in whatever equipment they were transporting. I hope you're friendly with your coworkers, because there is very little space in this thing.\n\ \n\ Contains contraband armory guns, maintenance loot, and abandoned crates!" - admin_notes = "Due to origin as a solo piloted secure vessel, has an active GPS onboard labeled STV5." + admin_notes = "Due to origin as a solo piloted secure vessel, has an active GPS onboard labeled STV5. Has roughly as much space as Hi Daniel, except with explosive crates." /datum/map_template/shuttle/emergency/meta suffix = "meta" @@ -236,7 +250,9 @@ suffix = "cere" name = "Cere Station Emergency Shuttle" description = "The large, beefed-up version of the box-standard shuttle. Includes an expanded brig, fully stocked medbay, enhanced cargo storage with mech chargers, \ - an engine room stocked with various supplies, and a crew capacity of 80+ to top it all off. Live large, live Cere." + an engine room stocked with various supplies, and a crew capacity of 80+ to top it all off. Live large, live Cere." + admin_notes = "Seriously big, even larger than the Delta shuttle." + credit_cost = 10000 /datum/map_template/shuttle/emergency/supermatter suffix = "supermatter" @@ -256,6 +272,7 @@ name = "Oh, Hi Daniel" description = "How was space work today? Oh, pretty good. We got a new space station and the company will make a lot of money. What space station? I cannot tell you; it's space confidential. \ Aw, come space on. Why not? No, I can't. Anyway, how is your space roleplay life?" + admin_notes = "Tiny, with a single airlock and wooden walls. What could go wrong?" credit_cost = -5000 /datum/map_template/shuttle/emergency/goon @@ -346,7 +363,7 @@ suffix = "raven" name = "CentCom Raven Battlecruiser" description = "The CentCom Raven Battlecruiser is currently docked at the CentCom ship bay awaiting a mission, this Battlecruiser has been reassigned as an emergency escape shuttle for currently unknown reasons. The CentCom Raven Battlecruiser should comfortably fit a medium to large crew size crew and is complete with all required facitlities including a top of the range CentCom Medical Bay." - admin_notes = "The long way home" + admin_notes = "Comes with turrets that will target any simplemob." credit_cost = 12500 /datum/map_template/shuttle/arrival/box @@ -432,3 +449,11 @@ /datum/map_template/shuttle/ruin/syndicate_fighter suffix = "syndicate_fighter" name = "Syndicate Fighter" + +/datum/map_template/shuttle/snowdin/mining + suffix = "mining" + name = "Snowdin Mining Elevator" + +/datum/map_template/shuttle/snowdin/excavation + suffix = "excavation" + name = "Snowdin Excavation Elevator" diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index 65cfb85179..ee974a6e6e 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -5,6 +5,7 @@ alert_type = /obj/screen/alert/status_effect/freon var/icon/cube var/can_melt = TRUE + var/datum/weakref/redirect_component /obj/screen/alert/status_effect/freon name = "Frozen Solid" @@ -12,6 +13,7 @@ icon_state = "frozen" /datum/status_effect/freon/on_apply() + redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST), CALLBACK(src, .proc/owner_resist))) if(!owner.stat) to_chat(owner, "You become frozen in a cube!") cube = icon('icons/effects/freeze.dmi', "ice_cube") @@ -24,12 +26,22 @@ if(can_melt && owner.bodytemperature >= BODYTEMP_NORMAL) qdel(src) +/datum/status_effect/freon/proc/owner_resist() + to_chat(owner, "You start breaking out of the ice cube!") + if(do_mob(owner, owner, 40)) + if(!QDELETED(src)) + to_chat(owner, "You break out of the ice cube!") + owner.remove_status_effect(/datum/status_effect/freon) + owner.update_canmove() + /datum/status_effect/freon/on_remove() if(!owner.stat) to_chat(owner, "The cube melts!") owner.cut_overlay(cube) owner.adjust_bodytemperature(100) owner.update_canmove() + qdel(redirect_component.resolve()) + redirect_component = null /datum/status_effect/freon/watcher duration = 8 diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index c940b2083a..655863e0e0 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -47,3 +47,25 @@ /datum/status_effect/syphon_mark/on_remove() get_kill() . = ..() + +/obj/screen/alert/status_effect/in_love + name = "In Love" + desc = "You feel so wonderfully in love!" + icon_state = "in_love" + +/datum/status_effect/in_love + id = "in_love" + duration = -1 + status_type = STATUS_EFFECT_UNIQUE + alert_type = /obj/screen/alert/status_effect/in_love + var/mob/living/date + +/datum/status_effect/in_love/on_creation(mob/living/new_owner, mob/living/love_interest) + . = ..() + if(.) + date = love_interest + linked_alert.desc = "You're in love with [date.real_name]! How lovely." + +/datum/status_effect/in_love/tick() + if(date) + new /obj/effect/temp_visual/love_heart/invisible(get_turf(date.loc), owner) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 68e259441f..7bbcbe6171 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -71,7 +71,7 @@ /datum/quirk/family_heirloom/post_add() if(where == "in your backpack") var/mob/living/carbon/human/H = quirk_holder - H.back.SendSignal(COMSIG_TRY_STORAGE_SHOW, H) + SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H) to_chat(quirk_holder, "There is a precious family [heirloom.name] [where], passed down from generation to generation. Keep it safe!") var/list/family_name = splittext(quirk_holder.real_name, " ") @@ -79,11 +79,11 @@ /datum/quirk/family_heirloom/on_process() if(heirloom in quirk_holder.GetAllContents()) - quirk_holder.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") - quirk_holder.SendSignal(COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom) + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom) else - quirk_holder.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") - quirk_holder.SendSignal(COMSIG_ADD_MOOD_EVENT, "family_heirloom_missing", /datum/mood_event/family_heirloom_missing) + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom_missing", /datum/mood_event/family_heirloom_missing) /datum/quirk/family_heirloom/clone_data() return heirloom @@ -148,9 +148,9 @@ if(quirk_holder.m_intent == MOVE_INTENT_RUN) to_chat(quirk_holder, "Easy, easy, take it slow... you're in the dark...") quirk_holder.toggle_move_intent() - quirk_holder.SendSignal(COMSIG_ADD_MOOD_EVENT, "nyctophobia", /datum/mood_event/nyctophobia) + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "nyctophobia", /datum/mood_event/nyctophobia) else - quirk_holder.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "nyctophobia") + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia") diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index 9f4d8f891f..a3b666dcc6 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -17,7 +17,7 @@ var/weather_overlay var/weather_color = null - var/end_message = "The wind relents its assault." //Displayed once the wather is over + var/end_message = "The wind relents its assault." //Displayed once the weather is over var/end_duration = 300 //In deciseconds, how long the "wind-down" graphic will appear before vanishing entirely var/end_sound var/end_overlay diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 484f11fc09..d7c34da34a 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -167,3 +167,16 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) if(isrevenant(M) || iseminence(M) || iswizard(M)) return TRUE return FALSE + +datum/atom_hud/alternate_appearance/basic/onePerson + var/mob/seer + +/datum/atom_hud/alternate_appearance/basic/onePerson/mobShouldSee(mob/M) + if(M == seer) + return TRUE + return FALSE + +/datum/atom_hud/alternate_appearance/basic/onePerson/New(key, image/I, mob/living/M) + ..(key, I, FALSE) + seer = M + add_hud_to(seer) diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index d65d28507c..558c197858 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -53,7 +53,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "start" requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY //EXTRA @@ -62,7 +62,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Asteroid" icon_state = "asteroid" requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY blob_allowed = FALSE //Nope, no winning on the asteroid as a blob. Gotta eat the station. valid_territory = FALSE ambientsounds = MINING diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index fade32535e..8aa910b2e2 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -25,7 +25,7 @@ var/lightswitch = TRUE var/requires_power = TRUE - var/always_unpowered = FALSE // This gets overriden to 1 for space in area/Initialize(). + var/always_unpowered = FALSE // This gets overridden to 1 for space in area/Initialize(). var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) @@ -44,7 +44,7 @@ var/static_light = 0 var/static_environ - var/has_gravity = FALSE + var/has_gravity = 0 var/noteleport = FALSE //Are you forbidden from teleporting to the area? (centcom, mobs, wizard, hand teleporter) var/hidden = FALSE //Hides area from player Teleport function. var/safe = FALSE //Is the area teleport-safe: no space / radiation / aggresive mobs / other dangers @@ -409,8 +409,8 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/Entered(atom/movable/M) set waitfor = FALSE - SendSignal(COMSIG_AREA_ENTERED, M) - M.SendSignal(COMSIG_ENTER_AREA, src) //The atom that enters the area + SEND_SIGNAL(src, COMSIG_AREA_ENTERED, M) + SEND_SIGNAL(M, COMSIG_ENTER_AREA, src) //The atom that enters the area if(!isliving(M)) return @@ -435,8 +435,8 @@ GLOBAL_LIST_EMPTY(teleportlocs) addtimer(CALLBACK(L.client, /client/proc/ResetAmbiencePlayed), 600) /area/Exited(atom/movable/M) - SendSignal(COMSIG_AREA_EXITED, M) - M.SendSignal(COMSIG_EXIT_AREA, src) //The atom that exits the area + SEND_SIGNAL(src, COMSIG_AREA_EXITED, M) + SEND_SIGNAL(M, COMSIG_EXIT_AREA, src) //The atom that exits the area /client/proc/ResetAmbiencePlayed() played = FALSE @@ -444,16 +444,39 @@ GLOBAL_LIST_EMPTY(teleportlocs) /atom/proc/has_gravity(turf/T) if(!T || !isturf(T)) T = get_turf(src) + + if(!T) + return 0 + + //Gravity forced on the atom + var/datum/component/forced_gravity/FG = GetComponent(/datum/component/forced_gravity) + if(FG) + if(!FG.ignore_space && isspaceturf(T)) + return 0 + else + return FG.gravity + + //Gravity forced on the turf + FG = T.GetComponent(/datum/component/forced_gravity) + if(FG) + if(!FG.ignore_space && isspaceturf(T)) + return 0 + else + return FG.gravity + var/area/A = get_area(T) if(isspaceturf(T)) // Turf never has gravity - return FALSE - else if(A && A.has_gravity) // Areas which always has gravity - return TRUE + return 0 + else if(A.has_gravity) // Areas which always has gravity + return A.has_gravity else // There's a gravity generator on our z level - if(T && GLOB.gravity_generators["[T.z]"] && length(GLOB.gravity_generators["[T.z]"])) - return TRUE - return FALSE + if(GLOB.gravity_generators["[T.z]"]) + var/max_grav = 0 + for(var/obj/machinery/gravity_generator/main/G in GLOB.gravity_generators["[T.z]"]) + max_grav = max(G.setting,max_grav) + return max_grav + return SSmapping.level_trait(T.z, ZTRAIT_GRAVITY) /area/proc/setup(a_name) name = a_name diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm index cc2e317d85..b724c92607 100644 --- a/code/game/area/areas/away_content.dm +++ b/code/game/area/areas/away_content.dm @@ -7,7 +7,7 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" /area/awaymission name = "Strange Location" icon_state = "away" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY ambientsounds = AWAY_MISSION /area/awaymission/beach @@ -15,13 +15,13 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" icon_state = "away" dynamic_lighting = DYNAMIC_LIGHTING_DISABLED requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg','sound/ambience/ambiodd.ogg','sound/ambience/ambinice.ogg') /area/awaymission/errorroom name = "Super Secret Room" dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY /area/awaymission/vr name = "Virtual Reality" diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index c2719f57eb..30de1314c9 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -6,7 +6,7 @@ icon_state = "centcom" dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY noteleport = TRUE blob_allowed = FALSE //Should go without saying, no blobs should take over centcom as a win condition. flags_1 = NONE @@ -36,7 +36,7 @@ icon_state = "yellow" dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY flags_1 = NONE /area/tdome/arena @@ -74,7 +74,7 @@ icon_state = "yellow" dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY noteleport = TRUE flags_1 = NONE @@ -84,7 +84,7 @@ icon_state = "yellow" requires_power = FALSE noteleport = TRUE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY flags_1 = NONE //Syndicates @@ -92,7 +92,7 @@ name = "Syndicate Mothership" icon_state = "syndie-ship" requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY noteleport = TRUE blob_allowed = FALSE //Not... entirely sure this will ever come up... but if the bus makes blobs AND ops, it shouldn't aim for the ops to win. flags_1 = NONE @@ -120,8 +120,7 @@ name = "Capture the Flag" icon_state = "yellow" requires_power = FALSE - has_gravity = TRUE - flags_1 = NO_DEATHRATTLE_1 + has_gravity = STANDARD_GRAVITY /area/ctf/control_room name = "Control Room A" @@ -156,7 +155,7 @@ name = "Reebe" icon_state = "yellow" requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY noteleport = TRUE hidden = TRUE ambientsounds = REEBE diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index 493f36dd8d..2ca9167bb2 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -2,7 +2,7 @@ /area/mine icon_state = "mining" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY /area/mine/explored name = "Mine" @@ -80,7 +80,7 @@ /area/lavaland icon_state = "mining" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY flags_1 = NONE /area/lavaland/surface diff --git a/code/game/area/areas/ruins/_ruins.dm b/code/game/area/areas/ruins/_ruins.dm index 087842c5d1..b97c3f0ef4 100644 --- a/code/game/area/areas/ruins/_ruins.dm +++ b/code/game/area/areas/ruins/_ruins.dm @@ -3,7 +3,7 @@ /area/ruin name = "\improper Unexplored Location" icon_state = "away" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY hidden = TRUE dynamic_lighting = DYNAMIC_LIGHTING_FORCED ambientsounds = RUINS diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index c52119361b..00a7fed012 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -5,7 +5,7 @@ blob_allowed = FALSE //Nope, no winning in space as a blob. Gotta eat the station. /area/ruin/space/has_grav - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY /area/ruin/space/has_grav/powered requires_power = FALSE @@ -413,13 +413,13 @@ /area/ruin/space/djstation name = "Ruskie DJ Station" icon_state = "DJ" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY blob_allowed = FALSE //Nope, no winning on the DJ station as a blob. Gotta eat the main station. /area/ruin/space/djstation/solars name = "DJ Station Solars" icon_state = "DJ" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY //ABANDONED TELEPORTER diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 90a6bbd3b6..8e23614db0 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -6,7 +6,7 @@ name = "Shuttle" requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_FORCED - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY always_unpowered = FALSE valid_territory = FALSE icon_state = "shuttle" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f81da22d7f..32e982e8e6 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -20,13 +20,16 @@ var/list/atom_colours //used to store the different colors on an atom //its inherent color, the colored paint applied on it, special color effect etc... - var/list/our_overlays //our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate var/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4. + var/list/remove_overlays // a very temporary list of overlays to remove + var/list/add_overlays // a very temporary list of overlays to add var/datum/proximity_monitor/proximity_monitor var/buckle_message_cooldown = 0 var/fingerprintslast + var/list/filter_data //For handling persistent filters + /atom/New(loc, ...) //atom creation method that preloads variables at creation if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New() @@ -151,7 +154,7 @@ return FALSE /atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) - SendSignal(COMSIG_ATOM_HULK_ATTACK, user) + SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) if(does_attack_animation) user.changeNext_move(CLICK_CD_MELEE) add_logs(user, src, "punched", "hulk powers") @@ -220,13 +223,13 @@ return /atom/proc/emp_act(severity) - var/protection = SendSignal(COMSIG_ATOM_EMP_ACT, severity) + var/protection = SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity) if(!(protection & EMP_PROTECT_WIRES) && istype(wires)) wires.emp_pulse() return protection // Pass the protection value collected here upwards /atom/proc/bullet_act(obj/item/projectile/P, def_zone) - SendSignal(COMSIG_ATOM_BULLET_ACT, P, def_zone) + SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone) . = P.on_hit(src, 0, def_zone) /atom/proc/in_contents_of(container)//can take class or object instance as argument @@ -243,7 +246,7 @@ if(article) . = "[article] [src]" override[EXAMINE_POSITION_ARTICLE] = article - if(SendSignal(COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) + if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) . = override.Join("") /atom/proc/get_examine_string(mob/user, thats = FALSE) @@ -275,7 +278,7 @@ else to_chat(user, "It's empty.") - SendSignal(COMSIG_PARENT_EXAMINE, user) + SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user) /atom/proc/relaymove(mob/user) if(buckle_message_cooldown <= world.time) @@ -289,14 +292,14 @@ /atom/proc/ex_act(severity, target) set waitfor = FALSE contents_explosion(severity, target) - SendSignal(COMSIG_ATOM_EX_ACT, severity, target) + SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) /atom/proc/blob_act(obj/structure/blob/B) - SendSignal(COMSIG_ATOM_BLOB_ACT, B) + SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B) return /atom/proc/fire_act(exposed_temperature, exposed_volume) - SendSignal(COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) + SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) return /atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked) @@ -364,28 +367,28 @@ return /atom/proc/singularity_pull(obj/singularity/S, current_size) - SendSignal(COMSIG_ATOM_SING_PULL, S, current_size) + SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, S, current_size) /atom/proc/acid_act(acidpwr, acid_volume) - SendSignal(COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume) + SEND_SIGNAL(src, COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume) /atom/proc/emag_act() - SendSignal(COMSIG_ATOM_EMAG_ACT) + SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT) /atom/proc/rad_act(strength) - SendSignal(COMSIG_ATOM_RAD_ACT, strength) + SEND_SIGNAL(src, COMSIG_ATOM_RAD_ACT, strength) /atom/proc/narsie_act() - SendSignal(COMSIG_ATOM_NARSIE_ACT) + SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT) /atom/proc/ratvar_act() - SendSignal(COMSIG_ATOM_RATVAR_ACT) + SEND_SIGNAL(src, COMSIG_ATOM_RATVAR_ACT) /atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) return FALSE /atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - SendSignal(COMSIG_ATOM_RCD_ACT, user, the_rcd, passed_mode) + SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, passed_mode) return FALSE /atom/proc/storage_contents_dump_act(obj/item/storage/src_object, mob/user) @@ -413,7 +416,7 @@ //This proc is called on the location of an atom when the atom is Destroy()'d /atom/proc/handle_atom_del(atom/A) - SendSignal(COMSIG_ATOM_CONTENTS_DEL, A) + SEND_SIGNAL(src, COMSIG_ATOM_CONTENTS_DEL, A) //called when the turf the atom resides on is ChangeTurfed /atom/proc/HandleTurfChange(turf/T) @@ -432,7 +435,7 @@ //Hook for running code when a dir change occurs /atom/proc/setDir(newdir) - SendSignal(COMSIG_ATOM_DIR_CHANGE, dir, newdir) + SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) dir = newdir /atom/proc/mech_melee_attack(obj/mecha/M) @@ -527,10 +530,15 @@ return L.AllowDrop() ? L : get_turf(L) /atom/Entered(atom/movable/AM, atom/oldLoc) - SendSignal(COMSIG_ATOM_ENTERED, AM, oldLoc) + SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc) + +/atom/Exit(atom/movable/AM, atom/newLoc) + . = ..() + if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, AM, newLoc) & COMPONENT_ATOM_BLOCK_EXIT) + return FALSE /atom/Exited(atom/movable/AM, atom/newLoc) - SendSignal(COMSIG_ATOM_EXITED, AM, newLoc) + SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, newLoc) /atom/proc/return_temperature() return @@ -579,3 +587,25 @@ /atom/proc/GenerateTag() return + +// Filter stuff +/atom/movable/proc/add_filter(name,priority,list/params) + if(!filter_data) + filter_data = list() + var/list/p = params.Copy() + p["priority"] = priority + filter_data[name] = p + update_filters() + +/atom/movable/proc/update_filters() + filters = null + sortTim(filter_data,associative = TRUE) + for(var/f in filter_data) + var/list/data = filter_data[f] + var/list/arguments = data.Copy() + arguments -= "priority" + filters += filter(arglist(arguments)) + +/atom/movable/proc/get_filter(name) + if(filter_data && filter_data[name]) + return filters[filter_data.Find(name)] \ No newline at end of file diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index b13c414f78..211bb35263 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -29,6 +29,7 @@ var/movement_type = GROUND //Incase you have multiple types, you automatically use the most useful one. IE: Skating on ice, flippers on water, flying over chasm/space, etc. var/atom/movable/pulling var/grab_state = 0 + var/throwforce = 0 /atom/movable/vv_edit_var(var_name, var_value) var/static/list/banned_edits = list("step_x", "step_y", "step_size") @@ -239,7 +240,7 @@ //Called after a successful Move(). By this point, we've already moved /atom/movable/proc/Moved(atom/OldLoc, Dir, Forced = FALSE) - SendSignal(COMSIG_MOVABLE_MOVED, OldLoc, Dir, Forced) + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, OldLoc, Dir, Forced) if (!inertia_moving) inertia_next_move = world.time + inertia_move_delay newtonian_move(Dir) @@ -277,16 +278,16 @@ // This is automatically called when something enters your square //oldloc = old location on atom, inserted when forceMove is called and ONLY when forceMove is called! /atom/movable/Crossed(atom/movable/AM, oldloc) - SendSignal(COMSIG_MOVABLE_CROSSED, AM) + SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM) /atom/movable/Uncrossed(atom/movable/AM) - SendSignal(COMSIG_MOVABLE_UNCROSSED, AM) + SEND_SIGNAL(src, COMSIG_MOVABLE_UNCROSSED, AM) //This is tg's equivalent to the byond bump, it used to be called bump with a second arg //to differentiate it, naturally everyone forgot about this immediately and so some things //would bump twice, so now it's called Collide /atom/movable/proc/Collide(atom/A) - SendSignal(COMSIG_MOVABLE_COLLIDE, A) + SEND_SIGNAL(src, COMSIG_MOVABLE_COLLIDE, A) if(A) if(throwing) throwing.hit_atom(A) @@ -353,7 +354,7 @@ loc = null /atom/movable/proc/onTransitZ(old_z,new_z) - SendSignal(COMSIG_MOVABLE_Z_CHANGED, old_z, new_z) + SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_z, new_z) for (var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care. var/atom/movable/AM = item AM.onTransitZ(old_z,new_z) @@ -396,7 +397,7 @@ /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) set waitfor = 0 - SendSignal(COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) return hit_atom.hitby(src) /atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked) @@ -409,7 +410,7 @@ /atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback) //If this returns FALSE then callback will not be called. . = FALSE - if (!target || (flags_1 & NODROP_1) || speed <= 0) + if (!target || speed <= 0) return if (pulledby) @@ -481,7 +482,7 @@ if(spin) SpinAnimation(5, 1) - SendSignal(COMSIG_MOVABLE_THROW, TT, spin) + SEND_SIGNAL(src, COMSIG_MOVABLE_THROW, TT, spin) SSthrowing.processing[src] = TT if (SSthrowing.state == SS_PAUSED && length(SSthrowing.currentrun)) SSthrowing.currentrun[src] = TT @@ -564,6 +565,7 @@ I = image('icons/effects/effects.dmi', A, visual_effect_icon, A.layer + 0.1) else if(used_item) I = image(icon = used_item, loc = A, layer = A.layer + 0.1) + I.plane = GAME_PLANE // Scale the icon. I.transform *= 0.75 diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index e682960e2e..9a60fdef31 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -175,6 +175,11 @@ if(has_trait(TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" else if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH))) + if(tod) + var/tdelta = round(world.time - timeofdeath) + if(tdelta < (DEFIB_TIME_LIMIT * 10)) + holder.icon_state = "huddefib" + return holder.icon_state = "huddead" else switch(virus_threat) @@ -248,7 +253,7 @@ if("Incarcerated") holder.icon_state = "hudincarcerated" return - if("Parolled") + if("Paroled") holder.icon_state = "hudparolled" return if("Discharged") diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 242eb61478..07e31cb24d 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -52,6 +52,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th changeling.restricted_roles = restricted_jobs return 1 else + setup_error = "Not enough changeling candidates" return 0 /datum/game_mode/changeling/post_setup() @@ -82,10 +83,10 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th return if(changelings.len <= (changelingcap - 2) || prob(100 - (csc * 2))) if(ROLE_CHANGELING in character.client.prefs.be_special) - if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, ROLE_SYNDICATE)) + if(!jobban_isbanned(character, ROLE_CHANGELING) && !QDELETED(character) && !jobban_isbanned(character, ROLE_SYNDICATE) && !QDELETED(character)) if(age_check(character.client)) if(!(character.job in restricted_jobs)) - character.mind.make_Changling() + character.mind.make_Changeling() changelings += character.mind /datum/game_mode/changeling/generate_report() diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index d2f5accea4..3f5abe531b 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -69,11 +69,13 @@ return if(changelings.len <= (changelingcap - 2) || prob(100 / (csc * 4))) if(ROLE_CHANGELING in character.client.prefs.be_special) - if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, ROLE_SYNDICATE)) + if(!jobban_isbanned(character, ROLE_CHANGELING) && !QDELETED(character) && !jobban_isbanned(character, ROLE_SYNDICATE) && !QDELETED(character)) if(age_check(character.client)) if(!(character.job in restricted_jobs)) - character.mind.make_Changling() + character.mind.make_Changeling() changelings += character.mind + if(QDELETED(character)) + return ..() /datum/game_mode/traitor/changeling/generate_report() diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index fc0cfc2879..499d441a57 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -146,8 +146,8 @@ Credit where due: var/list/errorList = list() SSmapping.LoadGroup(errorList, "Reebe", "map_files/generic", "City_of_Cogs.dmm", default_traits = ZTRAITS_REEBE, silent = TRUE) if(errorList.len) // reebe failed to load - message_admins("Rebee failed to load!") - log_game("Rebee failed to load!") + message_admins("Reebe failed to load!") + log_game("Reebe failed to load!") return FALSE if(CONFIG_GET(flag/protect_roles_from_antagonist)) restricted_jobs += protected_jobs diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm index c7212a671c..0d5f0691c4 100644 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm @@ -42,17 +42,17 @@ var/obj/item/clothing/C if(!H.w_uniform || H.dropItemToGround(H.w_uniform)) C = new /obj/item/clothing/under/rank/clown(H) - C.flags_1 |= NODROP_1 //mwahaha + C.item_flags |= NODROP //mwahaha H.equip_to_slot_or_del(C, SLOT_W_UNIFORM) if(!H.shoes || H.dropItemToGround(H.shoes)) C = new /obj/item/clothing/shoes/clown_shoes(H) - C.flags_1 |= NODROP_1 + C.item_flags |= NODROP H.equip_to_slot_or_del(C, SLOT_SHOES) if(!H.wear_mask || H.dropItemToGround(H.wear_mask)) C = new /obj/item/clothing/mask/gas/clown_hat(H) - C.flags_1 |= NODROP_1 + C.item_flags |= NODROP H.equip_to_slot_or_del(C, SLOT_WEAR_MASK) H.dna.add_mutation(CLOWNMUT) diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 75df27ffca..12d3106c8d 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -48,7 +48,7 @@ /obj/item/reagent_containers/spray/waterflower/lube) implants = list(/obj/item/implant/sad_trombone) - uplink_type = /obj/item/radio/uplink/clownop + uplink_type = /obj/item/uplink/clownop /datum/outfit/syndicate/clownop/no_crystals tc = 0 diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index 067bb8c84c..bf401e5ad2 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -11,10 +11,10 @@ list_reagents = list("lube" = 30) //COMBAT CLOWN SHOES -//Clown shoes with combat stats and noslip. Of course they still squeek. +//Clown shoes with combat stats and noslip. Of course they still squeak. /obj/item/clothing/shoes/clown_shoes/combat name = "combat clown shoes" - desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeek at 100% capacity." + desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeak at 100% capacity." clothing_flags = NOSLIP slowdown = SHOES_SLOWDOWN armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) @@ -216,11 +216,11 @@ /obj/item/clothing/mask/fakemoustache/sticky/Initialize() . = ..() - flags_1 |= NODROP_1 + item_flags |= NODROP addtimer(CALLBACK(src, .proc/unstick), unstick_time) /obj/item/clothing/mask/fakemoustache/sticky/proc/unstick() - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP //DARK H.O.N.K. AND CLOWN MECH WEAPONS diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index de9422d6f7..4e9a9cc6e7 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -81,8 +81,11 @@ cultist.restricted_roles = restricted_jobs log_game("[key_name(cultist)] has been selected as a cultist") - - return (cultists_to_cult.len>=required_enemies) + if(cultists_to_cult.len>=required_enemies) + return TRUE + else + setup_error = "Not enough cultist candidates" + return FALSE /datum/game_mode/cult/post_setup() diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm index 2e897539d8..0f2e8f7858 100644 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ b/code/game/gamemodes/devil/devil_game_mode.dm @@ -45,6 +45,7 @@ antag_candidates.Remove(devil) if(devils.len < required_enemies) + setup_error = "Not enough devil candidates" return 0 return 1 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index fbf62886e3..5b23abea26 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -49,6 +49,7 @@ var/gamemode_ready = FALSE //Is the gamemode all set up and ready to start checking for ending conditions. var/flipseclevel = FALSE //CIT CHANGE - adds a 10% chance for the alert level to be the opposite of what the gamemode is supposed to have + var/setup_error //What stopepd setting up the mode. /datum/game_mode/proc/announce() //Shows the gamemode's name and a fast description. to_chat(world, "The gamemode is: [name]!") @@ -98,6 +99,7 @@ if(sql) var/datum/DBQuery/query_round_game_mode = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET [sql] WHERE id = [GLOB.round_id]") query_round_game_mode.Execute() + qdel(query_round_game_mode) if(report) addtimer(CALLBACK(src, .proc/send_intercept, 0), rand(waittime_l, waittime_h)) generate_station_goals() @@ -364,7 +366,7 @@ for(var/mob/dead/new_player/player in players) if(player.client && player.ready == PLAYER_READY_TO_PLAY) if(role in player.client.prefs.be_special) - if(!jobban_isbanned(player, ROLE_SYNDICATE) && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans + if(!jobban_isbanned(player, ROLE_SYNDICATE) && !QDELETED(player) && !jobban_isbanned(player, role) && !QDELETED(player)) //Nodrak/Carn: Antag Job-bans if(age_check(player.client)) //Must be older than the minimum age candidates += player.mind // Get a list of all the people who want to be the antagonist for this round @@ -378,7 +380,7 @@ for(var/mob/dead/new_player/player in players) if(player.client && player.ready == PLAYER_READY_TO_PLAY) if(!(role in player.client.prefs.be_special)) // We don't have enough people who want to be antagonist, make a separate list of people who don't want to be one - if(!jobban_isbanned(player, ROLE_SYNDICATE) && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans + if(!jobban_isbanned(player, ROLE_SYNDICATE) && !QDELETED(player) && !jobban_isbanned(player, role) && !QDELETED(player) ) //Nodrak/Carn: Antag Job-bans drafted += player.mind if(restricted_jobs) diff --git a/code/game/gamemodes/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm index 8f7bedd4dd..76460ffbb8 100644 --- a/code/game/gamemodes/monkey/monkey.dm +++ b/code/game/gamemodes/monkey/monkey.dm @@ -40,6 +40,7 @@ antag_candidates -= carrier if(!carriers.len) + setup_error = "No monkey candidates" return FALSE return TRUE diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 973de8cde1..4eb5dc1c6e 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -33,6 +33,7 @@ log_game("[key_name(new_op)] has been selected as a nuclear operative") return TRUE else + setup_error = "Not enough nuke op candidates" return FALSE //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// @@ -134,7 +135,7 @@ var/tc = 25 var/command_radio = FALSE - var/uplink_type = /obj/item/radio/uplink/nuclear + var/uplink_type = /obj/item/uplink/nuclear /datum/outfit/syndicate/leader @@ -154,7 +155,7 @@ R.command = TRUE if(tc) - var/obj/item/radio/uplink/U = new uplink_type(H, H.key, tc) + var/obj/item/U = new uplink_type(H, H.key, tc) H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 7559e21e21..b32460dabc 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -279,7 +279,7 @@ GLOBAL_LIST_EMPTY(objectives) if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) return TRUE for(var/mob/living/player in GLOB.player_list) - if(get_area(player) in SSshuttle.emergency.shuttle_areas && player.mind && player.stat != DEAD && ishuman(player)) + if((get_area(player) in SSshuttle.emergency.shuttle_areas) && player.mind && player.stat != DEAD && ishuman(player)) var/mob/living/carbon/human/H = player if(H.dna.species.id != "human") return FALSE @@ -621,7 +621,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) absorbedcount += changeling.absorbedcount for(var/datum/antagonist/changeling/changeling2 in GLOB.antagonists) - if(!changeling2.owner || !changeling2.stored_profiles || changeling2.absorbedcount < absorbedcount) + if(!changeling2.owner || changeling2.owner == owner || !changeling2.stored_profiles || changeling2.absorbedcount < absorbedcount) continue return FALSE return TRUE diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 592d930f7d..e7ea46f573 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -58,6 +58,7 @@ lenin.restricted_roles = restricted_jobs if(headrev_candidates.len < required_enemies) + setup_error = "Not enough headrev candidates" return FALSE return TRUE diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 6884cdee55..b5b5e7a706 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -56,7 +56,13 @@ log_game("[key_name(traitor)] has been selected as a [traitor_name]") antag_candidates.Remove(traitor) - return !traitors_required || pre_traitors.len > 0 + var/enough_tators = !traitors_required || pre_traitors.len > 0 + + if(!enough_tators) + setup_error = "Not enough traitor candidates" + return FALSE + else + return TRUE /datum/game_mode/traitor/post_setup() @@ -79,7 +85,7 @@ return if((SSticker.mode.traitors.len + pre_traitors.len) <= (traitorcap - 2) || prob(100 / (tsc * 2))) if(ROLE_TRAITOR in character.client.prefs.be_special) - if(!jobban_isbanned(character, ROLE_TRAITOR) && !jobban_isbanned(character, ROLE_SYNDICATE)) + if(!jobban_isbanned(character, ROLE_TRAITOR) && !QDELETED(character) && !jobban_isbanned(character, ROLE_SYNDICATE) && !QDELETED(character)) if(age_check(character.client)) if(!(character.job in restricted_jobs)) add_latejoin_traitor(character.mind) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 32d17fec2c..d27f977575 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -25,11 +25,11 @@ wizard.special_role = ROLE_WIZARD log_game("[key_name(wizard)] has been selected as a Wizard") //TODO: Move these to base antag datum if(GLOB.wizardstart.len == 0) - to_chat(wizard.current, "A starting location for you could not be found, please report this bug!") - return 0 + setup_error = "No wizard starting location found" + return FALSE for(var/datum/mind/wiz in wizards) wiz.current.forceMove(pick(GLOB.wizardstart)) - return 1 + return TRUE /datum/game_mode/wizard/post_setup() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 7f661b4556..c1adb0e9d0 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -414,12 +414,12 @@ Class Procs: var/obj/item/stack/SN = new SB.merge_type(null,used_amt) component_parts += SN else - if(W.SendSignal(COMSIG_TRY_STORAGE_TAKE, B, src)) + if(SEND_SIGNAL(W, COMSIG_TRY_STORAGE_TAKE, B, src)) component_parts += B B.moveToNullspace() - W.SendSignal(COMSIG_TRY_STORAGE_INSERT, A, null, null, TRUE) + SEND_SIGNAL(W, COMSIG_TRY_STORAGE_INSERT, A, null, null, TRUE) component_parts -= A - to_chat(user, "[A.name] replaced with [B.name].") + to_chat(user, "[capitalize(A.name)] replaced with [B.name].") shouldplaysound = 1 //Only play the sound when parts are actually replaced! break RefreshParts() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 2a753fc333..84059e8029 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -46,7 +46,7 @@ ) /obj/machinery/autolathe/Initialize() - AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), 0, FALSE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) + AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) . = ..() wires = new /datum/wires/autolathe(src) @@ -154,6 +154,7 @@ var/multiplier = text2num(href_list["multiplier"]) var/is_stack = ispath(being_built.build_path, /obj/item/stack) + multiplier = CLAMP(multiplier,1,50) ///////////////// diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index f974f1b39b..879be046c9 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -95,7 +95,7 @@ update_icon() return - if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1)) + if(user.a_intent != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) return attack_hand(user) else return ..() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5cf652f00d..3e8e3afc98 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -41,6 +41,16 @@ var/internal_light = TRUE //Whether it can light up when an AI views it +/obj/machinery/camera/preset/toxins //Bomb test site in space + name = "Hardened Bomb-Test Camera" + desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top." + c_tag = "Bomb Testing Site" + network = list("rd","toxins") + use_power = NO_POWER_USE //Test site is an unpowered area + invuln = TRUE + light_range = 10 + start_active = TRUE + /obj/machinery/camera/Initialize(mapload, obj/structure/camera_assembly/CA) . = ..() for(var/i in network) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 7eac36dc96..decfebddb9 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -13,7 +13,7 @@ icon = 'icons/obj/machines/camera.dmi' icon_state = "camera1" max_integrity = 150 - // Motion, EMP-Proof, X-Ray + // Motion, EMP-Proof, X-ray var/static/list/possible_upgrades = typecacheof(list(/obj/item/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/analyzer)) var/list/upgrades var/state = 1 @@ -80,7 +80,7 @@ return FALSE var/obj/U = locate(/obj) in upgrades if(U) - to_chat(user, "You unattach an upgrade from the assembly.") + to_chat(user, "You detach an upgrade from the assembly.") tool.play_tool_sound(src) U.forceMove(drop_location()) upgrades -= U @@ -126,7 +126,7 @@ if(state != 1) return FALSE I.play_tool_sound(src) - to_chat(user, "You unattach the assembly from its place.") + to_chat(user, "You detach the assembly from its place.") new /obj/item/wallframe/camera(drop_location()) qdel(src) return TRUE diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index d9a93a6578..45f0268a00 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -10,6 +10,8 @@ if(!isMotion()) . = PROCESS_KILL return + if(stat & EMPED) + return if (detectTime > 0) var/elapsed = world.time - detectTime if (elapsed > alarm_delay) @@ -63,6 +65,7 @@ for (var/mob/living/silicon/aiPlayer in GLOB.player_list) if (status) aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) + visible_message("A red light flashes on the [src]!") detectTime = -1 return TRUE diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index f4963102c6..afcc1fee7c 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -2,16 +2,16 @@ // EMP /obj/machinery/camera/emp_proof - start_active = 1 + start_active = TRUE /obj/machinery/camera/emp_proof/Initialize() . = ..() upgradeEmpProof() -// X-RAY +// X-ray /obj/machinery/camera/xray - start_active = 1 + start_active = TRUE icon_state = "xraycam" // Thanks to Krutchen for the icons. /obj/machinery/camera/xray/Initialize() @@ -20,7 +20,7 @@ // MOTION /obj/machinery/camera/motion - start_active = 1 + start_active = TRUE name = "motion-sensitive security camera" /obj/machinery/camera/motion/Initialize() @@ -29,7 +29,7 @@ // ALL UPGRADES /obj/machinery/camera/all - start_active = 1 + start_active = TRUE /obj/machinery/camera/all/Initialize() . = ..() diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 43e736b6ef..5d6c92a97d 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -1,6 +1,6 @@ /obj/machinery/computer/aifixer name = "\improper AI system integrity restorer" - desc = "Used with intelliCards containing nonfunctioning AIs to restore them to working order." + desc = "Used with intelliCards containing nonfunctional AIs to restore them to working order." req_access = list(ACCESS_CAPTAIN, ACCESS_ROBOTICS, ACCESS_HEADS) var/mob/living/silicon/ai/occupier = null var/active = 0 diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 6ade93b520..30574fdae4 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -137,7 +137,7 @@ active_apc = APC if(href_list["name_filter"]) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) - var/new_filter = stripped_input(usr, "What name are you looking for?", name) as null|text + var/new_filter = stripped_input(usr, "What name are you looking for?", name) if(!src || !usr || !usr.canUseTopic(src) || stat || QDELETED(src)) return log_activity("changed name filter to \"[new_filter]\"") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 3d4d916961..13da773868 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -72,7 +72,7 @@ Reset() /obj/machinery/computer/arcade/proc/prizevend(mob/user) - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "arcade", /datum/mood_event/arcade) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "arcade", /datum/mood_event/arcade) if(prob(0.0001)) //1 in a million new /obj/item/gun/energy/pulse/prize(src) SSmedals.UnlockMedal(MEDAL_PULSE, usr.client) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 7b75d06321..696c9442b9 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -132,7 +132,7 @@ /obj/machinery/computer/security/proc/get_available_cameras() var/list/L = list() for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) - if((is_away_level(z) || is_away_level(C.z)) && (C.z != z))//if on away mission, can only recieve feed from same z_level cameras + if((is_away_level(z) || is_away_level(C.z)) && (C.z != z))//if on away mission, can only receive feed from same z_level cameras continue L.Add(C) @@ -152,6 +152,50 @@ D["[C.c_tag][(C.status ? null : " (Deactivated)")]"] = C return D +// SECURITY MONITORS + +/obj/machinery/computer/security/wooden_tv + name = "security camera monitor" + desc = "An old TV hooked into the station's camera network." + icon_state = "television" + icon_keyboard = null + icon_screen = "detective_tv" + clockwork = TRUE //it'd look weird + +/obj/machinery/computer/security/mining + name = "outpost camera console" + desc = "Used to access the various cameras on the outpost." + icon_screen = "mining" + icon_keyboard = "mining_key" + network = list("mine", "auxbase") + circuit = /obj/item/circuitboard/computer/mining + +/obj/machinery/computer/security/research + name = "research camera console" + desc = "Used to access the various cameras in science." + network = list("rd") + circuit = /obj/item/circuitboard/computer/research + +/obj/machinery/computer/security/hos + name = "Head of Security's camera console" + desc = "A custom security console with added access to the labor camp network." + network = list("ss13", "labor") + circuit = null + +/obj/machinery/computer/security/labor + name = "labor camp monitoring" + desc = "Used to access the various cameras on the labor camp." + network = list("labor") + circuit = null + +/obj/machinery/computer/security/qm + name = "Quartermaster's camera console" + desc = "A console with access to the mining, auxillary base and vault camera networks." + network = list("mine", "auxbase", "vault") + circuit = null + +// TELESCREENS + /obj/machinery/computer/security/telescreen name = "\improper Telescreen" desc = "Used for watching an empty arena." @@ -161,7 +205,6 @@ density = FALSE circuit = null clockwork = TRUE //it'd look very weird - light_power = 0 /obj/machinery/computer/security/telescreen/update_icon() @@ -176,28 +219,68 @@ icon = 'icons/obj/status_display.dmi' icon_state = "entertainment" network = list("thunder") - density = FALSE - circuit = null -/obj/machinery/computer/security/wooden_tv - name = "security camera monitor" - desc = "An old TV hooked into the stations camera network." - icon_state = "television" - icon_keyboard = null - icon_screen = "detective_tv" - clockwork = TRUE //it'd look weird +/obj/machinery/computer/security/telescreen/rd + name = "Research Director's telescreen" + desc = "Used for watching the AI and the RD's goons from the safety of his office." + network = list("rd", "aicore", "aiupload", "minisat", "xeno", "test") - -/obj/machinery/computer/security/mining - name = "outpost camera console" - desc = "Used to access the various cameras on the outpost." - icon_screen = "mining" - icon_keyboard = "mining_key" - network = list("mine") - circuit = /obj/item/circuitboard/computer/mining - -/obj/machinery/computer/security/research - name = "research camera console" - desc = "Used to access the various cameras in science." +/obj/machinery/computer/security/telescreen/circuitry + name = "circuitry telescreen" + desc = "Used for watching the other eggheads from the safety of the circuitry lab." network = list("rd") - circuit = /obj/item/circuitboard/computer/research + +/obj/machinery/computer/security/telescreen/ce + name = "Chief Engineer's telescreen" + desc = "Used for watching the engine, telecommunications and the minisat." + network = list("engine", "singularity", "tcomms", "minisat") + +/obj/machinery/computer/security/telescreen/cmo + name = "Chief Medical Officer's telescreen" + desc = "A telescreen with access to the medbay's camera network." + network = list("medbay") + +/obj/machinery/computer/security/telescreen/vault + name = "Vault monitor" + desc = "A telescreen that connects to the vault's camera network." + network = list("vault") + +/obj/machinery/computer/security/telescreen/toxins + name = "Bomb test site monitor" + desc = "A telescreen that connects to the bomb test site's camera." + network = list("toxin") + +/obj/machinery/computer/security/telescreen/engine + name = "engine monitor" + desc = "A telescreen that connects to the engine's camera network." + network = list("engine") + +/obj/machinery/computer/security/telescreen/turbine + name = "turbine monitor" + desc = "A telescreen that connects to the turbine's camera." + network = list("turbine") + +/obj/machinery/computer/security/telescreen/interrogation + name = "interrogation room monitor" + desc = "A telescreen that connects to the interrogation room's camera." + network = list("interrogation") + +/obj/machinery/computer/security/telescreen/prison + name = "prison monitor" + desc = "A telescreen that connects to the permabrig's camera network." + network = list("prison") + +/obj/machinery/computer/security/telescreen/auxbase + name = "auxillary base monitor" + desc = "A telescreen that connects to the auxillary base's camera." + network = list("auxbase") + +/obj/machinery/computer/security/telescreen/minisat + name = "minisat monitor" + desc = "A telescreen that connects to the minisat's camera network." + network = list("minisat") + +/obj/machinery/computer/security/telescreen/aiupload + name = "AI upload monitor" + desc = "A telescreen that connects to the AI upload's camera network." + network = list("aiupload") diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 26a8ac940e..e561c6466f 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -159,7 +159,7 @@ /mob/camera/aiEye/remote/update_remote_sight(mob/living/user) user.see_invisible = SEE_INVISIBLE_LIVING //can't see ghosts through cameras - user.sight = 0 + user.sight = SEE_TURFS | SEE_BLACKNESS user.see_in_dark = 2 return 1 diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index bb47a7ab32..09bf401e12 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -348,6 +348,12 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/Topic(href, href_list) if(..()) return + + if(!usr.canUseTopic(src, !issilicon(usr)) || !is_operational()) + usr.unset_machine() + usr << browse(null, "window=id_com") + return + usr.set_machine(src) switch(href_list["choice"]) if ("modify") @@ -532,11 +538,12 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) updateUsrDialog() /obj/machinery/computer/card/AltClick(mob/user) - if(user.canUseTopic(src)) - if(scan) - eject_id_scan(user) - if(modify) - eject_id_modify(user) + if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) + return + if(scan) + eject_id_scan(user) + if(modify) + eject_id_modify(user) /obj/machinery/computer/card/proc/eject_id_scan(mob/user) if(scan) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 445ed389b7..5e5c08ee99 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -45,8 +45,9 @@ /obj/machinery/computer/communications/process() if(..()) - if(state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE) - updateDialog() + var/ai_autoupdate = aistate != STATE_STATUSDISPLAY && aistate != STATE_CALLSHUTTLE && aistate != STATE_PURCHASE && aistate != STATE_VIEWMESSAGE + var/machine_user_autoupdate = state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE + updateDialog(machine_user_autoupdate,ai_autoupdate) /obj/machinery/computer/communications/Topic(href, href_list) if(..()) @@ -82,7 +83,7 @@ if(obj_flags & EMAGGED) authenticated = 2 auth_id = "Unknown" - to_chat(M, "[src] lets out a quiet alarm as its login is overriden.") + to_chat(M, "[src] lets out a quiet alarm as its login is overridden.") playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) playsound(src, 'sound/machines/terminal_alert.ogg', 25, 0) if(prob(25)) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 72e17679f5..790d9898b8 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -9,7 +9,7 @@ #define RADIATION_DURATION_MAX 30 #define RADIATION_ACCURACY_MULTIPLIER 3 //larger is less accurate -#define RADIATION_IRRADIATION_MULTIPLIER 1 //multiplier for how much radiation a test subject recieves +#define RADIATION_IRRADIATION_MULTIPLIER 1 //multiplier for how much radiation a test subject receives #define SCANNER_ACTION_SE 1 #define SCANNER_ACTION_UI 2 diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index fd785e5bc6..d1f450013b 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -128,7 +128,7 @@ pad.x_offset = 0 if(href_list["change_name"]) - var/new_name = stripped_input(usr, "What do you wish to name the launchpad?", "Launchpad", pad.display_name, 15) as text|null + var/new_name = stripped_input(usr, "What do you wish to name the launchpad?", "Launchpad", pad.display_name, 15) if(!new_name) return pad.display_name = new_name diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index f606494b96..0ee394d889 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -329,7 +329,7 @@ src.active2.fields["mi_dis_d"] = t1 if("ma_dis") if(active2) - var/t1 = stripped_input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) + var/t1 = stripped_input("Please input major disabilities list:", "Med. records", src.active2.fields["ma_dis"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["ma_dis"] = t1 diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index ec113eb43b..b71f572e68 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -130,4 +130,4 @@ /obj/machinery/computer/pod/old/swf name = "\improper Magix System IV" - desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition." + desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorcerer's Edition." diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 17121c45cf..8a2a06bf1f 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -150,7 +150,7 @@ background = "'background-color:#990000;'" if("Incarcerated") background = "'background-color:#CD6500;'" - if("Parolled") + if("Paroled") background = "'background-color:#CD6500;'" if("Discharged") background = "'background-color:#006699;'" @@ -688,7 +688,7 @@ What a mess.*/ temp += "
  • None
  • " temp += "
  • *Arrest*
  • " temp += "
  • Incarcerated
  • " - temp += "
  • Parolled
  • " + temp += "
  • Paroled
  • " temp += "
  • Discharged
  • " temp += "" if("rank") @@ -722,8 +722,8 @@ What a mess.*/ active2.fields["criminal"] = "*Arrest*" if("incarcerated") active2.fields["criminal"] = "Incarcerated" - if("parolled") - active2.fields["criminal"] = "Parolled" + if("paroled") + active2.fields["criminal"] = "Paroled" if("released") active2.fields["criminal"] = "Discharged" investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [key_name(usr)].", INVESTIGATE_RECORDS) @@ -803,7 +803,7 @@ What a mess.*/ if(3) R.fields["age"] = rand(5, 85) if(4) - R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged") + R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged") if(5) R.fields["p_stat"] = pick("*Unconscious*", "Active", "Physically Unfit") if(6) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 93b997eee6..b9b95eecd0 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -5,13 +5,11 @@ icon_keyboard = "teleport_key" light_color = LIGHT_COLOR_BLUE circuit = /obj/item/circuitboard/computer/teleporter - var/obj/item/gps/locked var/regime_set = "Teleporter" var/id var/obj/machinery/teleport/station/power_station var/calibrating - var/turf/target //Used for one-time-use teleport cards (such as clown planet coordinates.) - //Setting this to 1 will set src.locked to null after a player enters the portal and will not allow hand-teles to open portals to that location. + var/turf/target /obj/machinery/computer/teleporter/Initialize() . = ..() @@ -33,18 +31,6 @@ break return power_station -/obj/machinery/computer/teleporter/attackby(obj/I, mob/living/user, params) - if(istype(I, /obj/item/gps)) - var/obj/item/gps/L = I - if(L.locked_location && !(stat & (NOPOWER|BROKEN))) - if(!user.transferItemToLoc(L, src)) - to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]!") - return - locked = L - to_chat(user, "You insert the GPS device into the [name]'s slot.") - else - return ..() - /obj/machinery/computer/teleporter/ui_interact(mob/user) . = ..() var/data = "

    Teleporter Status

    " @@ -65,12 +51,6 @@ data += "Change regime
    " data += "Set target
    " - if(locked) - data += "
    Get target from memory
    " - data += "Eject GPS device
    " - else - data += "
    Get target from memory
    " - data += "Eject GPS device
    " data += "
    Calibrate Hub" @@ -82,11 +62,6 @@ if(..()) return - if(href_list["eject"]) - eject() - updateDialog() - return - if(!check_hub_connection()) say("Error: Unable to detect hub.") return @@ -104,11 +79,6 @@ power_station.teleporter_hub.update_icon() power_station.teleporter_hub.calibrated = 0 set_target(usr) - if(href_list["locked"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - target = get_turf(locked.locked_location) if(href_list["calibrate"]) if(!target) say("Error: No target set to calibrate to.") @@ -144,11 +114,6 @@ else regime_set = "Teleporter" -/obj/machinery/computer/teleporter/proc/eject() - if(locked) - locked.forceMove(get_turf(src)) - locked = null - /obj/machinery/computer/teleporter/proc/set_target(mob/user) var/list/L = list() var/list/areaindex = list() @@ -171,6 +136,8 @@ var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L target = L[desc] + var/turf/T = get_turf(target) + log_game("[key_name(user)] has set the teleporter target to [target] at [AREACOORD(T)]") else var/list/S = power_station.linked_stations @@ -185,6 +152,8 @@ var/obj/machinery/teleport/station/target_station = L[desc] if(!target_station || !target_station.teleporter_hub) return + var/turf/T = get_turf(target_station) + log_game("[key_name(user)] has set the teleporter target to [target_station] at [AREACOORD(T)]") target = target_station.teleporter_hub target_station.linked_stations |= power_station target_station.stat &= ~NOPOWER diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 59bf9f86fd..a709fdbd2a 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -180,7 +180,7 @@ break if(component_check) P.play_tool_sound(src) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, 1) + var/obj/machinery/new_machine = new circuit.build_path(loc, 1) new_machine.anchored = anchored new_machine.on_construction() for(var/obj/O in new_machine.component_parts) @@ -219,7 +219,7 @@ req_components[path] -= used_amt else added_components[part] = path - if(replacer.SendSignal(COMSIG_TRY_STORAGE_TAKE, part, src)) + if(SEND_SIGNAL(replacer, COMSIG_TRY_STORAGE_TAKE, part, src)) req_components[path]-- for(var/obj/item/part in added_components) diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 1c72e79363..5a041e6baa 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -37,7 +37,7 @@ use_power(200) defib.cell.give(180) //90% efficiency, slightly better than the cell charger's 87.5% update_icon() - + /obj/machinery/defibrillator_mount/update_icon() cut_overlays() if(defib) @@ -69,7 +69,7 @@ if(defib) to_chat(user, "There's already a defibrillator in [src]!") return - if(I.flags_1 & NODROP_1 || !user.transferItemToLoc(I, src)) + if(I.item_flags & NODROP || !user.transferItemToLoc(I, src)) to_chat(user, "[I] is stuck to your hand!") return user.visible_message("[user] hooks up [I] to [src]!", \ diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 65d1264030..eb936b189e 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -192,7 +192,7 @@ /obj/machinery/door/airlock/check_access_ntnet(datum/netdata/data) return !requiresID() || ..() -/obj/machinery/door/airlock/ntnet_recieve(datum/netdata/data) +/obj/machinery/door/airlock/ntnet_receive(datum/netdata/data) // Check if the airlock is powered and can accept control packets. if(!hasPower() || !canAIControl()) return @@ -201,7 +201,7 @@ if(!check_access_ntnet(data)) return - // Handle recieved packet. + // Handle received packet. var/command = lowertext(data.data["data"]) var/command_value = lowertext(data.data["data_secondary"]) switch(command) @@ -414,7 +414,7 @@ if(!prob(prb)) return FALSE //you lucked out, no shock for you do_sparks(5, TRUE, src) - var/tmp/check_range = TRUE + var/check_range = TRUE if(electrocute_mob(user, get_area(src), src, 1, check_range)) shockCooldown = world.time + 10 return TRUE @@ -1509,7 +1509,7 @@ else if (safe) safe = FALSE else - to_chat(usr, "Firmware reports safeties already overriden.") + to_chat(usr, "Firmware reports safeties already overridden.") . = TRUE if("speed-on") if(wires.is_cut(WIRE_TIMING)) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 8b94648ec9..e169c66c24 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -178,7 +178,7 @@ else if(istype(I, /obj/item/weldingtool)) try_to_weld(I, user) return 1 - else if(!(I.flags_1 & NOBLUDGEON_1) && user.a_intent != INTENT_HARM) + else if(!(I.item_flags & NOBLUDGEON) && user.a_intent != INTENT_HARM) try_to_activate_door(user) return 1 return ..() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 702583d01a..0d72a08f1f 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -38,8 +38,7 @@ /obj/machinery/door/window/Destroy() density = FALSE - for(var/I in debris) - qdel(I) + QDEL_LIST(debris) if(obj_integrity == 0) playsound(src, "shatter", 70, 1) electronics = null diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index 8b9255b5ac..0036b41804 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -97,7 +97,7 @@ "sigtype" = "command" )) if(memory["pump_status"] == "siphon") - signal.data["stabalize"] = 1 + signal.data["stabilize"] = 1 else if(memory["pump_status"] != "release") signal.data["power"] = 1 post_signal(signal) diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm index 2a5faef0e1..9901d51074 100644 --- a/code/game/machinery/embedded_controller/simple_vent_controller.dm +++ b/code/game/machinery/embedded_controller/simple_vent_controller.dm @@ -15,7 +15,7 @@ post_signal(new /datum/signal(list( "tag" = airpump_tag, "sigtype" = "command", - "stabalize" = 1, + "stabilize" = 1, "power" = 1 ))) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index e5aef868fc..9ae92cdd61 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -479,6 +479,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ continue if(another.validate_location(T)) unset_holo(holo_owner) + if(another.masters && another.masters[holo_owner]) + another.clear_holo(holo_owner) another.set_holo(holo_owner, h) return TRUE return FALSE diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index d20a1059f9..acc0505256 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -40,7 +40,7 @@ if (src.on && !(stat & NOPOWER) ) var/turf/location = src.loc if (isturf(location)) - location.hotspot_expose(1000,500,1) + location.hotspot_expose(700,10,1) return 1 /obj/machinery/igniter/Initialize() @@ -126,7 +126,7 @@ use_power(1000) var/turf/location = src.loc if (isturf(location)) - location.hotspot_expose(1000,500,1) + location.hotspot_expose(1000,100,1) return 1 /obj/machinery/sparker/emp_act(severity) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 409e64ca7e..03c60be91c 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -3,6 +3,7 @@ /obj/machinery/iv_drip name = "\improper IV drip" + desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate." icon = 'icons/obj/iv_drip.dmi' icon_state = "iv_drip" anchored = FALSE @@ -166,7 +167,7 @@ else toggle_mode() -/obj/machinery/iv_drip/verb/eject_beaker(mob/user) +/obj/machinery/iv_drip/verb/eject_beaker() set category = "Object" set name = "Remove IV Container" set src in view(1) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 139769e269..d64ae75e2c 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -37,10 +37,18 @@ GLOB.deliverybeacontags += location /obj/machinery/navbeacon/Destroy() - GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. + if (GLOB.navbeacons["[z]"]) + GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. GLOB.deliverybeacons -= src return ..() +/obj/machinery/navbeacon/onTransitZ(old_z, new_z) + if (GLOB.navbeacons["[old_z]"]) + GLOB.navbeacons["[old_z]"] -= src + if (GLOB.navbeacons["[new_z]"]) + GLOB.navbeacons["[new_z]"] += src + ..() + // set the transponder codes assoc list from codes_txt /obj/machinery/navbeacon/proc/set_codes() if(!codes_txt) @@ -203,4 +211,4 @@ Transponder Codes: