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/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/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/arrival_box.dmm b/_maps/shuttles/arrival_box.dmm index d117ca0f6b..2b245557a0 100644 --- a/_maps/shuttles/arrival_box.dmm +++ b/_maps/shuttles/arrival_box.dmm @@ -78,18 +78,18 @@ /turf/open/floor/plating, /area/shuttle/arrival) "p" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "q" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "r" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -114,13 +114,13 @@ /turf/open/floor/plating/airless, /area/shuttle/arrival) "v" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "w" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index b19ad63eb1..08f34e1c23 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -211,14 +211,14 @@ }, /area/shuttle/arrival) "u" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) "v" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/arrival_omega.dmm b/_maps/shuttles/arrival_omega.dmm index 04f19f60ea..b8fc632779 100644 --- a/_maps/shuttles/arrival_omega.dmm +++ b/_maps/shuttles/arrival_omega.dmm @@ -124,14 +124,14 @@ /turf/open/floor/plating, /area/shuttle/arrival) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) "r" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/arrival_pubby.dmm b/_maps/shuttles/arrival_pubby.dmm index 3309533f35..a4308729b2 100644 --- a/_maps/shuttles/arrival_pubby.dmm +++ b/_maps/shuttles/arrival_pubby.dmm @@ -85,7 +85,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "o" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/assault_pod_default.dmm b/_maps/shuttles/assault_pod_default.dmm index 4574318e47..9414fa9f82 100644 --- a/_maps/shuttles/assault_pod_default.dmm +++ b/_maps/shuttles/assault_pod_default.dmm @@ -4,7 +4,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/assault_pod) "c" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -45,20 +45,20 @@ /turf/open/floor/plating, /area/shuttle/assault_pod) "D" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/assault_pod) "H" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/assault_pod) "L" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, 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/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index 258f9a76d3..b1d300574d 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -73,7 +73,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -82,7 +82,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ax" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -94,7 +94,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/item/radio/intercom{ @@ -131,7 +131,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aL" = ( @@ -210,19 +210,19 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aZ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ba" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -345,7 +345,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/item/radio/intercom{ @@ -355,7 +355,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -427,7 +427,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "bK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 4b0f919532..9b4776a011 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -138,7 +138,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aC" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aD" = ( @@ -214,7 +214,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aM" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index 6719587d1e..d88e15fc94 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -53,11 +53,11 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "al" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "am" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -87,7 +87,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -157,7 +157,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/dark, @@ -174,7 +174,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aH" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plasteel/dark, @@ -215,14 +215,14 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -232,7 +232,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/structure/window/reinforced{ dir = 1; pixel_y = 2 @@ -255,13 +255,13 @@ /turf/open/floor/plasteel/white, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -286,7 +286,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aW" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aX" = ( diff --git a/_maps/shuttles/emergency_box.dmm b/_maps/shuttles/emergency_box.dmm index dff9ccb5d2..57ddc27a97 100644 --- a/_maps/shuttles/emergency_box.dmm +++ b/_maps/shuttles/emergency_box.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ag" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -44,7 +44,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "am" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -53,7 +53,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ao" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -71,7 +71,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -113,7 +113,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aA" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aB" = ( @@ -179,17 +179,17 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, @@ -224,7 +224,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -233,7 +233,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ @@ -242,7 +242,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aU" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index d64c28b8b9..7b9e8cfa6c 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -251,11 +251,11 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -283,7 +283,7 @@ }, /area/shuttle/escape) "aW" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -294,7 +294,7 @@ }, /area/shuttle/escape) "aX" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig{ icon_state = "darkred"; dir = 1; @@ -302,7 +302,7 @@ }, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig{ icon_state = "darkred"; dir = 5; @@ -330,7 +330,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -339,7 +339,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bf" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/flasher{ @@ -381,7 +381,7 @@ /turf/open/floor/mech_bay_recharge_floor, /area/shuttle/escape) "bk" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -412,7 +412,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bp" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/flasher{ @@ -479,7 +479,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -489,7 +489,7 @@ }, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -509,7 +509,7 @@ }, /area/shuttle/escape) "bz" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -658,7 +658,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bW" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -667,7 +667,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/escape) "bX" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ diff --git a/_maps/shuttles/emergency_clown.dmm b/_maps/shuttles/emergency_clown.dmm index 2eaebaeb45..3dd4766d6a 100644 --- a/_maps/shuttles/emergency_clown.dmm +++ b/_maps/shuttles/emergency_clown.dmm @@ -18,7 +18,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "af" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/bluespace, @@ -43,7 +43,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/bluespace, @@ -53,7 +53,7 @@ /turf/open/floor/bluespace, /area/shuttle/escape) "al" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/bluespace, @@ -71,7 +71,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "ao" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -154,11 +154,11 @@ /turf/open/floor/noslip, /area/shuttle/escape) "aC" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/noslip, /area/shuttle/escape) "aD" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/noslip, diff --git a/_maps/shuttles/emergency_cramped.dmm b/_maps/shuttles/emergency_cramped.dmm index aa1b9f0f0d..457e23d84b 100644 --- a/_maps/shuttles/emergency_cramped.dmm +++ b/_maps/shuttles/emergency_cramped.dmm @@ -17,7 +17,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "e" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -74,7 +74,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plating, @@ -109,7 +109,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "s" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/extinguisher_cabinet{ diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 256358bbae..24d59e5033 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -240,14 +240,14 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -326,7 +326,7 @@ }, /area/shuttle/escape) "aH" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/item/radio/intercom{ @@ -672,7 +672,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "by" = ( @@ -709,12 +709,12 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bC" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "bD" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/status_display{ pixel_y = 32 }, @@ -722,7 +722,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -771,7 +771,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bM" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -780,7 +780,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -823,7 +823,7 @@ }, /area/shuttle/escape) "bU" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -1059,7 +1059,7 @@ }, /area/shuttle/escape) "cB" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -1077,7 +1077,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "cG" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm index 6f31ce1d40..57f0b23d9f 100644 --- a/_maps/shuttles/emergency_goon.dmm +++ b/_maps/shuttles/emergency_goon.dmm @@ -74,7 +74,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "s" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -154,7 +154,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "H" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -201,7 +201,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "S" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light{ @@ -210,7 +210,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "T" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 29b8661ae2..faf70072d3 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -65,7 +65,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "as" = ( @@ -74,7 +74,7 @@ name = "Station Intercom (General)"; pixel_y = 27 }, -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -220,7 +220,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, @@ -314,7 +314,7 @@ name = "Station Intercom (General)"; pixel_y = -31 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -362,7 +362,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, @@ -377,13 +377,13 @@ /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "bh" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bi" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bj" = ( @@ -436,7 +436,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bs" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -713,7 +713,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bV" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -816,7 +816,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ca" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -835,7 +835,7 @@ /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "cd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/light{ diff --git a/_maps/shuttles/emergency_mini.dmm b/_maps/shuttles/emergency_mini.dmm index a0b6ce6db9..42650f6fd1 100644 --- a/_maps/shuttles/emergency_mini.dmm +++ b/_maps/shuttles/emergency_mini.dmm @@ -40,7 +40,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "h" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -49,7 +49,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "j" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -68,7 +68,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "m" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/light/small{ @@ -116,25 +116,25 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "v" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "w" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "x" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "y" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/light{ @@ -149,7 +149,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "A" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light{ @@ -171,7 +171,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "C" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "D" = ( @@ -218,7 +218,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "K" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -231,7 +231,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "M" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -261,7 +261,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "R" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "S" = ( diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index aaa9c861ce..9d6c5f1e4d 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -15,7 +15,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "e" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/cult, @@ -40,7 +40,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "i" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plasteel/cult, @@ -49,7 +49,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "k" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/cult, @@ -67,7 +67,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index 0debf2ad0f..570cb99f0a 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -12,7 +12,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ad" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/newscaster/security_unit{ @@ -24,11 +24,11 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ae" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "af" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/item/radio/intercom{ @@ -67,7 +67,7 @@ }, /area/shuttle/escape) "ak" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -240,7 +240,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aD" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -253,7 +253,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/escape) "aF" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -356,14 +356,14 @@ /turf/open/floor/grass, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -384,7 +384,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "aN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 136cabe9db..47b891cfd0 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -222,7 +222,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkpurple/side{ dir = 9 }, @@ -235,7 +235,7 @@ /turf/open/floor/plasteel/darkgreen/side, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkpurple/side{ dir = 5 }, @@ -253,7 +253,7 @@ }, /area/shuttle/escape) "aO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -262,14 +262,14 @@ }, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/darkpurple/side, /area/shuttle/escape) "aQ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -283,7 +283,7 @@ }, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkpurple/side{ @@ -291,7 +291,7 @@ }, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -300,7 +300,7 @@ }, /area/shuttle/escape) "aU" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkpurple/side{ @@ -328,7 +328,7 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -370,7 +370,7 @@ /turf/open/floor/plasteel/cafeteria, /area/shuttle/escape) "be" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "bf" = ( @@ -424,7 +424,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/structure/window/reinforced{ dir = 1; pixel_y = 2 @@ -432,7 +432,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bq" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plating, @@ -466,13 +466,13 @@ /turf/open/floor/plating, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -518,7 +518,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bG" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index edd86c5ec6..d5ca59c4f2 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -420,7 +420,7 @@ }, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -572,7 +572,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -660,7 +660,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkgreen/side{ dir = 8 }, @@ -679,7 +679,7 @@ }, /area/shuttle/escape) "bN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plasteel/darkgreen/side, @@ -815,7 +815,7 @@ }, /area/shuttle/escape) "bX" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -824,7 +824,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bY" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ @@ -833,27 +833,27 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bZ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ca" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/structure/window/reinforced{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "cb" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkgreen/side{ dir = 1 }, /area/shuttle/escape) "cc" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkgreen/side, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index d0b8f7ca80..3e5568279b 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "af" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -43,7 +43,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -76,7 +76,7 @@ pixel_x = 6; pixel_y = -24 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -91,7 +91,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aq" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( @@ -102,7 +102,7 @@ pixel_y = -6; req_access_txt = "19" }, -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/button/door{ id = "bearsbearsbears"; name = "release bears"; @@ -131,7 +131,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aw" = ( @@ -204,7 +204,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -238,7 +238,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -315,7 +315,7 @@ /turf/open/floor/engine, /area/shuttle/escape) "bc" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -327,7 +327,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -341,7 +341,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, @@ -350,13 +350,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bh" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, @@ -551,7 +551,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/emergency_scrapheap.dmm b/_maps/shuttles/emergency_scrapheap.dmm index cb2b7517b5..e95fcb507c 100644 --- a/_maps/shuttles/emergency_scrapheap.dmm +++ b/_maps/shuttles/emergency_scrapheap.dmm @@ -109,7 +109,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "at" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "au" = ( @@ -178,7 +178,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -188,7 +188,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aG" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aH" = ( @@ -222,7 +222,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -231,7 +231,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -266,7 +266,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -395,14 +395,14 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bp" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light{ diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm index 0dc057963c..ce8842a41b 100644 --- a/_maps/shuttles/emergency_supermatter.dmm +++ b/_maps/shuttles/emergency_supermatter.dmm @@ -21,14 +21,14 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ah" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ai" = ( /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/yellow, @@ -73,7 +73,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/yellow, @@ -94,7 +94,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/yellow, @@ -237,7 +237,7 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bb" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/turf_decal/stripes/line{ dir = 1 }, diff --git a/_maps/shuttles/emergency_wabbajack.dmm b/_maps/shuttles/emergency_wabbajack.dmm index 9bdb49064f..34f1661020 100644 --- a/_maps/shuttles/emergency_wabbajack.dmm +++ b/_maps/shuttles/emergency_wabbajack.dmm @@ -38,7 +38,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "ak" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -47,7 +47,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "am" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -92,7 +92,7 @@ pixel_x = -24; pixel_y = -6 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -102,11 +102,11 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, @@ -182,13 +182,13 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aI" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -352,7 +352,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bm" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ @@ -365,7 +365,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/escape_pod_default.dmm b/_maps/shuttles/escape_pod_default.dmm index c2625b0e57..8dcccf9326 100644 --- a/_maps/shuttles/escape_pod_default.dmm +++ b/_maps/shuttles/escape_pod_default.dmm @@ -3,7 +3,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/pod_1) "G" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/status_display{ @@ -32,7 +32,7 @@ /turf/open/floor/plating, /area/shuttle/pod_1) "U" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/item/radio/intercom{ diff --git a/_maps/shuttles/escape_pod_large.dmm b/_maps/shuttles/escape_pod_large.dmm index 6a36801db9..49f2f44e1e 100644 --- a/_maps/shuttles/escape_pod_large.dmm +++ b/_maps/shuttles/escape_pod_large.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "h" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/item/storage/pod{ @@ -17,7 +17,7 @@ /turf/open/floor/plating, /area/shuttle/pod_1) "A" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/item/radio/intercom{ @@ -36,13 +36,13 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "H" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "J" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -51,13 +51,13 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "L" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "M" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/status_display{ diff --git a/_maps/shuttles/ferry_base.dmm b/_maps/shuttles/ferry_base.dmm index 36a54e54bc..f7e717ccb8 100644 --- a/_maps/shuttles/ferry_base.dmm +++ b/_maps/shuttles/ferry_base.dmm @@ -24,7 +24,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) "h" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -36,7 +36,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "j" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "k" = ( @@ -64,7 +64,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_fancy.dmm b/_maps/shuttles/ferry_fancy.dmm index 432791c936..e21bd7c5eb 100644 --- a/_maps/shuttles/ferry_fancy.dmm +++ b/_maps/shuttles/ferry_fancy.dmm @@ -27,7 +27,7 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "g" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/pod/dark, /area/shuttle/transport) "h" = ( @@ -87,7 +87,7 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "p" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/pod/dark, diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index 21d3bd3413..21f8a58e44 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -68,7 +68,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "ar" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/wood, /area/shuttle/transport) "as" = ( @@ -137,7 +137,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aJ" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aK" = ( @@ -204,7 +204,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aW" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index 334df92b55..22d83d8d01 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -15,7 +15,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) "f" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/freezer, @@ -90,7 +90,7 @@ /area/shuttle/transport) "n" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/freezer, /area/shuttle/transport) "o" = ( @@ -131,7 +131,7 @@ /turf/open/floor/plasteel/freezer, /area/shuttle/transport) "w" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/freezer, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index b1feae232e..0add06a7ff 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -176,7 +176,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/hallway) "aC" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, @@ -188,7 +188,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/hallway) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8; name = "tactical chair" }, @@ -206,7 +206,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/eva) "aH" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, @@ -218,7 +218,7 @@ }, /area/shuttle/syndicate/hallway) "aI" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8; name = "tactical chair" }, @@ -256,7 +256,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/eva) "aO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, @@ -318,7 +318,7 @@ }, /area/shuttle/syndicate/hallway) "aX" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, diff --git a/_maps/shuttles/labour_box.dmm b/_maps/shuttles/labour_box.dmm index 636458a64c..fe9756ef33 100644 --- a/_maps/shuttles/labour_box.dmm +++ b/_maps/shuttles/labour_box.dmm @@ -86,7 +86,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) "o" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/flasher{ diff --git a/_maps/shuttles/labour_delta.dmm b/_maps/shuttles/labour_delta.dmm index 6df69ba0f6..aeb2841683 100644 --- a/_maps/shuttles/labour_delta.dmm +++ b/_maps/shuttles/labour_delta.dmm @@ -120,7 +120,7 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ @@ -133,7 +133,7 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "s" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/flasher{ diff --git a/_maps/shuttles/mining_box.dmm b/_maps/shuttles/mining_box.dmm index b7354b8d89..2f262cae2b 100644 --- a/_maps/shuttles/mining_box.dmm +++ b/_maps/shuttles/mining_box.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) "f" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/mining_delta.dmm b/_maps/shuttles/mining_delta.dmm index 99bdb64aae..920a754e45 100644 --- a/_maps/shuttles/mining_delta.dmm +++ b/_maps/shuttles/mining_delta.dmm @@ -47,7 +47,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "g" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/neutral, @@ -116,7 +116,7 @@ /turf/open/floor/plasteel/white, /area/shuttle/mining) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -126,7 +126,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "o" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -139,7 +139,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "p" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index efd49c8908..59ce3014af 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -39,7 +39,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "ag" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -71,7 +71,7 @@ pixel_y = -24; req_access = null }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -82,7 +82,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "an" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt, @@ -413,7 +413,7 @@ pixel_y = -24; req_access = null }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/ruin_caravan_victim.dmm b/_maps/shuttles/ruin_caravan_victim.dmm index aa42b30b9f..8f65015d55 100644 --- a/_maps/shuttles/ruin_caravan_victim.dmm +++ b/_maps/shuttles/ruin_caravan_victim.dmm @@ -156,7 +156,7 @@ }, /area/shuttle/caravan/freighter1) "gw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/ruin_syndicate_dropship.dmm b/_maps/shuttles/ruin_syndicate_dropship.dmm index 696a99e30a..ac9a2cd680 100644 --- a/_maps/shuttles/ruin_syndicate_dropship.dmm +++ b/_maps/shuttles/ruin_syndicate_dropship.dmm @@ -88,7 +88,7 @@ /turf/open/floor/plating, /area/shuttle/caravan/syndicate3) "hF" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light/small{ dir = 8 }, @@ -104,7 +104,7 @@ /turf/open/floor/pod/dark, /area/shuttle/caravan/syndicate3) "ka" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light/small{ @@ -169,7 +169,7 @@ /turf/open/floor/plating, /area/shuttle/caravan/syndicate3) "rV" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -185,7 +185,7 @@ }, /area/shuttle/caravan/syndicate3) "sn" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/dark, /area/shuttle/caravan/syndicate3) @@ -247,7 +247,7 @@ /turf/open/floor/plasteel/darkred/side, /area/shuttle/caravan/syndicate3) "Cm" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/firealarm{ @@ -278,7 +278,7 @@ }, /area/shuttle/caravan/syndicate3) "EO" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/airalarm/syndicate{ pixel_y = 24 }, diff --git a/_maps/shuttles/ruin_syndicate_fighter.dmm b/_maps/shuttles/ruin_syndicate_fighter.dmm index a9cf2a45b5..1f8c264079 100644 --- a/_maps/shuttles/ruin_syndicate_fighter.dmm +++ b/_maps/shuttles/ruin_syndicate_fighter.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aA" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/turretid{ 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/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index f7cd8ad529..6b56e1a6a0 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -137,7 +137,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, @@ -179,7 +179,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/remains/human, @@ -232,7 +232,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bd" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bf" = ( diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 9888026e31..f8e366950a 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -753,7 +753,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bo" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -827,7 +827,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "bu" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt{ @@ -871,7 +871,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "by" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt{ @@ -1022,7 +1022,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bL" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt{ diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 11214ef260..e7cf65a6f5 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -42,7 +42,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "i" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "j" = ( @@ -65,7 +65,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "l" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plating/abductor, @@ -75,7 +75,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plating/abductor, @@ -110,7 +110,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plating/abductor, 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/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 cca2814966..5edc9b72c8 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -1,6 +1,7 @@ -#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.datum_components ? NONE : target._SendSignal(sigtype, list(##arguments)) ) +#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) ) -#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( !SSdcs.comp_lookup[sigtype] ? NONE : SSdcs._SendGlobalSignal(sigtype, list(##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) @@ -19,7 +20,7 @@ // global signals // These are signals which can be listened to by any component on any parent -// GLOBAL SIGNALS MUST START WITH "!" +// 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) @@ -43,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) @@ -89,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) @@ -98,8 +103,6 @@ #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) -<<<<<<< HEAD -======= // /mob Signals #define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (magic, holy, protection_sources) #define COMPONENT_BLOCK_MAGIC 1 @@ -109,7 +112,6 @@ #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) ->>>>>>> 3167e2b... Rewrites the antimagic component to properly use signals (#38649) // /mob/living/carbon signals #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) @@ -119,12 +121,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) @@ -132,6 +135,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) @@ -151,7 +175,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. @@ -179,4 +203,4 @@ //Ouch my toes! #define CALTROP_BYPASS_SHOES 1 -#define CALTROP_IGNORE_WALKERS 2 +#define CALTROP_IGNORE_WALKERS 2 \ No newline at end of file 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/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/_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/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 a0051c3b1e..e86c57ac24 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -524,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 d10619f369..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 && (!jobban_isbanned(src, "appearance"))) + 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 @@ -899,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 5f2c583d59..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 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/dcs.dm b/code/controllers/subsystem/dcs.dm index 3eed510adc..c1e101a0e7 100644 --- a/code/controllers/subsystem/dcs.dm +++ b/code/controllers/subsystem/dcs.dm @@ -2,34 +2,5 @@ SUBSYSTEM_DEF(dcs) name = "Datum Component System" flags = SS_NO_INIT | SS_NO_FIRE - var/list/comp_lookup = list() // A signal:list(components) assoc list - -/datum/controller/subsystem/dcs/proc/_SendGlobalSignal(sigtype, list/arguments) - . = NONE - for(var/i in comp_lookup[sigtype]) - var/datum/component/comp = i - if(!comp.enabled) - continue - var/datum/callback/CB = comp.signal_procs[sigtype] - if(!CB) - continue // Should we error from this? - . |= CB.InvokeAsync(arglist(arguments)) - -/datum/controller/subsystem/dcs/proc/RegisterSignal(datum/component/comp, sigtype) - if(!comp_lookup[sigtype]) - comp_lookup[sigtype] = list() - - comp_lookup[sigtype][comp] = TRUE - -/datum/controller/subsystem/dcs/proc/UnregisterSignal(datum/component/comp, list/sigtypes) - if(!length(sigtypes)) - sigtypes = list(sigtypes) - for(var/sigtype in sigtypes) - switch(length(comp_lookup[sigtype])) - if(1) - comp_lookup -= sigtype - if(2 to INFINITY) - comp_lookup[sigtype] -= comp - /datum/controller/subsystem/dcs/Recover() comp_lookup = SSdcs.comp_lookup 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 7a506acbe5..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 @@ -434,7 +437,10 @@ SUBSYSTEM_DEF(job) to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.") 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) // 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 return H @@ -448,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 @@ -484,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)) @@ -520,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 @@ -625,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/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 a62755eb5f..12e5ac1d20 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -56,10 +56,10 @@ if(!force) _RemoveFromParent() if(!silent) - P.SendSignal(COMSIG_COMPONENT_REMOVING, src) + SEND_SIGNAL(P, COMSIG_COMPONENT_REMOVING, src) parent = null - SSdcs.UnregisterSignal(src, signal_procs) - LAZYCLEARLIST(signal_procs) + for(var/target in signal_procs) + UnregisterSignal(target, signal_procs[target]) return ..() /datum/component/proc/_RemoveFromParent() @@ -78,34 +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") - if(sig_type[1] == "!") - SSdcs.RegisterSignal(src, sig_type) + procs[target][sig_type] = proc_or_callback - procs[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 @@ -125,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) @@ -228,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 @@ -243,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 index c0a875d457..f6de9eaf78 100644 --- a/code/datums/components/edit_complainer.dm +++ b/code/datums/components/edit_complainer.dm @@ -16,7 +16,7 @@ ) say_lines = text || default_lines - RegisterSignal(COMSIG_GLOB_VAR_EDIT, .proc/var_edit_react) + 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 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 71ba7d39a3..8a80434114 100644 --- a/code/datums/components/storage/concrete/bag_of_holding.dm +++ b/code/datums/components/storage/concrete/bag_of_holding.dm @@ -2,7 +2,7 @@ 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 == "Abort" || !in_range(A, user) || !A || !W || user.incapacitated()) + 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)) @@ -14,6 +14,7 @@ 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 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 6f51ba6622..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 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/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 485b7aa26d..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,7 +96,7 @@ //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." 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 e1493df15b..211bb35263 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -240,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) @@ -278,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) @@ -354,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) @@ -397,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) @@ -410,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) @@ -482,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 @@ -565,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..09a9ec9970 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -248,7 +248,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 9a13bde3ff..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) 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 d1e3de1248..5e5c08ee99 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -83,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/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/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 2f8bf41a0b..03c60be91c 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -167,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/newscaster.dm b/code/game/machinery/newscaster.dm index f9dbcc85d5..aa847a4624 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -874,7 +874,7 @@ GLOBAL_LIST_EMPTY(allCasters) say("Breaking news from [channel]!") alert = TRUE update_icon() - addtimer(CALLBACK(src,.proc/remove_alert),alert_delay,TIMER_OVERRIDE) + addtimer(CALLBACK(src,.proc/remove_alert),alert_delay,TIMER_UNIQUE|TIMER_OVERRIDE) playsound(loc, 'sound/machines/twobeep.ogg', 75, 1) else say("Attention! Wanted issue distributed!") diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 2ff0a6758d..82ccadf5cc 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -245,7 +245,7 @@ visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") playsound(src, 'sound/machines/airlockclose.ogg', 25, 1) for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected - I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) + SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive) if(contamination) qdel(contamination) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index fb45d6029f..9d151a8dd1 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -509,7 +509,7 @@ w_class = WEIGHT_CLASS_TINY var/timer = 0 var/detonated = 0 - var/existant = 0 + var/existent = 0 /obj/item/syndicatedetonator/attack_self(mob/user) if(timer < world.time) @@ -517,9 +517,9 @@ if(B.active) B.detonation_timer = world.time + BUTTON_DELAY detonated++ - existant++ + existent++ playsound(user, 'sound/machines/click.ogg', 20, 1) - to_chat(user, "[existant] found, [detonated] triggered.") + to_chat(user, "[existent] found, [detonated] triggered.") if(detonated) var/turf/T = get_turf(src) detonated-- @@ -528,7 +528,7 @@ message_admins(log_str) log_game("[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [AREACOORD(T)]") detonated = 0 - existant = 0 + existent = 0 timer = world.time + BUTTON_COOLDOWN diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index a5d9e44e81..97c508573b 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -120,7 +120,7 @@ dat += "Data type: Audio File
    " dat += "Source: Unidentifiable
    " dat += "Class: [race]
    " - dat += "Contents: Unintelligble
    " + dat += "Contents: Unintelligible
    " dat += "
    " diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index 7a04869b93..2d737b1f24 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -6,7 +6,7 @@ /obj/machinery/telecomms/allinone name = "telecommunications mainframe" icon_state = "comm_server" - desc = "A compact machine used for portable subspace telecommuniations processing." + desc = "A compact machine used for portable subspace telecommunications processing." density = TRUE use_power = NO_POWER_USE idle_power_usage = 0 diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 4fa40910a8..4c74518937 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -28,8 +28,7 @@ /obj/machinery/transformer/examine(mob/user) . = ..() if(cooldown && (issilicon(user) || isobserver(user))) - var/seconds_remaining = (cooldown_timer - world.time) / 10 - to_chat(user, "It will be ready in [max(0, seconds_remaining)] seconds.") + to_chat(user, "It will be ready in [DisplayTimeText(cooldown_timer - world.time)].") /obj/machinery/transformer/Destroy() QDEL_NULL(countdown) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 8575a6f2dc..56377e5a1f 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -49,7 +49,7 @@ /obj/machinery/washing_machine/proc/wash_cycle() for(var/X in contents) var/atom/movable/AM = X - AM.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) AM.machine_wash(src) busy = FALSE diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 3a047b20a1..bc781d1f07 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -78,6 +78,14 @@ name = "\improper KILL CLAMP" desc = "They won't know what clamped them!" energy_drain = 0 + dam_force = 0 + var/real_clamp = FALSE + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real + desc = "They won't know what clamped them! This time for real!" + energy_drain = 10 + dam_force = 20 + real_clamp = TRUE /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target) if(!action_checks(target)) @@ -108,11 +116,41 @@ if(M.stat == DEAD) return if(chassis.occupant.a_intent == INTENT_HARM) - target.visible_message("[chassis] destroys [target] in an unholy fury.", \ - "[chassis] destroys [target] in an unholy fury.") - if(chassis.occupant.a_intent == INTENT_DISARM) - target.visible_message("[chassis] rips [target]'s arms off.", \ - "[chassis] rips [target]'s arms off.") + if(real_clamp) + M.take_overall_damage(dam_force) + if(!M) + return + M.adjustOxyLoss(round(dam_force/2)) + M.updatehealth() + target.visible_message("[chassis] destroys [target] in an unholy fury.", \ + "[chassis] destroys [target] in an unholy fury.") + add_logs(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") + else + target.visible_message("[chassis] destroys [target] in an unholy fury.", \ + "[chassis] destroys [target] in an unholy fury.") + else if(chassis.occupant.a_intent == INTENT_DISARM) + if(real_clamp) + var/mob/living/carbon/C = target + var/play_sound = FALSE + var/limbs_gone = "" + var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM) + if(affected != null) + affected.dismember(damtype) + play_sound = TRUE + limbs_gone = ", [affected]" + affected = C.get_bodypart(BODY_ZONE_R_ARM) + if(affected != null) + affected.dismember(damtype) + play_sound = TRUE + limbs_gone = "[limbs_gone], [affected]" + if(play_sound) + playsound(src, get_dismember_sound(), 80, TRUE) + target.visible_message("[chassis] rips [target]'s arms off.", \ + "[chassis] rips [target]'s arms off.") + add_logs(chassis.occupant, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") + else + target.visible_message("[chassis] rips [target]'s arms off.", \ + "[chassis] rips [target]'s arms off.") else step_away(M,chassis) target.visible_message("[chassis] tosses [target] like a piece of paper.") diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 89330fa006..6c0795028b 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -193,7 +193,7 @@ //Base ballistic weapon type /obj/item/mecha_parts/mecha_equipment/weapon/ballistic - name = "general ballisic weapon" + name = "general ballistic weapon" fire_sound = 'sound/weapons/gunshot.ogg' var/projectiles var/projectile_energy_cost diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 77b26c4ec0..c1f41ac5c5 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -36,7 +36,7 @@ /obj/machinery/mecha_part_fabricator/Initialize() var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + TRUE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE stored_research = new return ..() diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index c6ab4ce2f4..936724af9b 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -225,7 +225,7 @@ if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") else - user.visible_message("[user] prys the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") if(11) if(diff==FORWARD) user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].") @@ -521,7 +521,7 @@ if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") else - user.visible_message("[user] prys the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") if(17) if(diff==FORWARD) user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].") @@ -747,7 +747,7 @@ if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") else - user.visible_message("[user] prys the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") if(11) if(diff==FORWARD) user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].") @@ -1164,7 +1164,7 @@ if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") else - user.visible_message("[user] prys the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") if(17) if(diff==FORWARD) user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].") @@ -1515,7 +1515,7 @@ if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") else - user.visible_message("[user] prys the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") if(20) if(diff==FORWARD) user.visible_message("[user] installs the phase armor layer to [parent].", "You install the phase armor layer to [parent].") @@ -1739,7 +1739,7 @@ if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") else - user.visible_message("[user] prys the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") if(11) if(diff==FORWARD) user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].") diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 0daee24925..3f5e4bde66 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -158,12 +158,12 @@ /obj/item/mecha_parts/part/durand_left_leg name = "\improper Durand left leg" - desc = "A Durand left leg. Built particlarly sturdy to support the Durand's heavy weight and defensive needs." + desc = "A Durand left leg. Built particularly sturdy to support the Durand's heavy weight and defensive needs." icon_state = "durand_l_leg" /obj/item/mecha_parts/part/durand_right_leg name = "\improper Durand right leg" - desc = "A Durand right leg. Built particlarly sturdy to support the Durand's heavy weight and defensive needs." + desc = "A Durand right leg. Built particularly sturdy to support the Durand's heavy weight and defensive needs." icon_state = "durand_r_leg" /obj/item/mecha_parts/part/durand_armor diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 1f789281df..645c13292b 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -5,7 +5,7 @@ /obj/structure/mecha_wreckage name = "exosuit wreckage" - desc = "Remains of some unfortunate mecha. Completely unrepairable, but perhaps something can be salvaged." + desc = "Remains of some unfortunate mecha. Completely irreparable, but perhaps something can be salvaged." icon = 'icons/mecha/mecha.dmi' density = TRUE anchored = FALSE diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 21ecc26905..629de2f697 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -88,6 +88,18 @@ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill ME.attach(src) +/obj/mecha/working/ripley/deathripley/real + desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE. FOR REAL" + +/obj/mecha/working/ripley/deathripley/real/Initialize() + . = ..() + for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) + E.detach() + qdel(E) + equipment.Cut() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real + ME.attach(src) + /obj/mecha/working/ripley/mining desc = "An old, dusty mining Ripley." name = "\improper APLU \"Miner\"" diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 3bd1482b3e..9c3df5395f 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -70,7 +70,7 @@ M.throw_alert("buckled", /obj/screen/alert/restrained/buckled) post_buckle_mob(M) - SendSignal(COMSIG_MOVABLE_BUCKLE, M, force) + SEND_SIGNAL(src, COMSIG_MOVABLE_BUCKLE, M, force) return TRUE /obj/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) @@ -88,7 +88,7 @@ buckled_mob.update_canmove() buckled_mob.clear_alert("buckled") buckled_mobs -= buckled_mob - SendSignal(COMSIG_MOVABLE_UNBUCKLE, buckled_mob, force) + SEND_SIGNAL(src, COMSIG_MOVABLE_UNBUCKLE, buckled_mob, force) post_unbuckle_mob(.) diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 035fc845c4..36129f4e4f 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -86,9 +86,6 @@ density = FALSE var/boing = 0 -/obj/effect/anomaly/grav/New() - ..() - /obj/effect/anomaly/grav/anomalyEffect() ..() boing = 1 @@ -121,6 +118,20 @@ A.throw_at(target, 5, 1) boing = 0 +/obj/effect/anomaly/grav/high + var/grav_field + +/obj/effect/anomaly/grav/high/Initialize(mapload, new_lifespan) + . = ..() + setup_grav_field() + +/obj/effect/anomaly/grav/high/proc/setup_grav_field() + grav_field = make_field(/datum/proximity_monitor/advanced/gravity, list("current_range" = 7, "host" = src, "gravity_value" = rand(0,3))) + +/obj/effect/anomaly/grav/high/Destroy() + QDEL_NULL(grav_field) + . = ..() + ///////////////////// /obj/effect/anomaly/flux @@ -131,9 +142,6 @@ var/shockdamage = 20 var/explosive = TRUE -/obj/effect/anomaly/flux/New() - ..() - /obj/effect/anomaly/flux/anomalyEffect() ..() canshock = 1 @@ -179,9 +187,6 @@ icon_state = "bluespace" density = TRUE -/obj/effect/anomaly/bluespace/New() - ..() - /obj/effect/anomaly/bluespace/anomalyEffect() ..() for(var/mob/living/M in range(1,src)) @@ -252,9 +257,6 @@ icon_state = "mustard" var/ticks = 0 -/obj/effect/anomaly/pyro/New() - ..() - /obj/effect/anomaly/pyro/anomalyEffect() ..() ticks++ @@ -287,9 +289,6 @@ icon_state = "bhole3" desc = "That's a nice station you have there. It'd be a shame if something happened to it." -/obj/effect/anomaly/bhole/New() - ..() - /obj/effect/anomaly/bhole/anomalyEffect() ..() if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index 31ca7dd307..d76a335888 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -31,7 +31,7 @@ poster_structure = null . = ..() -// These icon_states may be overriden, but are for mapper's convinence +// These icon_states may be overridden, but are for mapper's convinence /obj/item/poster/random_contraband name = "random contraband poster" poster_type = /obj/structure/sign/poster/contraband/random @@ -127,7 +127,7 @@ // Deny placing posters on currently-diagonal walls, although the wall may change in the future. if (smooth & SMOOTH_DIAGONAL) - for (var/O in our_overlays) + for (var/O in overlays) var/image/I = O if (copytext(I.icon_state, 1, 3) == "d-") return @@ -547,7 +547,7 @@ /obj/structure/sign/poster/official/anniversary_vintage_reprint name = "50th Anniversary Vintage Reprint" - desc = "A reprint of a poster from 2505, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen." + desc = "A reprint of a poster from 2505, commemorating the 50th Anniversary of Nanoposters Manufacturing, a subsidiary of Nanotrasen." icon_state = "poster26_legit" /obj/structure/sign/poster/official/fruit_bowl diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index 1165ee50a0..8cb48d1874 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -5,14 +5,14 @@ And maybe we'll come back\n\ To Earth, who can tell?" - var/displayed_text - var/atom/attached_to - color = "#ff0000" - var/text_size = 4 - var/started = FALSE invisibility = INVISIBILITY_OBSERVER anchored = TRUE layer = GHOST_LAYER + color = "#ff0000" // text color + var/text_size = 3 // larger values clip when the displayed text is larger than 2 digits. + var/started = FALSE + var/displayed_text + var/atom/attached_to /obj/effect/countdown/Initialize() . = ..() @@ -135,7 +135,6 @@ /obj/effect/countdown/doomsday name = "doomsday countdown" - text_size = 3 /obj/effect/countdown/doomsday/get_value() var/obj/machinery/doomsday_device/DD = attached_to diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 472261003f..75aeaa447c 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -289,7 +289,7 @@ if(M) more = "[ADMIN_LOOKUPFLW(M)] " message_admins("Smoke: ([whereLink])[contained]. Key: [more ? more : carry.my_atom.fingerprintslast].") - log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") + log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last touched by [carry.my_atom.fingerprintslast].") else message_admins("Smoke: ([whereLink])[contained]. No associated key.") log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index 8453b6438d..49f82e106d 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -28,20 +28,20 @@ playsound(src.loc, "sparks", 100, 1) var/turf/T = loc if(isturf(T)) - T.hotspot_expose(1000,100) + T.hotspot_expose(700,5) QDEL_IN(src, 20) /obj/effect/particle_effect/sparks/Destroy() var/turf/T = loc if(isturf(T)) - T.hotspot_expose(1000,100) + T.hotspot_expose(700,1) return ..() /obj/effect/particle_effect/sparks/Move() ..() var/turf/T = loc if(isturf(T)) - T.hotspot_expose(1000,100) + T.hotspot_expose(700,1) /datum/effect_system/spark_spread effect_type = /obj/effect/particle_effect/sparks diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 2ae4f5e5c5..4bca817e73 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -131,7 +131,7 @@ var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc) add_logs(victim, null, "entered a blood frenzy") - chainsaw.flags_1 |= NODROP_1 + chainsaw.item_flags |= NODROP victim.drop_all_held_items() victim.put_in_hands(chainsaw, forced = TRUE) chainsaw.attack_self(victim) diff --git a/code/game/objects/effects/proximity.dm b/code/game/objects/effects/proximity.dm index 637539e0b1..8cd23f2cf8 100644 --- a/code/game/objects/effects/proximity.dm +++ b/code/game/objects/effects/proximity.dm @@ -1,6 +1,6 @@ /datum/proximity_monitor var/atom/host //the atom we are tracking - var/atom/hasprox_reciever //the atom that will recieve HasProximity calls. + var/atom/hasprox_receiver //the atom that will receive HasProximity calls. var/atom/last_host_loc var/list/checkers //list of /obj/effect/abstract/proximity_checkers var/current_range @@ -16,9 +16,9 @@ /datum/proximity_monitor/proc/SetHost(atom/H,atom/R) if(R) - hasprox_reciever = R - else if(hasprox_reciever == host) //Default case - hasprox_reciever = H + hasprox_receiver = R + else if(hasprox_receiver == host) //Default case + hasprox_receiver = H host = H last_host_loc = host.loc if(movement_tracker) @@ -29,7 +29,7 @@ /datum/proximity_monitor/Destroy() host = null last_host_loc = null - hasprox_reciever = null + hasprox_receiver = null QDEL_LIST(checkers) QDEL_NULL(movement_tracker) return ..() @@ -43,7 +43,7 @@ SetRange(curr_range, TRUE) if(curr_range) testing("HasProx: [host] -> [host]") - hasprox_reciever.HasProximity(host) //if we are processing, we're guaranteed to be a movable + hasprox_receiver.HasProximity(host) //if we are processing, we're guaranteed to be a movable /datum/proximity_monitor/proc/SetRange(range, force_rebuild = FALSE) if(!force_rebuild && range == current_range) @@ -109,4 +109,4 @@ /obj/effect/abstract/proximity_checker/Crossed(atom/movable/AM) set waitfor = FALSE - monitor.hasprox_reciever.HasProximity(AM) + monitor.hasprox_receiver.HasProximity(AM) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 723852f162..293809efd2 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -142,7 +142,7 @@ return var/obj/machinery/atmospherics/components/unary/vent_pump/exit_vent = pick(vents) if(prob(50)) - visible_message("[src] scrambles into the ventillation ducts!", \ + visible_message("[src] scrambles into the ventilation ducts!", \ "You hear something scampering through the ventilation ducts.") spawn(rand(20,60)) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 0203cb66c3..7d02d9d383 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -358,6 +358,29 @@ pixel_y = rand(-4,4) animate(src, pixel_y = pixel_y + 32, alpha = 0, time = 25) +/obj/effect/temp_visual/love_heart + name = "love heart" + icon = 'icons/effects/effects.dmi' + icon_state = "heart" + duration = 25 + +/obj/effect/temp_visual/love_heart/Initialize(mapload) + . = ..() + pixel_x = rand(-10,10) + pixel_y = rand(-10,10) + animate(src, pixel_y = pixel_y + 32, alpha = 0, time = duration) + +/obj/effect/temp_visual/love_heart/invisible + icon_state = null + +/obj/effect/temp_visual/love_heart/invisible/Initialize(mapload, mob/seer) + . = ..() + var/image/I = image(icon = 'icons/effects/effects.dmi', icon_state = "heart", layer = ABOVE_MOB_LAYER, loc = src) + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/onePerson, "heart", I, seer) + I.alpha = 255 + I.appearance_flags = RESET_ALPHA + animate(I, alpha = 0, time = duration) + /obj/effect/temp_visual/bleed name = "bleed" icon = 'icons/effects/bleed.dmi' diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index ca7d8ae0d7..abda070f5e 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -15,7 +15,7 @@ icon_state = "impact_omni" /obj/effect/projectile/impact/xray - name = "xray impact" + name = "\improper X-ray impact" icon_state = "impact_xray" /obj/effect/projectile/impact/pulse diff --git a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm index f161667843..30dd3dc811 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm @@ -8,7 +8,6 @@ light_range = 2 light_color = "#00ffff" mouse_opacity = MOUSE_OPACITY_TRANSPARENT - flags_1 = ABSTRACT_1 appearance_flags = 0 /obj/effect/projectile/singularity_pull() diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index f89674e282..12f56585d9 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -24,7 +24,7 @@ icon_state = "beam_omni" /obj/effect/projectile/tracer/xray - name = "xray laser" + name = "\improper X-ray laser" icon_state = "xray" /obj/effect/projectile/tracer/pulse diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9da8946429..dd952f5c13 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -137,7 +137,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) stack_trace("Invalid type [embedding.type] found in .embedding during /obj/item Initialize()") /obj/item/Destroy() - flags_1 &= ~DROPDEL_1 //prevent reqdels + item_flags &= ~DROPDEL //prevent reqdels if(ismob(loc)) var/mob/m = loc m.temporarilyRemoveItemFromInventory(src, TRUE) @@ -277,19 +277,28 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup. return + //Heavy gravity makes picking up things very slow. + var/grav = user.has_gravity() + if(grav > STANDARD_GRAVITY) + var/grav_power = min(3,grav - STANDARD_GRAVITY) + to_chat(user,"You start picking up [src]...") + if(!do_mob(user,src,30*grav_power)) + return + + //If the item is in a storage item, take it out - loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, src, user.loc, TRUE) + SEND_SIGNAL(loc, COMSIG_TRY_STORAGE_TAKE, src, user.loc, TRUE) if(throwing) throwing.finalize(FALSE) if(loc == user) - if(!allow_attack_hand_drop(user) || !user.dropItemToGround(src)) + if(!allow_attack_hand_drop(user) || !user.temporarilyRemoveItemFromInventory(src)) return pickup(user) add_fingerprint(user) if(!user.put_in_active_hand(src)) - dropped(user) + user.dropItemToGround(src) /obj/item/proc/allow_attack_hand_drop(mob/user) return TRUE @@ -300,18 +309,18 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(anchored) return - loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, src, user.loc, TRUE) + SEND_SIGNAL(loc, COMSIG_TRY_STORAGE_TAKE, src, user.loc, TRUE) if(throwing) throwing.finalize(FALSE) if(loc == user) - if(!user.dropItemToGround(src)) + if(!user.temporarilyRemoveItemFromInventory(src)) return pickup(user) add_fingerprint(user) if(!user.put_in_active_hand(src)) - dropped(user) + user.dropItemToGround(src) /obj/item/attack_alien(mob/user) var/mob/living/carbon/alien/A = user @@ -351,14 +360,14 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) for(var/X in actions) var/datum/action/A = X A.Remove(user) - if(DROPDEL_1 & flags_1) + if(item_flags & DROPDEL) qdel(src) item_flags &= ~IN_INVENTORY - SendSignal(COMSIG_ITEM_DROPPED,user) + SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) - SendSignal(COMSIG_ITEM_PICKUP, user) + SEND_SIGNAL(src, COMSIG_ITEM_PICKUP, user) item_flags |= IN_INVENTORY // called when "found" in pockets and storage items. Returns 1 if the search should end. @@ -371,7 +380,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(mob/user, slot) - SendSignal(COMSIG_ITEM_EQUIPPED, user, slot) + SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) for(var/X in actions) var/datum/action/A = X if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. @@ -472,7 +481,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) else M.take_bodypart_damage(7) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "eye_stab", /datum/mood_event/eye_stab) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "eye_stab", /datum/mood_event/eye_stab) add_logs(user, M, "attacked", "[src.name]", "(INTENT: [uppertext(user.a_intent)])") @@ -508,7 +517,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) /obj/item/throw_impact(atom/A, datum/thrownthing/throwingdatum) if(A && !QDELETED(A)) - SendSignal(COMSIG_MOVABLE_IMPACT, A, throwingdatum) + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, A, throwingdatum) if(is_hot() && isliving(A)) var/mob/living/L = A L.IgniteMob() @@ -532,8 +541,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) /obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage if(!newLoc) return FALSE - if(loc.SendSignal(COMSIG_CONTAINS_STORAGE)) - return loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, src, newLoc, TRUE) + if(SEND_SIGNAL(loc, COMSIG_CONTAINS_STORAGE)) + return SEND_SIGNAL(loc, COMSIG_TRY_STORAGE_TAKE, src, newLoc, TRUE) return FALSE /obj/item/proc/get_belt_overlay() //Returns the icon used for overlaying the object on a belt @@ -596,7 +605,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(success) location = get_turf(M) if(isturf(location)) - location.hotspot_expose(flame_heat, 5) + location.hotspot_expose(flame_heat, 1) /obj/item/proc/ignition_effect(atom/A, mob/user) if(is_hot()) @@ -780,3 +789,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) appearance_flags &= ~NO_CLIENT_COLOR dropped(M) return ..() + +/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback) + if (item_flags & NODROP) + return + return ..() diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 5d41b90dc0..0dfbecf92d 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -193,7 +193,7 @@ AI MODULES /obj/item/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) if(..()) - return "[targetName], but the AI's existing law 0 cannot be overriden." + return "[targetName], but the AI's existing law 0 cannot be overridden." return targetName diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 5aeefc2fcd..03225102c2 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -15,7 +15,8 @@ RLD opacity = 0 density = FALSE anchored = FALSE - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON force = 0 throwforce = 10 throw_speed = 3 @@ -129,7 +130,7 @@ RLD lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' max_matter = 160 - item_flags = NO_MAT_REDEMPTION + item_flags = NO_MAT_REDEMPTION | NOBLUDGEON has_ammobar = TRUE var/mode = 1 var/ranged = FALSE diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index b894cf8ee5..95638ad5e2 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -13,7 +13,7 @@ RSF opacity = 0 density = FALSE anchored = FALSE - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) var/matter = 0 var/mode = 1 diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 82c272e7f9..afb2b22076 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -9,7 +9,8 @@ materials = list(MAT_METAL=50, MAT_GLASS=50) - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT usesound = 'sound/effects/spray2.ogg' diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index a634f2a4ce..ab877ff97a 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -112,8 +112,7 @@ /obj/item/areaeditor/blueprints/proc/get_images(turf/T, viewsize) . = list() - for(var/tt in RANGE_TURFS(viewsize, T)) - var/turf/TT = tt + for(var/turf/TT in range(viewsize, T)) if(TT.blueprint_data) . += TT.blueprint_data diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index bfbb7e67bb..109078f804 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -49,7 +49,7 @@ change_appearance(I, user) return // Why yes, this does closely resemble mob and object attack code. - if(I.flags_1 & NOBLUDGEON_1) + if(I.item_flags & NOBLUDGEON) return if(!I.force) playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 2d30a015e2..227d4b5358 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -78,8 +78,7 @@ item_state = "card-id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' - flags_1 = NOBLUDGEON_1 - item_flags = NO_MAT_REDEMPTION + item_flags = NO_MAT_REDEMPTION | NOBLUDGEON var/prox_check = TRUE //If the emag requires you to be in range /obj/item/card/emag/bluespace @@ -98,7 +97,7 @@ A.emag_act(user) /obj/item/card/emagfake - desc = "It's a card with a magnetic strip attached to some circuitry." + desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back." name = "cryptographic sequencer" icon_state = "emag" item_state = "card-id" diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index d861b515f8..24c48ccecd 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -48,7 +48,7 @@ icon_state = "chronogun" item_state = "chronogun" w_class = WEIGHT_CLASS_NORMAL - flags_1 = NODROP_1 | DROPDEL_1 + item_flags = NODROP | DROPDEL ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam) can_charge = 0 fire_delay = 50 diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 15cb7ae0b3..e28d86e7e6 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -575,7 +575,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND user.apply_damage(5, BURN, hitzone) user.visible_message("After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn [user.p_their()] finger in the process.", "You burn yourself while lighting the lighter!") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "burnt_thumb", /datum/mood_event/burnt_thumb) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "burnt_thumb", /datum/mood_event/burnt_thumb) else set_lit(FALSE) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 6bef0499fd..8d91b3855a 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -215,37 +215,36 @@ name = "Booze-O-Mat Vendor (Machine Board)" desc = "You can turn the \"brand selection\" dial using a screwdriver." build_path = /obj/machinery/vending/boozeomat - req_components = list( - /obj/item/vending_refill/boozeomat = 3) + req_components = list(/obj/item/vending_refill/boozeomat = 1) - var/static/list/vending_names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", - /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/games = "\improper Good Clean Fun", - /obj/machinery/vending/autodrobe = "AutoDrobe", - /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", - /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", - /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", - /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", - /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", - /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", - /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", - /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", - /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", - /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", - /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", - /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", - /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", - /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", - /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", - /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", - /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", - /obj/machinery/vending/clothing = "ClothesMate", - /obj/machinery/vending/medical = "NanoMed Plus", - /obj/machinery/vending/wallmed = "NanoMed") - needs_anchored = FALSE + var/static/list/vending_names_paths = list( + /obj/machinery/vending/boozeomat = "Booze-O-Mat", + /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", + /obj/machinery/vending/snack = "Getmore Chocolate Corp", + /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", + /obj/machinery/vending/games = "\improper Good Clean Fun", + /obj/machinery/vending/autodrobe = "AutoDrobe", + /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", + /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", + /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", + /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", + /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", + /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", + /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", + /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", + /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", + /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", + /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", + /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", + /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", + /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", + /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", + /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", + /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", + /obj/machinery/vending/clothing = "ClothesMate", + /obj/machinery/vending/medical = "NanoMed Plus", + /obj/machinery/vending/wallmed = "NanoMed") /obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) @@ -261,7 +260,7 @@ /obj/item/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath) build_path = typepath name = "[vending_names_paths[build_path]] Vendor (Machine Board)" - req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count)) + req_components = list(initial(typepath.refill_canister) = 1) /obj/item/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) for(var/typepath in vending_names_paths) @@ -865,14 +864,14 @@ build_path = /obj/machinery/vending/donksofttoyvendor req_components = list( /obj/item/stack/sheet/glass = 1, - /obj/item/vending_refill/donksoft = 3) + /obj/item/vending_refill/donksoft = 1) /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor name = "Syndicate Donksoft Toy Vendor (Machine Board)" build_path = /obj/machinery/vending/toyliberationstation req_components = list( /obj/item/stack/sheet/glass = 1, - /obj/item/vending_refill/donksoft = 3) + /obj/item/vending_refill/donksoft = 1) /obj/item/circuitboard/machine/dish_drive name = "Dish Drive (Machine Board)" diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index cd70ce6732..70b0d93344 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -19,7 +19,7 @@ lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' w_class = WEIGHT_CLASS_TINY - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON throwforce = 0 throw_speed = 3 throw_range = 7 @@ -61,7 +61,7 @@ return //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn - target.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) + SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) if(user.client && ((target in user.client.screen) && !user.is_holding(target))) to_chat(user, "You need to take that [target.name] off before cleaning it!") else if(istype(target, /obj/effect/decal/cleanable)) @@ -88,7 +88,7 @@ var/obj/effect/decal/cleanable/C = locate() in target qdel(C) target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - target.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) target.wash_cream() return @@ -117,7 +117,7 @@ AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50) /obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk) return ..() /obj/item/bikehorn/suicide_act(mob/user) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index db86adab07..389934b778 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(PDAs) item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) @@ -175,12 +175,12 @@ GLOBAL_LIST_EMPTY(PDAs) return attack_self(M) return ..() -/obj/item/pda/attack_self(mob/user) +/obj/item/pda/interact(mob/user) if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return - . = ..() + ..() var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/simple/pda) assets.send(user) @@ -519,16 +519,11 @@ GLOBAL_LIST_EMPTY(PDAs) if("Ringtone") var/t = input(U, "Please enter new ringtone", name, ttone) as text if(in_range(src, U) && loc == U && t) - GET_COMPONENT(hidden_uplink, /datum/component/uplink) - if(hidden_uplink && (trim(lowertext(t)) == trim(lowertext(lock_code)))) - hidden_uplink.locked = FALSE - hidden_uplink.interact(U) - to_chat(U, "The PDA softly beeps.") + if(SEND_SIGNAL(src, COMSIG_PDA_CHANGE_RINGTONE, U, t) & COMPONENT_STOP_RINGTONE_CHANGE) U << browse(null, "window=pda") - src.mode = 0 + return else - t = copytext(sanitize(t), 1, 20) - ttone = t + ttone = copytext(sanitize(t), 1, 20) else U << browse(null, "window=pda") return diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 4dc5fb166a..217295c872 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -549,7 +549,7 @@ Code: /obj/item/cartridge/Topic(href, href_list) ..() - if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(!usr.canUseTopic(src, !issilicon(usr))) usr.unset_machine() usr << browse(null, "window=pda") return diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index c1de90f3f0..740f22edb4 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -8,7 +8,7 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/flush = FALSE var/mob/living/silicon/ai/AI diff --git a/code/game/objects/items/devices/anomaly_neutralizer.dm b/code/game/objects/items/devices/anomaly_neutralizer.dm index c719059631..ca018a041f 100644 --- a/code/game/objects/items/devices/anomaly_neutralizer.dm +++ b/code/game/objects/items/devices/anomaly_neutralizer.dm @@ -8,7 +8,7 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON /obj/item/anomaly_neutralizer/afterattack(atom/target, mob/user, proximity) ..() diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 64a64853b1..e88b906862 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -14,7 +14,7 @@ item_state = "camera_bug" throw_speed = 4 throw_range = 20 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/obj/machinery/camera/current = null diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 990d6cc038..6544a883f3 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -2,7 +2,8 @@ name = "chameleon-projector" icon = 'icons/obj/device.dmi' icon_state = "shield0" - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' @@ -49,7 +50,7 @@ return if(iseffect(target)) if(!(istype(target, /obj/effect/decal))) //be a footprint - return + return playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) to_chat(user, "Scanned [target].") var/obj/temp = new/obj() diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm index b21ba58380..e12344fa53 100644 --- a/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/code/game/objects/items/devices/dogborg_sleeper.dm @@ -48,7 +48,7 @@ /obj/item/dogborg/sleeper/New() ..() update_icon() - flags_1 |= NOBLUDGEON_1 //No more attack messages + item_flags |= NOBLUDGEON //No more attack messages /obj/item/dogborg/sleeper/Exit(atom/movable/O) return 0 diff --git a/code/game/objects/items/devices/doorCharge.dm b/code/game/objects/items/devices/doorCharge.dm index 6fa1b9d742..9b009da7a4 100644 --- a/code/game/objects/items/devices/doorCharge.dm +++ b/code/game/objects/items/devices/doorCharge.dm @@ -9,7 +9,7 @@ w_class = WEIGHT_CLASS_SMALL throw_range = 4 throw_speed = 1 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON force = 3 attack_verb = list("blown up", "exploded", "detonated") materials = list(MAT_METAL=50, MAT_GLASS=30) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 3386b975e3..fee2461760 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -85,7 +85,7 @@ "You direct [src] to [M]'s eyes.") if(M.stat == DEAD || (M.has_trait(TRAIT_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind to_chat(user, "[M]'s pupils don't react to the light!") - else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-RAY vision + else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-ray vision to_chat(user, "[M]'s pupils give an eerie glow!") else //they're okay! to_chat(user, "[M]'s pupils narrow.") @@ -399,6 +399,11 @@ to_chat(user, "\The [src] needs time to recharge!") return +/obj/item/flashlight/emp/debug //for testing emp_act() + name = "debug EMP flashlight" + emp_max_charges = 100 + emp_cur_charges = 100 + // Glowsticks, in the uncomfortable range of similar to flares, // but not similar enough to make it worth a refactor /obj/item/flashlight/glowstick @@ -530,5 +535,6 @@ desc = "This shouldn't exist outside of someone's head, how are you seeing this?" brightness_on = 15 flashlight_power = 1 - flags_1 = CONDUCT_1 | DROPDEL_1 + flags_1 = CONDUCT_1 + item_flags = DROPDEL actions_types = list() diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index bb0914eeec..d8dce7c427 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -5,7 +5,7 @@ icon_state = "signmaker_engi" slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' @@ -105,4 +105,4 @@ /obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) if(sound_effect) play_attack_sound(damage_amount, damage_type, damage_flag) - generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0) \ No newline at end of file + generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 1b4bb55f99..fb4f4f8566 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -9,7 +9,7 @@ #define RAD_GRACE_PERIOD 2 /obj/item/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis - name = "geiger counter" + name = "\improper Geiger counter" desc = "A handheld device used for detecting and measuring radiation pulses." icon = 'icons/obj/device.dmi' icon_state = "geiger_off" diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 9bdd01ad77..c362d9f7f2 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -34,7 +34,7 @@ GLOBAL_LIST_EMPTY(GPS_list) emped = TRUE cut_overlay("working") add_overlay("emp") - addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early + addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_UNIQUE|TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early SStgui.close_uis(src) //Close the UI control if it is open. /obj/item/gps/proc/reboot() @@ -156,11 +156,11 @@ GLOBAL_LIST_EMPTY(GPS_list) icon_state = "gps-b" gpstag = "BORG0" desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams." - flags_1 = NODROP_1 + item_flags = NODROP /obj/item/gps/internal icon_state = null - flags_1 = ABSTRACT_1 + item_flags = ABSTRACT gpstag = "Eerie Signal" desc = "Report to a coder immediately." invisibility = INVISIBILITY_MAXIMUM diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 32a266dbfb..f9ea6a6be4 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -5,7 +5,8 @@ icon_state = "pointer" item_state = "pen" var/pointer_icon_state - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT materials = list(MAT_METAL=500, MAT_GLASS=500) w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 750e2a9a9b..a59fa11fa6 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -41,7 +41,7 @@ /obj/item/lightreplacer name = "light replacer" - desc = "A device to automatically replace lights. Refill with broken or working lightbulbs, or sheets of glass." + desc = "A device to automatically replace lights. Refill with broken or working light bulbs, or sheets of glass." icon = 'icons/obj/janitor.dmi' icon_state = "lightreplacer0" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index e11cebdf51..43c2b06d44 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -60,7 +60,7 @@ to_chat(user, "Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.") return if(io.io_type != selected_io.io_type) - to_chat(user, "Those two types of channels are incompatable. The first is a [selected_io.io_type], \ + to_chat(user, "Those two types of channels are incompatible. The first is a [selected_io.io_type], \ while the second is a [io.io_type].") return if(io.holder.assembly && io.holder.assembly != selected_io.holder.assembly) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 737f71a978..0867033aad 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -155,5 +155,5 @@ . = ..() if (. & EMP_PROTECT_SELF) return - if(pai) + if(pai && !pai.holoform) pai.emp_act(severity) diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index a13de183a0..6415b105b5 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "labeler1" item_state = "flight" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/paint_color = "grey" materials = list(MAT_METAL=5000, MAT_GLASS=2000) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 1734fa5bfb..2f8b111b4b 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -53,8 +53,8 @@ user.put_in_hands(A) A.add_fingerprint(user) - if(src.flags_1 & NODROP_1) - A.flags_1 |= NODROP_1 + if(item_flags & NODROP) + A.item_flags |= NODROP else return ..() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b4783d059e..6a6d34340e 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -47,6 +47,7 @@ return BRUTELOSS /obj/item/radio/proc/set_frequency(new_frequency) + SEND_SIGNAL(src, COMSIG_RADIO_NEW_FREQUENCY, args) remove_radio(src, frequency) frequency = add_radio(src, new_frequency) @@ -100,12 +101,11 @@ AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES) /obj/item/radio/interact(mob/user) - if (..()) - return if(unscrewed && !isAI(user)) wires.interact(user) + add_fingerprint(user) else - ui_interact(user) + ..() /obj/item/radio/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) @@ -160,13 +160,7 @@ tune = tune * 10 . = TRUE if(.) - frequency = sanitize_frequency(tune, freerange) - set_frequency(frequency) - GET_COMPONENT(hidden_uplink, /datum/component/uplink) - if(hidden_uplink && (frequency == traitor_frequency)) - hidden_uplink.locked = FALSE - hidden_uplink.interact(usr) - ui.close() + set_frequency(sanitize_frequency(tune, freerange)) if("listen") listening = !listening . = TRUE diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index 4dc8d04267..2f137861aa 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -49,7 +49,7 @@ if(iscarbon(user)) var/mob/living/carbon/C = user if(C.get_item_by_slot(SLOT_HEAD) == src) - if(flags_1 & NODROP_1 && !struggling) + if((item_flags & NODROP) && !struggling) struggling = TRUE var/fear_string switch(time_left) @@ -74,7 +74,7 @@ else user.visible_message("The lock on [user]'s [name] pops open!", \ "You force open the padlock!", "You hear a single, pronounced click!") - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP struggling = FALSE else ..() @@ -116,7 +116,7 @@ /obj/item/reverse_bear_trap/proc/reset() ticking = FALSE - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP soundloop.stop() soundloop2.stop() STOP_PROCESSING(SSprocessing, src) @@ -125,7 +125,7 @@ ticking = TRUE escape_chance = initial(escape_chance) //we keep these vars until re-arm, for tracking purposes time_left = initial(time_left) - flags_1 |= NODROP_1 + item_flags |= NODROP soundloop.start() soundloop2.mid_length = initial(soundloop2.mid_length) soundloop2.start() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 327af15f43..6acff297c9 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -68,7 +68,8 @@ SLIME SCANNER lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' desc = "A hand-held body scanner able to distinguish vital signs of the subject." - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 w_class = WEIGHT_CLASS_TINY @@ -256,7 +257,32 @@ SLIME SCANNER // Species and body temperature if(ishuman(M)) var/mob/living/carbon/human/H = M - to_chat(user, "Species: [H.dna.species.name]") + var/datum/species/S = H.dna.species + var/mutant = FALSE + if (H.dna.check_mutation(HULK)) + mutant = TRUE + else if (S.mutantlungs != initial(S.mutantlungs)) + mutant = TRUE + else if (S.mutant_brain != initial(S.mutant_brain)) + mutant = TRUE + else if (S.mutant_heart != initial(S.mutant_heart)) + mutant = TRUE + else if (S.mutanteyes != initial(S.mutanteyes)) + mutant = TRUE + else if (S.mutantears != initial(S.mutantears)) + mutant = TRUE + else if (S.mutanthands != initial(S.mutanthands)) + mutant = TRUE + else if (S.mutanttongue != initial(S.mutanttongue)) + mutant = TRUE + else if (S.mutanttail != initial(S.mutanttail)) + mutant = TRUE + else if (S.mutantliver != initial(S.mutantliver)) + mutant = TRUE + else if (S.mutantstomach != initial(S.mutantstomach)) + mutant = TRUE + + to_chat(user, "Species: [S.name][mutant ? "-derived mutant" : ""]") to_chat(user, "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)") // Time of death @@ -348,7 +374,8 @@ SLIME SCANNER lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 0 throw_speed = 3 @@ -428,7 +455,7 @@ SLIME SCANNER if(user.canUseTopic(src)) if(cooldown) - to_chat(user, "[src]'s barometer function is prepraring itself.") + to_chat(user, "[src]'s barometer function is preparing itself.") return var/turf/T = get_turf(user) @@ -575,4 +602,4 @@ SLIME SCANNER if(T.effectmod) to_chat(user, "Core mutation in progress: [T.effectmod]") to_chat(user, "Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]") - to_chat(user, "========================") \ No newline at end of file + to_chat(user, "========================") diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index a944230925..cb0d4ec4ac 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -36,7 +36,7 @@ /obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6 name = "die" - desc = "A die with six sides. Basic and servicable." + desc = "A die with six sides. Basic and serviceable." icon = 'icons/obj/dice.dmi' icon_state = "d6" w_class = WEIGHT_CLASS_TINY @@ -111,7 +111,7 @@ /obj/item/dice/d00 name = "d00" - desc = "A die with ten sides. Works better for d100 rolls than a golfball." + desc = "A die with ten sides. Works better for d100 rolls than a golf ball." icon_state = "d00" sides = 10 @@ -123,7 +123,7 @@ /obj/item/dice/d20 name = "d20" - desc = "A die with twenty sides. The prefered die to throw at the GM." + desc = "A die with twenty sides. The preferred die to throw at the GM." icon_state = "d20" sides = 20 diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index a4b9cf708b..ebae70ca05 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -98,12 +98,12 @@ add_mutations_static = list(HULK) /obj/item/dnainjector/xraymut - name = "\improper DNA injector (Xray)" + name = "\improper DNA injector (X-ray)" desc = "Finally you can see what the Captain does." add_mutations_static = list(XRAY) /obj/item/dnainjector/antixray - name = "\improper DNA injector (Anti-Xray)" + name = "\improper DNA injector (Anti-X-ray)" desc = "It will make you see harder." remove_mutations_static = list(XRAY) @@ -160,7 +160,7 @@ /obj/item/dnainjector/antitour name = "\improper DNA injector (Anti-Tour.)" - desc = "Will cure tourrets." + desc = "Will cure Tourette's." remove_mutations_static = list(TOURETTES) /obj/item/dnainjector/tourmut diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 08fd0cedae..6b8b96364c 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -42,8 +42,8 @@ sprite_name = "miniFE" dog_fashion = null -/obj/item/extinguisher/New() - ..() +/obj/item/extinguisher/Initialize() + . = ..() create_reagents(max_water) reagents.add_reagent(chem, max_water) diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index a09d39072d..af88c74e65 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -95,7 +95,7 @@ GLOBAL_LIST_EMPTY(possible_gifts) var/list/gift_types_list = subtypesof(/obj/item) for(var/V in gift_types_list) var/obj/item/I = V - if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.flags_1) & ABSTRACT_1)) + if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT)) gift_types_list -= V GLOB.possible_gifts = gift_types_list var/gift_type = pick(GLOB.possible_gifts) diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 3542afa00e..3699545b41 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -32,7 +32,7 @@ /obj/item/book/granter/action var/granted_action - var/actionname = "catching bugs" //might not seem needed but this makes it so you can safely name aciton buttons toggle this or that without it fucking up the granter, also caps + var/actionname = "catching bugs" //might not seem needed but this makes it so you can safely name action buttons toggle this or that without it fucking up the granter, also caps /obj/item/book/granter/action/attack_self(mob/user) . = ..() @@ -73,7 +73,7 @@ /datum/action/innate/drink_fling name = "Drink Flinging" - desc = "Toggles your ability to satifyingly throw glasses without spilling them." + desc = "Toggles your ability to satisfyingly throw glasses without spilling them." button_icon_state = "drinkfling_off" check_flags = 0 @@ -151,7 +151,7 @@ spellname = "sacred flame" icon_state ="booksacredflame" desc = "Become one with the flames that burn within... and invite others to do so as well." - remarks = list("Well, it's one way to stop an attacker...", "I'm gonna need some good gear to stop myself from burning to death...", "Keep a fire extingusher handy, got it...", "I think I just burned my hand...", "Apply flame directly to chest for proper ignition...", "No pain, no gain...", "One with the flame...") + remarks = list("Well, it's one way to stop an attacker...", "I'm gonna need some good gear to stop myself from burning to death...", "Keep a fire extinguisher handy, got it...", "I think I just burned my hand...", "Apply flame directly to chest for proper ignition...", "No pain, no gain...", "One with the flame...") /obj/item/book/granter/spell/smoke spell = /obj/effect/proc_holder/spell/targeted/smoke @@ -222,7 +222,7 @@ spellname = "forcewall" icon_state ="bookforcewall" desc = "This book has a dedication to mimes everywhere inside the front cover." - remarks = list("I can go through the wall! Neat.", "Why are there so many mime references...?", "This would cause much grief in a hallway...", "This is some suprisingly strong magic to create a wall nobody can pass through...", "Why the dumb stance? It's just a flick of the hand...", "Why are the pages so hard to turn, is this even paper?", "I can't mo Oh, i'm fine...") + remarks = list("I can go through the wall! Neat.", "Why are there so many mime references...?", "This would cause much grief in a hallway...", "This is some surprisingly strong magic to create a wall nobody can pass through...", "Why the dumb stance? It's just a flick of the hand...", "Why are the pages so hard to turn, is this even paper?", "I can't mo Oh, i'm fine...") /obj/item/book/granter/spell/forcewall/recoil(mob/living/user) ..() @@ -253,7 +253,7 @@ if(ishuman(user)) to_chat(user,"HORSIE HAS RISEN") var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags_1 |= NODROP_1 //curses! + magichead.item_flags |= NODROP //curses! magichead.flags_inv &= ~HIDEFACE //so you can still see their face magichead.voicechange = TRUE //NEEEEIIGHH if(!user.dropItemToGround(user.wear_mask)) diff --git a/code/game/objects/items/grenades/antigravity.dm b/code/game/objects/items/grenades/antigravity.dm new file mode 100644 index 0000000000..43b2f94986 --- /dev/null +++ b/code/game/objects/items/grenades/antigravity.dm @@ -0,0 +1,17 @@ +/obj/item/grenade/antigravity + name = "antigravity grenade" + icon_state = "emp" + item_state = "emp" + + var/range = 7 + var/forced_value = 0 + var/duration = 300 + +/obj/item/grenade/antigravity/prime() + update_mob() + + for(var/turf/T in view(range,src)) + var/datum/component/C = T.AddComponent(/datum/component/forced_gravity,forced_value) + QDEL_IN(C,duration) + + qdel(src) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index bed7ba24e4..c961fca9f2 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -75,6 +75,9 @@ return to_chat(user, "You add [I] to the [initial(name)] assembly.") beakers += I + var/reagent_list = pretty_string_from_reagent_list(I.reagents) + add_logs(user, src, "inserted [I]", addition = "[reagent_list] inside.") + log_game("[key_name(user)] inserted [I] into [src] containing [reagent_list] ") else to_chat(user, "[I] is empty!") @@ -111,6 +114,11 @@ if(beakers.len) for(var/obj/O in beakers) O.forceMove(drop_location()) + if(!O.reagents) + continue + var/reagent_list = pretty_string_from_reagent_list(O.reagents) + add_logs(user, src, "removed [O]", addition = "[reagent_list] inside.") + log_game("[key_name(user)] removed [O] from [src] containing [reagent_list]") beakers = list() to_chat(user, "You open the [initial(name)] assembly and remove the payload.") return // First use of the wrench remove beakers, then use the wrench to remove the activation mechanism. @@ -155,6 +163,20 @@ if(nadeassembly) nadeassembly.on_found(finder) +/obj/item/grenade/chem_grenade/log_grenade(mob/user, turf/T) + ..() + var/reagent_string = "" + var/beaker_number = 1 + for(var/obj/exploded_beaker in beakers) + if(!exploded_beaker.reagents) + continue + reagent_string += "[exploded_beaker] [beaker_number++] : " + pretty_string_from_reagent_list(exploded_beaker.reagents.reagent_list) + ";" + var/message = "[src] primed by [user] at [ADMIN_VERBOSEJMP(T)] contained [reagent_string]." + GLOB.bombers += message + message_admins(message) + log_game("[src] primed by [user] at [AREACOORD(T)] contained [reagent_string].") + add_logs(user, src, "primed", addition = "[reagent_string] inside.") + /obj/item/grenade/chem_grenade/prime() if(stage != READY) return diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index e0a9956f9a..923361de3c 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -2,7 +2,7 @@ //Clusterbang //////////////////// /obj/item/grenade/clusterbuster - desc = "Use of this weapon may constiute a war crime in your area, consult your local captain." + desc = "Use of this weapon may constitute a war crime in your area, consult your local captain." name = "clusterbang" icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang" diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index c7b9656dad..ef410ff84b 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -12,7 +12,6 @@ return for(var/mob/living/M in get_hearers_in_view(7, flashbang_turf)) bang(get_turf(M), M) - qdel(src) /obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 8e96e97389..37dc206099 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -5,7 +5,8 @@ item_state = "plastic-explosive" lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON + flags_1 = NONE det_time = 10 display_timer = 0 w_class = WEIGHT_CLASS_SMALL @@ -217,7 +218,7 @@ return if(loc == AM) return - if(AM.SendSignal(COMSIG_CONTAINS_STORAGE) && !AM.SendSignal(COMSIG_IS_STORAGE_LOCKED)) + if(SEND_SIGNAL(AM, COMSIG_CONTAINS_STORAGE) && !SEND_SIGNAL(AM, COMSIG_IS_STORAGE_LOCKED)) return to_chat(user, "You start planting the bomb...") diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index b05da3ab0a..d457224e95 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -13,7 +13,7 @@ /obj/item/grenade/syndieminibomb/concussion name = "HE Grenade" - desc = "A compact shrapnel grenade meant to devestate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction." + desc = "A compact shrapnel grenade meant to devastate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction." icon_state = "concussion" /obj/item/grenade/syndieminibomb/concussion/prime() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 735bcaeb27..2ed152ee21 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -297,7 +297,8 @@ armed = 1 icon_state = "e_snare" trap_damage = 0 - flags_1 = DROPDEL_1 + item_flags = DROPDEL + flags_1 = NONE /obj/item/restraints/legcuffs/beartrap/energy/New() ..() @@ -361,4 +362,4 @@ var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom)) B.Crossed(hit_atom) qdel(src) - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index d13d6cc1dd..ed5e763874 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -86,7 +86,7 @@ do_attack_animation(master, null, src) master.emote("scream") master.remove_status_effect(STATUS_EFFECT_HISGRACE) - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP master.Knockdown(60) master.adjustBruteLoss(master.maxHealth) playsound(master, 'sound/effects/splat.ogg', 100, 0) @@ -170,20 +170,20 @@ update_stats() /obj/item/his_grace/proc/update_stats() - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP var/mob/living/master = get_atom_on_turf(src, /mob/living) switch(bloodthirst) if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) if(HIS_GRACE_CONSUME_OWNER > prev_bloodthirst) master.visible_message("[src] enters a frenzy!") if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) - flags_1 |= NODROP_1 + item_flags |= NODROP if(HIS_GRACE_STARVING > prev_bloodthirst) master.visible_message("[src] is starving!", "[src]'s bloodlust overcomes you. [src] must be fed, or you will become His meal.\ [force_bonus < 15 ? " And still, His power grows.":""]") force_bonus = max(force_bonus, 15) if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) - flags_1 |= NODROP_1 + item_flags |= NODROP if(HIS_GRACE_FAMISHED > prev_bloodthirst) master.visible_message("[src] is very hungry!", "Spines sink into your hand. [src] must feed immediately.\ [force_bonus < 10 ? " His power grows.":""]") diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 48504d6e3c..654afba29d 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -11,7 +11,7 @@ throwforce = 0 throw_speed = 3 throw_range = 7 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/list/signs = list() var/max_signs = 10 var/creation_time = 0 //time to create a holosign in deciseconds. @@ -122,4 +122,3 @@ for(var/H in signs) qdel(H) to_chat(user, "You clear all active holograms.") - diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index f79c9ad0e8..4c38752e28 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -229,7 +229,7 @@ righthand_file = 'icons/mob/inhands/items_righthand.dmi' name = "god hand" desc = "This hand of yours glows with an awesome power!" - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE hitsound = 'sound/weapons/sear.ogg' damtype = BURN @@ -307,7 +307,7 @@ slot_flags = ITEM_SLOT_BELT /obj/item/nullrod/claymore/katana - name = "hanzo steel" + name = "\improper Hanzo steel" desc = "Capable of cutting clean through a holy claymore." icon_state = "katana" item_state = "katana" @@ -449,7 +449,6 @@ name = "possessed chainsaw sword" desc = "Suffer not a heretic to live." slot_flags = ITEM_SLOT_BELT - force = 30 attack_verb = list("sawed", "torn", "cut", "chopped", "diced") hitsound = 'sound/weapons/chainsawhit.ogg' @@ -473,7 +472,7 @@ lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' w_class = WEIGHT_CLASS_HUGE - flags_1 = NODROP_1 | ABSTRACT_1 + item_flags = NODROP | ABSTRACT sharpness = IS_SHARP attack_verb = list("sawed", "torn", "cut", "chopped", "diced") hitsound = 'sound/weapons/chainsawhit.ogg' @@ -544,7 +543,7 @@ item_state = "arm_blade" lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - flags_1 = ABSTRACT_1 | NODROP_1 + item_flags = ABSTRACT | NODROP w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index de22ac8125..eefa302032 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -4,7 +4,7 @@ desc = "A label on the side of this potato reads \"Product of DonkCo Service Wing. Activate far away from populated areas. Device will only attach to sapient creatures.\" You can attack anyone with it to force it on them instead of yourself!" icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "potato" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON force = 0 var/icon_off = "potato" var/icon_on = "potato_active" @@ -133,7 +133,7 @@ return update_icon() if(sticky) - flags_1 |= NODROP_1 + item_flags |= NODROP name = "primed [name]" activation_time = timer + world.time detonation_timerid = addtimer(CALLBACK(src, .proc/detonate), delay, TIMER_STOPPABLE) @@ -146,7 +146,7 @@ /obj/item/hot_potato/proc/deactivate() update_icon() name = initial(name) - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP deltimer(detonation_timerid) STOP_PROCESSING(SSfastprocess, src) detonation_timerid = null diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index d1ff075ef2..7184b956f5 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -8,7 +8,7 @@ item_color = "b" var/allow_multiple = FALSE var/uses = -1 - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/implant/proc/trigger(emote, mob/living/carbon/source) @@ -18,7 +18,7 @@ return /obj/item/implant/proc/activate() - return + SEND_SIGNAL(src, COMSIG_IMPLANT_ACTIVATED) /obj/item/implant/ui_action_click() activate("action_button") @@ -41,12 +41,26 @@ //return 1 if the implant injects //return 0 if there is no room for implant / it fails /obj/item/implant/proc/implant(mob/living/target, mob/user, silent = FALSE) + if(SEND_SIGNAL(src, COMSIG_IMPLANT_IMPLANTING, args) & COMPONENT_STOP_IMPLANTING) + return LAZYINITLIST(target.implants) if(!target.can_be_implanted() || !can_be_implanted_in(target)) - return 0 + return FALSE for(var/X in target.implants) - if(istype(X, type)) - var/obj/item/implant/imp_e = X + var/obj/item/implant/imp_e = X + var/flags = SEND_SIGNAL(imp_e, COMSIG_IMPLANT_OTHER, args, src) + if(flags & COMPONENT_DELETE_NEW_IMPLANT) + UNSETEMPTY(target.implants) + qdel(src) + return TRUE + if(flags & COMPONENT_DELETE_OLD_IMPLANT) + qdel(imp_e) + continue + if(flags & COMPONENT_STOP_IMPLANTING) + UNSETEMPTY(target.implants) + return FALSE + + if(istype(imp_e, type)) if(!allow_multiple) if(imp_e.uses < initial(imp_e.uses)*2) if(uses == -1) @@ -54,9 +68,9 @@ else imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2) qdel(src) - return 1 + return TRUE else - return 0 + return FALSE forceMove(target) imp_in = target @@ -72,7 +86,7 @@ if(user) add_logs(user, target, "implanted", "\a [name]") - return 1 + return TRUE /obj/item/implant/proc/removed(mob/living/source, silent = FALSE, special = 0) moveToNullspace() diff --git a/code/game/objects/items/implants/implant_abductor.dm b/code/game/objects/items/implants/implant_abductor.dm index 3ba1e7315f..0c50beadea 100644 --- a/code/game/objects/items/implants/implant_abductor.dm +++ b/code/game/objects/items/implants/implant_abductor.dm @@ -8,6 +8,7 @@ var/cooldown = 30 /obj/item/implant/abductor/activate() + . = ..() if(cooldown == initial(cooldown)) home.Retrieve(imp_in,1) cooldown = 0 diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm index 88b7e032f3..b9c85c0728 100644 --- a/code/game/objects/items/implants/implant_chem.dm +++ b/code/game/objects/items/implants/implant_chem.dm @@ -37,6 +37,7 @@ activate(reagents.total_volume) /obj/item/implant/chem/activate(cause) + . = ..() if(!cause || !imp_in) return 0 var/mob/living/carbon/R = imp_in diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm index 5aa0e31d08..e749a6c4be 100644 --- a/code/game/objects/items/implants/implant_explosive.dm +++ b/code/game/objects/items/implants/implant_explosive.dm @@ -27,6 +27,7 @@ return dat /obj/item/implant/explosive/activate(cause) + . = ..() if(!cause || !imp_in || active) return 0 if(cause == "action_button" && !popup) diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm index 4ba04c9479..f3e66d2c08 100644 --- a/code/game/objects/items/implants/implant_freedom.dm +++ b/code/game/objects/items/implants/implant_freedom.dm @@ -7,6 +7,7 @@ /obj/item/implant/freedom/activate() + . = ..() uses-- to_chat(imp_in, "You feel a faint click.") if(iscarbon(imp_in)) diff --git a/code/game/objects/items/implants/implant_krav_maga.dm b/code/game/objects/items/implants/implant_krav_maga.dm index c2d7d44249..3a751ecd0e 100644 --- a/code/game/objects/items/implants/implant_krav_maga.dm +++ b/code/game/objects/items/implants/implant_krav_maga.dm @@ -15,6 +15,7 @@ return dat /obj/item/implant/krav_maga/activate() + . = ..() var/mob/living/carbon/human/H = imp_in if(!ishuman(H)) return diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index f17be453f4..24ee6d0966 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -31,6 +31,7 @@ return dat /obj/item/implant/adrenalin/activate() + . = ..() uses-- to_chat(imp_in, "You feel a sudden surge of energy!") imp_in.SetStun(0) @@ -54,6 +55,7 @@ uses = 3 /obj/item/implant/emp/activate() + . = ..() uses-- empulse(imp_in, 3, 5) if(!uses) @@ -88,6 +90,7 @@ icon_state = "walkietalkie" /obj/item/implant/radio/activate() + . = ..() // needs to be GLOB.deep_inventory_state otherwise it won't open radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state) diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm index 787c246ddf..ec6b4d64c3 100644 --- a/code/game/objects/items/implants/implant_storage.dm +++ b/code/game/objects/items/implants/implant_storage.dm @@ -6,7 +6,8 @@ var/max_slot_stacking = 4 /obj/item/implant/storage/activate() - SendSignal(COMSIG_TRY_STORAGE_SHOW, imp_in, TRUE) + . = ..() + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, imp_in, TRUE) /obj/item/implant/storage/removed(source, silent = FALSE, special = 0) . = ..() diff --git a/code/game/objects/items/implants/implantuplink.dm b/code/game/objects/items/implants/implantuplink.dm index 5fe603c47c..9000fbbe34 100644 --- a/code/game/objects/items/implants/implantuplink.dm +++ b/code/game/objects/items/implants/implantuplink.dm @@ -11,32 +11,6 @@ . = ..() AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc) -/obj/item/implant/uplink/implant(mob/living/target, mob/user, silent = FALSE) - GET_COMPONENT(hidden_uplink, /datum/component/uplink) - if(hidden_uplink) - for(var/X in target.implants) - if(istype(X, type)) - var/obj/item/implant/imp_e = X - GET_COMPONENT_FROM(their_hidden_uplink, /datum/component/uplink, imp_e) - if(their_hidden_uplink) - their_hidden_uplink.telecrystals += hidden_uplink.telecrystals - qdel(src) - return TRUE - else - qdel(imp_e) //INFERIOR AND EMPTY! - - if(..()) - if(hidden_uplink) - hidden_uplink.owner = "[user.key]" - return TRUE - return FALSE - -/obj/item/implant/uplink/activate() - GET_COMPONENT(hidden_uplink, /datum/component/uplink) - if(hidden_uplink) - hidden_uplink.locked = FALSE - hidden_uplink.interact(usr) - /obj/item/implanter/uplink name = "implanter (uplink)" imp_type = /obj/item/implant/uplink diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index c6b2a85d34..bf7b0b1b3b 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -137,7 +137,7 @@ icon_state = "bone_dagger" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A sharpened bone. The bare mimimum in survival." + desc = "A sharpened bone. The bare minimum in survival." force = 15 throwforce = 15 materials = list() diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 5ceaa9c514..9ad4174b3a 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -31,7 +31,7 @@ /obj/item/melee/synthetic_arm_blade name = "synthetic arm blade" - desc = "A grotesque blade that on closer inspection seems made of synthentic flesh, it still feels like it would hurt very badly as a weapon." + desc = "A grotesque blade that on closer inspection seems made of synthetic flesh, it still feels like it would hurt very badly as a weapon." icon = 'icons/obj/items_and_weapons.dmi' icon_state = "arm_blade" item_state = "arm_blade" @@ -88,6 +88,51 @@ if(istype(B)) playsound(B, 'sound/items/sheath.ogg', 25, 1) +/obj/item/melee/sabre/suicide_act(mob/living/user) + user.visible_message("[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!") + var/i = 0 + var/originally_nodropped = item_flags & NODROP + item_flags |= NODROP + if(iscarbon(user)) + var/mob/living/carbon/Cuser = user + var/obj/item/bodypart/holding_bodypart = Cuser.get_holding_bodypart_of_item(src) + var/list/limbs_to_dismember + var/list/arms = list() + var/list/legs = list() + var/obj/item/bodypart/bodypart + + for(bodypart in Cuser.bodyparts) + if(bodypart == holding_bodypart) + continue + if(bodypart.body_part & ARMS) + arms += bodypart + else if (bodypart.body_part & LEGS) + legs += bodypart + + limbs_to_dismember = arms + legs + if(holding_bodypart) + limbs_to_dismember += holding_bodypart + + var/speedbase = abs((4 SECONDS) / limbs_to_dismember.len) + for(bodypart in limbs_to_dismember) + i++ + addtimer(CALLBACK(src, .proc/suicide_dismember, user, bodypart), speedbase * i) + addtimer(CALLBACK(src, .proc/manual_suicide, user, originally_nodropped), (5 SECONDS) * i) + return MANUAL_SUICIDE + +/obj/item/melee/sabre/proc/suicide_dismember(mob/living/user, obj/item/bodypart/affecting) + if(!QDELETED(affecting) && affecting.dismemberable && affecting.owner == user && !QDELETED(user)) + playsound(user, hitsound, 25, 1) + affecting.dismember(BRUTE) + user.adjustBruteLoss(20) + +/obj/item/melee/sabre/proc/manual_suicide(mob/living/user, originally_nodropped) + if(!QDELETED(user)) + user.adjustBruteLoss(200) + user.death(FALSE) + if(!originally_nodropped) + item_flags &= ~NODROP + /obj/item/melee/classic_baton name = "police baton" desc = "A wooden truncheon for beating criminal scum." diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 19e8560d4d..3601c43651 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -17,6 +17,7 @@ var/mopcap = 5 var/mopspeed = 30 force_string = "robust... against germs" + var/insertable = TRUE /obj/item/mop/New() ..() @@ -25,7 +26,7 @@ /obj/item/mop/proc/clean(turf/A) if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1)) - A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) + SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) for(var/obj/effect/O in A) if(is_cleanable(O)) qdel(O) @@ -62,14 +63,16 @@ /obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - J.put_in_cart(src, user) - J.mymop=src - J.update_icon() + if(insertable) + J.put_in_cart(src, user) + J.mymop=src + J.update_icon() + else + to_chat(user, "You are unable to fit your [name] into the [J.name].") + return /obj/item/mop/cyborg - -/obj/item/mop/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) - return + insertable = FALSE /obj/item/mop/advanced desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this!" @@ -113,3 +116,6 @@ if(refill_enabled) STOP_PROCESSING(SSobj, src) return ..() + +/obj/item/mop/advanced/cyborg + insertable = FALSE \ No newline at end of file diff --git a/code/game/objects/items/paiwire.dm b/code/game/objects/items/paiwire.dm index 994082c5fa..ef98ed62a1 100644 --- a/code/game/objects/items/paiwire.dm +++ b/code/game/objects/items/paiwire.dm @@ -3,11 +3,11 @@ name = "data cable" icon = 'icons/obj/power.dmi' icon_state = "wire1" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/obj/machinery/machine /obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user) if(!user.transferItemToLoc(src, M)) return user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - machine = M \ No newline at end of file + machine = M diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 881b825814..ecf7abe1d3 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -151,7 +151,7 @@ /obj/item/borg/charger name = "power connector" icon_state = "charger_draw" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/mode = "draw" var/static/list/charge_machines = typecacheof(list(/obj/machinery/cell_charger, /obj/machinery/recharger, /obj/machinery/recharge_station, /obj/machinery/mech_bay_recharge_port)) var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/cell, /obj/item/gun/energy)) @@ -194,7 +194,7 @@ M.use_power(200) - to_chat(user, "You stop charging youself.") + to_chat(user, "You stop charging yourself.") else if(is_type_in_list(target, charge_items)) var/obj/item/stock_parts/cell/cell = target @@ -233,7 +233,7 @@ break target.update_icon() - to_chat(user, "You stop charging youself.") + to_chat(user, "You stop charging yourself.") else if(is_type_in_list(target, charge_items)) var/obj/item/stock_parts/cell/cell = target @@ -693,7 +693,7 @@ /obj/item/borg/sight/xray - name = "\proper x-ray vision" + name = "\proper X-ray vision" icon = 'icons/obj/decals.dmi' icon_state = "securearea" sight_mode = BORGXRAY diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 9999a054f6..929632980b 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -62,6 +62,76 @@ return 1 return 0 +/obj/item/robot_suit/wrench_act(mob/living/user, obj/item/I) //Deconstucts empty borg shell. Flashes remain unbroken because they haven't been used yet + var/turf/T = get_turf(src) + if(l_leg || r_leg || chest || l_arm || r_arm || head) + if(I.use_tool(src, user, 5, volume=50)) + if(l_leg) + l_leg.forceMove(T) + l_leg = null + if(r_leg) + r_leg.forceMove(T) + r_leg = null + if(chest) + if (chest.cell) //Sanity check. + chest.cell.forceMove(T) + chest.cell = null + chest.forceMove(T) + new /obj/item/stack/cable_coil(T, 1) + chest.wired = FALSE + chest = null + if(l_arm) + l_arm.forceMove(T) + l_arm = null + if(r_arm) + r_arm.forceMove(T) + r_arm = null + if(head) + head.forceMove(T) + head.flash1.forceMove(T) + head.flash1 = null + head.flash2.forceMove(T) + head.flash2 = null + head = null + to_chat(user, "You disassemble the cyborg shell.") + else + to_chat(user, "There is nothing to remove from the endoskeleton.") + updateicon() + +/obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc + if(!user.put_in_hands(I)) + I.forceMove(drop_location()) + return FALSE + return TRUE + +/obj/item/robot_suit/screwdriver_act(mob/living/user, obj/item/I) //Swaps the power cell if you're holding a new one in your other hand. + if(!chest) //can't remove a cell if there's no chest to remove it from. + to_chat(user, "[src] has no attached torso.") + return + + var/obj/item/stock_parts/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/cell) + var/swap_failed + if(!temp_cell) //if we're not holding a cell + swap_failed = TRUE + else if(!user.transferItemToLoc(temp_cell, chest)) + swap_failed = TRUE + to_chat(user, "[temp_cell] is stuck to your hand, you can't put it in [src]!") + + if(chest.cell) //drop the chest's current cell no matter what. + put_in_hand_or_drop(user, chest.cell) + + if(swap_failed) //we didn't transfer any new items. + if(chest.cell) //old cell ejected, nothing inserted. + to_chat(user, "You remove [chest.cell] from [src].") + chest.cell = null + else + to_chat(user, "The power cell slot in [src]'s torso is empty.") + return + + to_chat(user, "You [chest.cell ? "replace [src]'s [chest.cell.name] with [temp_cell]" : "insert [temp_cell] into [src]"].") + chest.cell = temp_cell + return TRUE + /obj/item/robot_suit/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/sheet/metal)) @@ -161,6 +231,9 @@ else if(istype(W, /obj/item/mmi)) var/obj/item/mmi/M = W if(check_completion()) + if(!chest.cell) + to_chat(user, "The endoskeleton still needs a power cell!") + return if(!isturf(loc)) to_chat(user, "You can't put [M] in, the frame has to be standing on the ground to be perfectly precise!") return @@ -181,8 +254,9 @@ to_chat(user, "Sticking a dead brain into the frame would sort of defeat the purpose!") return - if(jobban_isbanned(BM, "Cyborg")) - to_chat(user, "This [M.name] does not seem to fit!") + if(jobban_isbanned(BM, "Cyborg") || QDELETED(src) || QDELETED(BM) || QDELETED(user) || QDELETED(M) || !Adjacent(user)) + if(!QDELETED(M)) + to_chat(user, "This [M.name] does not seem to fit!") return if(!user.temporarilyRemoveItemFromInventory(W)) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 854031b1f4..975908106e 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -193,6 +193,60 @@ R.module.basic_modules += S R.module.add_module(S, FALSE, TRUE) +/obj/item/borg/upgrade/tboh + name = "janitor cyborg trash bag of holding" + desc = "A trash bag of holding replace for the janiborgs standard trash bag." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/robot_module/janitor + +/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R) + . = ..() + if(.) + for(var/obj/item/storage/bag/trash/cyborg/TB in R.module.modules) + R.module.remove_module(TB, TRUE) + + var/obj/item/storage/bag/trash/bluespace/cyborg/B = new /obj/item/storage/bag/trash/bluespace/cyborg(R.module) + R.module.basic_modules += B + R.module.add_module(B, FALSE, TRUE) + +/obj/item/borg/upgrade/tboh/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + for(var/obj/item/storage/bag/trash/bluespace/cyborg/B in R.module.modules) + R.module.remove_module(B, TRUE) + + var/obj/item/storage/bag/trash/cyborg/TB = new (R.module) + R.module.basic_modules += TB + R.module.add_module(TB, FALSE, TRUE) + +/obj/item/borg/upgrade/amop + name = "janitor cyborg advanced mop" + desc = "An advanced mop replacement from the janiborgs standard mop." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/robot_module/janitor + +/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R) + . = ..() + if(.) + for(var/obj/item/mop/cyborg/M in R.module.modules) + R.module.remove_module(M, TRUE) + + var/obj/item/mop/advanced/cyborg/A = new /obj/item/mop/advanced/cyborg(R.module) + R.module.basic_modules += A + R.module.add_module(A, FALSE, TRUE) + +/obj/item/borg/upgrade/amop/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + for(var/obj/item/mop/advanced/cyborg/A in R.module.modules) + R.module.remove_module(A, TRUE) + + var/obj/item/mop/cyborg/M = new (R.module) + R.module.basic_modules += M + R.module.add_module(M, FALSE, TRUE) + /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg." @@ -543,3 +597,20 @@ var/obj/item/pinpointer/crew/PP = locate() in R.module if (PP) R.module.remove_module(PP, TRUE) + +/obj/item/borg/upgrade/transform + name = "borg module picker (Standard)" + desc = "Allows you to to turn a cyborg into a standard cyborg." + icon_state = "cyborg_upgrade3" + var/obj/item/robot_module/new_module = /obj/item/robot_module/standard + +/obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + R.module.transform_to(new_module) + +/obj/item/borg/upgrade/transform/clown + name = "borg module picker (Clown)" + desc = "Allows you to to turn a cyborg into a clown, honk." + icon_state = "cyborg_upgrade3" + new_module = /obj/item/robot_module/clown diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index d6bb54bddf..1171bd7bf7 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -38,7 +38,7 @@ return ..() /obj/item/shield/riot/roman - name = "roman shield" + name = "\improper Roman shield" desc = "Bears an inscription on the inside: \"Romanes venio domus\"." icon_state = "roman_shield" item_state = "roman_shield" diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 4da0fd8a44..522e1a1153 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -45,7 +45,7 @@ blink_mob(hit_atom) use(1) -//Artifical bluespace crystal, doesn't give you much research. +//Artificial bluespace crystal, doesn't give you much research. /obj/item/stack/ore/bluespace_crystal/artificial name = "artificial bluespace crystal" desc = "An artificially made bluespace crystal, it looks delicate." diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index bee37d1ff9..1cd23c26fa 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -105,7 +105,7 @@ /obj/item/stack/medical/bruise_pack name = "bruise pack" singular_name = "bruise pack" - desc = "A theraputic gel pack and bandages designed to treat blunt-force trauma." + desc = "A therapeutic gel pack and bandages designed to treat blunt-force trauma." icon_state = "brutepack" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 996576d8e5..a6e2d255fb 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -110,7 +110,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ if(QDELETED(src) && replace) user.put_in_hands(RG) else - to_chat(user, "You need one rod and one sheet of plamsa glass to make reinforced plasma glass!") + to_chat(user, "You need one rod and one sheet of plasma glass to make reinforced plasma glass!") return else return ..() @@ -173,7 +173,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ /obj/item/stack/sheet/plasmarglass name = "reinforced plasma glass" - desc = "A glass sheet made out of a plasma-silicate alloy and a rod matrice. It looks hopelessly tough and nearly fire-proof!" + desc = "A glass sheet made out of a plasma-silicate alloy and a rod matrix. It looks hopelessly tough and nearly fire-proof!" singular_name = "reinforced plasma glass sheet" icon_state = "sheet-prglass" item_state = "sheet-prglass" diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 4eae35a98c..0031839eff 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -149,6 +149,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5), \ new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5), \ new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \ + new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2), \ new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \ )) @@ -187,7 +188,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ singular_name = "hide plate" max_amount = 6 novariants = FALSE - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER @@ -200,7 +201,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ singular_name = "drake plate" max_amount = 10 novariants = FALSE - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index b7c2d5b3f9..c2c6015747 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -14,23 +14,22 @@ grind_results = list("silicon" = 20, "copper" = 5) /obj/item/stack/light_w/attackby(obj/item/O, mob/user, params) - var/atom/Tsec = user.drop_location() - if(istype(O, /obj/item/wirecutters)) - var/obj/item/stack/cable_coil/CC = new (Tsec, 5) - CC.add_fingerprint(user) - amount-- - var/obj/item/stack/sheet/glass/G = new (Tsec) - G.add_fingerprint(user) - if(amount <= 0) - qdel(src) - - else if(istype(O, /obj/item/stack/sheet/metal)) + if(istype(O, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/M = O if (M.use(1)) - var/obj/item/L = new /obj/item/stack/tile/light(user.loc) + var/obj/item/L = new /obj/item/stack/tile/light(user.drop_location()) to_chat(user, "You make a light tile.") L.add_fingerprint(user) + use(1) else to_chat(user, "You need one metal sheet to finish the light tile!") else return ..() + +/obj/item/stack/light_w/wirecutter_act(mob/living/user, obj/item/I) + var/atom/Tsec = user.drop_location() + var/obj/item/stack/cable_coil/CC = new (Tsec, 5) + CC.add_fingerprint(user) + var/obj/item/stack/sheet/glass/G = new (Tsec) + G.add_fingerprint(user) + use(1) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 87d1985b18..8d1562826c 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -310,7 +310,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ point_value = 45 GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ - new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \ + new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \ )) /obj/item/stack/sheet/mineral/plastitanium/Initialize(mapload, new_amount, merge = TRUE) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 4d5bf2a449..829cb6c3f1 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -132,7 +132,7 @@ if (istype(E, /datum/stack_recipe)) var/datum/stack_recipe/R = E var/max_multiplier = round(get_amount() / R.req_amount) - var/title as text + var/title var/can_build = 1 can_build = can_build && (max_multiplier>0) diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 3597a3f4d6..ec1e7b8773 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -6,7 +6,7 @@ icon_state = "telecrystal" w_class = WEIGHT_CLASS_TINY max_amount = 50 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON /obj/item/stack/telecrystal/attack(mob/target, mob/user) if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not. diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm index 38887a0d8b..64be8853a7 100644 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm @@ -71,9 +71,9 @@ materials = list(MAT_TITANIUM=500) /obj/item/stack/tile/mineral/plastitanium - name = "plas-titanium tile" - singular_name = "plas-titanium floor tile" - desc = "A tile made of plas-titanium, used for very evil shuttles." + name = "plastitanium tile" + singular_name = "plastitanium floor tile" + desc = "A tile made of plastitanium, used for very evil shuttles." icon_state = "tile_darkshuttle" turf_type = /turf/open/floor/mineral/plastitanium mineralType = "plastitanium" diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index fe056d34d8..3e5c9c2ba9 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -9,7 +9,7 @@ desc = "Wrap packages with this festive paper to make gifts." icon = 'icons/obj/stack_objects.dmi' icon_state = "wrap_paper" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON amount = 25 max_amount = 25 resistance_flags = FLAMMABLE @@ -31,7 +31,7 @@ desc = "You can use this to wrap items in." icon = 'icons/obj/stack_objects.dmi' icon_state = "deliveryPaper" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON amount = 25 max_amount = 25 resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index a3e4bc112e..11dbf727f1 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -40,6 +40,7 @@ righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' w_class = WEIGHT_CLASS_BULKY + var/insertable = TRUE /obj/item/storage/bag/trash/ComponentInitialize() . = ..() @@ -64,14 +65,16 @@ else icon_state = "[initial(icon_state)]3" /obj/item/storage/bag/trash/cyborg + insertable = FALSE /obj/item/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - J.put_in_cart(src, user) - J.mybag=src - J.update_icon() - -/obj/item/storage/bag/trash/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) - return + if(insertable) + J.put_in_cart(src, user) + J.mybag=src + J.update_icon() + else + to_chat(user, "You are unable to fit your [name] into the [J.name].") + return /obj/item/storage/bag/trash/bluespace name = "trash bag of holding" @@ -85,6 +88,9 @@ STR.max_combined_w_class = 60 STR.max_items = 60 +/obj/item/storage/bag/trash/bluespace/cyborg + insertable = FALSE + // ----------------------------- // Mining Satchel // ----------------------------- @@ -136,7 +142,7 @@ if (box) user.transferItemToLoc(A, box) show_message = TRUE - else if(SendSignal(COMSIG_TRY_STORAGE_INSERT, A, user, TRUE)) + else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE)) show_message = TRUE else if(!spam_protection) diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index db47fd3d0b..1066e1394c 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", H.visible_message("[user] heals [H] with the power of [deity_name]!") to_chat(H, "May the power of [deity_name] compel you to be healed!") playsound(src.loc, "punch", 25, 1, -1) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing) return 1 /obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 7fcbeba268..9ac08aab5d 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -535,7 +535,7 @@ STR.max_items = 8 /obj/item/storage/box/snappops/PopulateContents() - SendSignal(COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop) /obj/item/storage/box/matches name = "matchbox" @@ -553,7 +553,7 @@ STR.can_hold = typecacheof(list(/obj/item/match)) /obj/item/storage/box/matches/PopulateContents() - SendSignal(COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match) /obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params) if(istype(W, /obj/item/match)) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 02a367d2bf..95639918bb 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -151,7 +151,7 @@ return var/obj/item/clothing/mask/cigarette/W = locate(/obj/item/clothing/mask/cigarette) in contents if(W && contents.len > 0) - SendSignal(COMSIG_TRY_STORAGE_TAKE, W, user) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, user) user.put_in_hands(W) contents -= W to_chat(user, "You take \a [W] out of the pack.") @@ -190,7 +190,7 @@ if(cig) if(M == user && contents.len > 0 && !user.wear_mask) var/obj/item/clothing/mask/cigarette/W = cig - SendSignal(COMSIG_TRY_STORAGE_TAKE, W, M) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, M) M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK) contents -= W to_chat(user, "You take \a [W] out of the pack.") @@ -319,13 +319,13 @@ icon_state = "[initial(icon_state)]" /obj/item/storage/fancy/cigarettes/cigars/cohiba - name = "\improper cohiba robusto cigar case" + name = "\improper Cohiba Robusto cigar case" desc = "A case of imported Cohiba cigars, renowned for their strong flavor." icon_state = "cohibacase" spawn_type = /obj/item/clothing/mask/cigarette/cigar/cohiba /obj/item/storage/fancy/cigarettes/cigars/havana - name = "\improper premium havanian cigar case" + name = "\improper premium Havanian cigar case" desc = "A case of classy Havanian cigars." icon_state = "cohibacase" spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index e1d65be1b7..bce38548cc 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -22,18 +22,18 @@ STR.locked = TRUE /obj/item/storage/lockbox/attackby(obj/item/W, mob/user, params) - var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED) + var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(W.GetID()) if(broken) to_chat(user, "It appears to be broken.") return if(allowed(user)) - SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, !locked) - locked = SendSignal(COMSIG_IS_STORAGE_LOCKED) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, !locked) + locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(locked) icon_state = icon_locked to_chat(user, "You lock the [src.name]!") - SendSignal(COMSIG_TRY_STORAGE_HIDE_ALL) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_ALL) return else icon_state = icon_closed @@ -50,7 +50,7 @@ /obj/item/storage/lockbox/emag_act(mob/user) if(!broken) broken = TRUE - SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) desc += "It appears to be broken." icon_state = src.icon_broken if(user) @@ -107,13 +107,13 @@ /obj/item/storage/lockbox/medal/examine(mob/user) ..() - var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED) + var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(!locked) to_chat(user, "Alt-click to [open ? "close":"open"] it.") /obj/item/storage/lockbox/medal/AltClick(mob/user) if(user.canUseTopic(src, BE_CLOSE)) - if(!SendSignal(COMSIG_IS_STORAGE_LOCKED)) + if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) open = (open ? FALSE : TRUE) update_icon() ..() @@ -131,7 +131,7 @@ /obj/item/storage/lockbox/medal/update_icon() cut_overlays() - var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED) + var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(locked) icon_state = "medalbox+l" open = FALSE diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index 806f22a2dc..20dae54a71 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -35,7 +35,7 @@ to_chat(user, text("The service panel is currently [open ? "unscrewed" : "screwed shut"].")) /obj/item/storage/secure/attackby(obj/item/W, mob/user, params) - if(SendSignal(COMSIG_IS_STORAGE_LOCKED)) + if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) if (istype(W, /obj/item/screwdriver)) if (W.use_tool(src, user, 20)) open =! open @@ -64,7 +64,7 @@ return ..() /obj/item/storage/secure/attack_self(mob/user) - var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED) + var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) user.set_machine(src) var/dat = text("[]
    \n\nLock Status: []",src, (locked ? "LOCKED" : "UNLOCKED")) var/message = "Code" @@ -88,7 +88,7 @@ l_code = code l_set = 1 else if ((code == l_code) && (l_set == 1)) - SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) cut_overlays() add_overlay(icon_opened) code = null @@ -96,10 +96,10 @@ code = "ERROR" else if ((href_list["type"] == "R") && (!l_setshort)) - SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE) cut_overlays() code = null - SendSignal(COMSIG_TRY_STORAGE_HIDE_FROM, usr) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_FROM, usr) else code += text("[]", sanitize_text(href_list["type"])) if (length(code) > 5) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 14b7932f92..527c7ea78e 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -14,9 +14,10 @@ var/stunforce = 140 var/status = 0 - var/obj/item/stock_parts/cell/high/cell + var/obj/item/stock_parts/cell/cell var/hitcost = 1000 var/throw_hit_chance = 35 + var/preload_cell_type //if not empty the baton starts with this type of cell /obj/item/melee/baton/get_cell() return cell @@ -27,6 +28,11 @@ /obj/item/melee/baton/Initialize() . = ..() + if(preload_cell_type) + if(!ispath(preload_cell_type,/obj/item/stock_parts/cell)) + log_world("### MAP WARNING, [src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") + else + cell = new preload_cell_type(src) update_icon() /obj/item/melee/baton/throw_impact(atom/hit_atom) @@ -35,10 +41,8 @@ if(status && prob(throw_hit_chance) && iscarbon(hit_atom)) baton_stun(hit_atom) -/obj/item/melee/baton/loaded/Initialize() //this one starts with a cell pre-installed. - cell = new(src) - update_icon() - . = ..() +/obj/item/melee/baton/loaded //this one starts with a cell pre-installed. + preload_cell_type = /obj/item/stock_parts/cell/high /obj/item/melee/baton/proc/deductcharge(chrgdeductamt) if(cell) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 1cf61ab651..e0915017bb 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -14,45 +14,44 @@ resistance_flags = FIRE_PROOF var/obj/item/noz - var/on = FALSE var/volume = 500 -/obj/item/watertank/New() - ..() +/obj/item/watertank/Initialize() + . = ..() create_reagents(volume) noz = make_noz() -/obj/item/watertank/ui_action_click() - toggle_mister() +/obj/item/watertank/ui_action_click(mob/user) + toggle_mister(user) /obj/item/watertank/item_action_slot_check(slot, mob/user) if(slot == user.getBackSlot()) return 1 -/obj/item/watertank/verb/toggle_mister() - set name = "Toggle Mister" - set category = "Object" - if (usr.get_item_by_slot(usr.getBackSlot()) != src) - to_chat(usr, "The watertank must be worn properly to use!") +/obj/item/watertank/proc/toggle_mister(mob/living/user) + if(!istype(user)) return - if(usr.incapacitated()) + if(user.get_item_by_slot(user.getBackSlot()) != src) + to_chat(user, "The watertank must be worn properly to use!") + return + if(user.incapacitated()) return - on = !on - - var/mob/living/carbon/human/user = usr - if(on) - if(noz == null) - noz = make_noz() + if(QDELETED(noz)) + noz = make_noz() + if(noz in src) //Detach the nozzle into the user's hands if(!user.put_in_hands(noz)) - on = FALSE to_chat(user, "You need a free hand to hold the mister!") return else //Remove from their hands and put back "into" the tank remove_noz() - return + +/obj/item/watertank/verb/toggle_mister_verb() + set name = "Toggle Mister" + set category = "Object" + toggle_mister(usr) /obj/item/watertank/proc/make_noz() return new /obj/item/reagent_containers/spray/mister(src) @@ -66,19 +65,17 @@ if(ismob(noz.loc)) var/mob/M = noz.loc M.temporarilyRemoveItemFromInventory(noz, TRUE) - return + noz.forceMove(src) /obj/item/watertank/Destroy() - if (on) - qdel(noz) + QDEL_NULL(noz) return ..() /obj/item/watertank/attack_hand(mob/user) - . = ..() - if(.) - return - if(loc == user) - ui_action_click() + if (user.get_item_by_slot(user.getBackSlot()) == src) + toggle_mister(user) + else + return ..() /obj/item/watertank/MouseDrop(obj/over_object) var/mob/M = loc @@ -114,40 +111,28 @@ amount_per_transfer_from_this = 50 possible_transfer_amounts = list(25,50,100) volume = 500 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON | ABSTRACT // don't put in storage container_type = OPENCONTAINER slot_flags = 0 var/obj/item/watertank/tank -/obj/item/reagent_containers/spray/mister/New(parent_tank) - ..() - if(check_tank_exists(parent_tank, src)) - tank = parent_tank - reagents = tank.reagents //This mister is really just a proxy for the tank's reagents - forceMove(tank) - return - -/obj/item/reagent_containers/spray/mister/dropped(mob/user) - ..() - to_chat(user, "The mister snaps back onto the watertank.") - tank.on = 0 - forceMove(tank) +/obj/item/reagent_containers/spray/mister/Initialize() + . = ..() + tank = loc + if(!istype(tank)) + return INITIALIZE_HINT_QDEL + reagents = tank.reagents //This mister is really just a proxy for the tank's reagents /obj/item/reagent_containers/spray/mister/attack_self() return -/proc/check_tank_exists(parent_tank, mob/living/carbon/human/M, obj/O) - if (!parent_tank || !istype(parent_tank, /obj/item/watertank)) //To avoid weird issues from admin spawns - qdel(O) - return 0 - else - return 1 - -/obj/item/reagent_containers/spray/mister/Move() +/obj/item/reagent_containers/spray/mister/doMove(atom/destination) + if(destination && (destination != tank.loc || !ismob(destination))) + if (loc != tank) + to_chat(tank.loc, "The mister snaps back onto the watertank.") + destination = tank ..() - if(loc != tank.loc) - forceMove(tank.loc) /obj/item/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity) if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it @@ -161,8 +146,8 @@ icon_state = "waterbackpackjani" item_state = "waterbackpackjani" -/obj/item/watertank/janitor/New() - ..() +/obj/item/watertank/janitor/Initialize() + . = ..() reagents.add_reagent("cleaner", 500) /obj/item/reagent_containers/spray/mister/janitor @@ -197,8 +182,8 @@ volume = 200 slowdown = 0 -/obj/item/watertank/atmos/New() - ..() +/obj/item/watertank/atmos/Initialize() + . = ..() reagents.add_reagent("water", 200) /obj/item/watertank/atmos/make_noz() @@ -226,25 +211,27 @@ precision = 1 cooling_power = 5 w_class = WEIGHT_CLASS_HUGE + item_flags = ABSTRACT // don't put in storage var/obj/item/watertank/tank var/nozzle_mode = 0 var/metal_synthesis_cooldown = 0 var/resin_cooldown = 0 -/obj/item/extinguisher/mini/nozzle/New(parent_tank) - ..() - if(check_tank_exists(parent_tank, src)) - tank = parent_tank - reagents = tank.reagents - max_water = tank.volume - forceMove(tank) +/obj/item/extinguisher/mini/nozzle/Initialize() + . = ..() + tank = loc + if (!istype(tank)) + return INITIALIZE_HINT_QDEL + reagents = tank.reagents + max_water = tank.volume -/obj/item/extinguisher/mini/nozzle/Move() +/obj/item/extinguisher/mini/nozzle/doMove(atom/destination) + if(destination && (destination != tank.loc || !ismob(destination))) + if(loc != tank) + to_chat(tank.loc, "The nozzle snaps back onto the tank!") + destination = tank ..() - if(loc != tank.loc) - forceMove(tank) - return /obj/item/extinguisher/mini/nozzle/attack_self(mob/user) switch(nozzle_mode) @@ -265,12 +252,6 @@ return return -/obj/item/extinguisher/mini/nozzle/dropped(mob/user) - ..() - to_chat(user, "The nozzle snaps back onto the tank!") - tank.on = 0 - forceMove(tank) - /obj/item/extinguisher/mini/nozzle/afterattack(atom/target, mob/user) if(nozzle_mode == EXTINGUISHER) ..() @@ -453,8 +434,8 @@ volume = 2000 slowdown = 0 -/obj/item/watertank/op/New() - ..() +/obj/item/watertank/op/Initialize() + . = ..() reagents.add_reagent("mutagen",350) reagents.add_reagent("napalm",125) reagents.add_reagent("welding_fuel",125) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 08d0b8bd30..4707ba9b47 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -129,7 +129,7 @@ if(isOn()) use(1) var/turf/location = get_turf(user) - location.hotspot_expose(700, 50, 1) + location.hotspot_expose(550, 10, 1) if(get_fuel() <= 0) set_light(0) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index ef82c074a6..94ce5d96a5 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -247,8 +247,8 @@ // Copied from /obj/item/melee/transforming/energy/sword/attackby /obj/item/toy/sword/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/toy/sword)) - if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1)) - to_chat(user, "\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!") + if((W.item_flags & NODROP) || (item_flags & NODROP)) + to_chat(user, "\the [item_flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [item_flags & NODROP ? W : src]!") return else to_chat(user, "You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.") diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 6526eaf561..f1c766e90c 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -121,7 +121,7 @@ name = "offhand" icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - flags_1 = ABSTRACT_1 + item_flags = ABSTRACT resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/item/twohanded/offhand/Destroy() @@ -338,7 +338,7 @@ icon_state = "dualsaber[item_color][wielded]" else icon_state = "dualsaber0" - SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) if(user.has_dna()) diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index 7a43a7d255..3be12abf4f 100755 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -18,19 +18,34 @@ throw_range = 7 w_class = WEIGHT_CLASS_BULKY armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) - var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products - var/init_charges = list(0, 0, 0) + // Built automatically from the corresponding vending machine. + // If null, considered to be full. Otherwise, is list(/typepath = amount). + var/list/products + var/list/contraband + var/list/premium -/obj/item/vending_refill/New(amt = -1) - ..() +/obj/item/vending_refill/Initialize(mapload) + . = ..() name = "\improper [machine_name] restocking unit" - if(isnum(amt) && amt > -1) - charges[1] = amt /obj/item/vending_refill/examine(mob/user) ..() - if(charges[1] > 0) - to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).") + var/num = get_part_rating() + if (num == INFINITY) + to_chat(user, "It's sealed tight, completely full of supplies.") + else if (num == 0) + to_chat(user, "It's empty!") else - to_chat(user, "It's empty!") \ No newline at end of file + to_chat(user, "It can restock [num] item\s.") + +/obj/item/vending_refill/get_part_rating() + if (!products || !contraband || !premium) + return INFINITY + . = 0 + for(var/key in products) + . += products[key] + for(var/key in contraband) + . += contraband[key] + for(var/key in premium) + . += premium[key] diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 3ac3a67060..736149c665 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -17,7 +17,11 @@ /obj/item/banhammer/suicide_act(mob/user) user.visible_message("[user] is hitting [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.") return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS) - +/* +oranges says: This is a meme relating to the english translation of the ss13 russian wiki page on lurkmore. +mrdoombringer sez: and remember kids, if you try and PR a fix for this item's grammar, you are admitting that you are, indeed, a newfriend. +for further reading, please see: https://github.com/tgstation/tgstation/pull/30173 and https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=%2F%2Flurkmore.to%2FSS13&edit-text=&act=url +*/ /obj/item/banhammer/attack(mob/M, mob/user) if(user.zone_selected == BODY_ZONE_HEAD) M.visible_message("[user] are stroking the head of [M] with a bangammer", "[user] are stroking the head with a bangammer", "you hear a bangammer stroking a head"); @@ -76,7 +80,8 @@ /obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." - flags_1 = CONDUCT_1 | NODROP_1 | DROPDEL_1 + flags_1 = CONDUCT_1 + item_flags = NODROP | DROPDEL slot_flags = null block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY light_range = 3 @@ -248,7 +253,7 @@ user.put_in_hands(S) to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") - else if(istype(I, /obj/item/assembly/igniter) && !(I.flags_1 & NODROP_1)) + else if(istype(I, /obj/item/assembly/igniter) && !(I.item_flags & NODROP)) var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod remove_item_from_storage(user) @@ -411,7 +416,7 @@ item_state = "mounted_chainsaw" lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - flags_1 = NODROP_1 | ABSTRACT_1 | DROPDEL_1 + item_flags = NODROP | ABSTRACT | DROPDEL w_class = WEIGHT_CLASS_HUGE force = 24 throwforce = 0 @@ -591,7 +596,7 @@ icon_state = "madeyoulook" force = 0 throwforce = 0 - flags_1 = DROPDEL_1 | ABSTRACT_1 + item_flags = DROPDEL | ABSTRACT attack_verb = list("bopped") /obj/item/slapper @@ -601,7 +606,7 @@ item_state = "nothing" force = 0 throwforce = 0 - flags_1 = DROPDEL_1 | ABSTRACT_1 + item_flags = DROPDEL | ABSTRACT attack_verb = list("slapped") hitsound = 'sound/effects/snap.ogg' diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 5ce461b5ad..b296ec7f17 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -222,7 +222,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e tesla_zap(src, 3, power_bounced, tesla_flags, shocked_targets) addtimer(CALLBACK(src, .proc/reset_shocked), 10) -//The surgeon general warns that being buckled to certain objects recieving powerful shocks is greatly hazardous to your health +//The surgeon general warns that being buckled to certain objects receiving powerful shocks is greatly hazardous to your health //Only tesla coils and grounding rods currently call this because mobs are already targeted over all other objects, but this might be useful for more things later. /obj/proc/tesla_buckle_check(var/strength) if(has_buckled_mobs()) @@ -235,7 +235,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e //the obj is deconstructed into pieces, whether through careful disassembly or when destroyed. /obj/proc/deconstruct(disassembled = TRUE) - SendSignal(COMSIG_OBJ_DECONSTRUCT, disassembled) + SEND_SIGNAL(src, COMSIG_OBJ_DECONSTRUCT, disassembled) qdel(src) //what happens when the obj's health is below integrity_failure level. diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index ed797e4256..be26567c7e 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -63,7 +63,7 @@ /obj/structure/AIcore/latejoin_inactive/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/multitool)) active = !active - to_chat(user, "You [active? "activate" : "deactivate"] [src]'s transimtters.") + to_chat(user, "You [active? "activate" : "deactivate"] [src]'s transmitters.") return return ..() @@ -184,8 +184,9 @@ to_chat(user, "Sticking an inactive [M.name] into the frame would sort of defeat the purpose.") return - if(!CONFIG_GET(flag/allow_ai) || jobban_isbanned(M.brainmob, "AI")) - to_chat(user, "This [M.name] does not seem to fit!") + if(!CONFIG_GET(flag/allow_ai) || (jobban_isbanned(M.brainmob, "AI") && !QDELETED(src) && !QDELETED(user) && !QDELETED(M) && !QDELETED(user) && Adjacent(user))) + if(!QDELETED(M)) + to_chat(user, "This [M.name] does not seem to fit!") return if(!M.brainmob.mind) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index a4915f6e1f..4727817945 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -192,20 +192,11 @@ /obj/structure/chair/comfy/lime color = rgb(255,251,0) -/obj/structure/chair/comfy/shuttle - name = "shuttle seat" - desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." - icon_state = "shuttle_chair" - -/obj/structure/chair/comfy/shuttle/GetArmrest() - return mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest") - /obj/structure/chair/office anchored = FALSE buildstackamount = 5 item_chair = null - /obj/structure/chair/office/Moved() . = ..() if(has_gravity()) @@ -418,3 +409,10 @@ . = ..() if(has_gravity()) playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE) + +/obj/structure/chair/shuttle + name = "shuttle seat" + desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." + icon = 'goon/icons/obj/chairs.dmi' + icon_state = "shuttle_chair" //thanks gannets! + diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ca8d01fc07..93facf2c0c 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -163,18 +163,20 @@ else if(istype(AM, /obj/structure/closet)) return else if(isobj(AM)) - if(!allow_objects && !istype(AM, /obj/item) && !istype(AM, /obj/effect/dummy/chameleon)) + if (istype(AM, /obj/item)) + var/obj/item/I = AM + if (I.item_flags & NODROP) + return + else if(!allow_objects && !istype(AM, /obj/effect/dummy/chameleon)) return if(!allow_dense && AM.density) return - if(AM.anchored || AM.has_buckled_mobs() || (AM.flags_1 & NODROP_1)) + if(AM.anchored || AM.has_buckled_mobs()) return else return AM.forceMove(src) - if(AM.pulledby) - AM.pulledby.stop_pulling() return 1 @@ -245,7 +247,7 @@ if(opened) return welded = !welded - user.visible_message("[user] [welded ? "welds shut" : "unweldeds"] \the [src].", + user.visible_message("[user] [welded ? "welds shut" : "unwelded"] \the [src].", "You [welded ? "weld" : "unwelded"] \the [src] with \the [W].", "You hear welding.") update_icon() @@ -257,7 +259,7 @@ user.visible_message("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ "You [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ "You hear a ratchet.") - else if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1)) + else if(user.a_intent != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) if(W.GetID() || !toggle(user)) togglelock(user) else diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 7ae18a481e..c9a2ad54ff 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -17,7 +17,7 @@ icon_state = "syndicate" /obj/structure/closet/gimmick/russian - name = "russian surplus closet" + name = "\improper Russian surplus closet" desc = "It's a storage unit for Russian standard-issue surplus." /obj/structure/closet/gimmick/russian/PopulateContents() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 64f22c555a..52032e9bb3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -165,7 +165,7 @@ new /obj/item/encryptionkey/headset_med(src) /obj/structure/closet/secure_closet/detective - name = "\proper detective's cabinet" + name = "\improper detective's cabinet" req_access = list(ACCESS_FORENSICS_LOCKERS) icon_state = "cabinet" resistance_flags = FLAMMABLE diff --git a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm index 79af1e0bdc..d99f07e41f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm @@ -32,7 +32,7 @@ desc = "A Nanotrasen Bluespace drop pod, this one has been marked with Central Command's designations. Teleports back to Centcom after delivery." icon_state = "centcompod" -/obj/structure/closet/supplypod/Initialize(mapload, var/SO) +/obj/structure/closet/supplypod/Initialize(mapload, SO) . = ..() if(istype(SO, /datum/supply_order)) SupplyOrder = SO//uses Supply Order passed from expressconsole into BDPtarget @@ -84,7 +84,7 @@ randomdir = FALSE icon_state = "supplypod_falling" -/obj/effect/temp_visual/DPfall/Initialize(var/dropLocation, var/podID) +/obj/effect/temp_visual/DPfall/Initialize(dropLocation, podID) if (podID == POD_STANDARD) icon_state = "supplypod_falling" name = "Supply Drop Pod" @@ -104,7 +104,7 @@ light_range = 2 var/obj/effect/temp_visual/fallingPod -/obj/effect/DPtarget/Initialize(mapload, var/SO, var/podID, var/target) +/obj/effect/DPtarget/Initialize(mapload, SO, podID) . = ..() var/delayTime = 17 //We're forcefully adminspawned, make it faster switch(podID) @@ -117,12 +117,12 @@ addtimer(CALLBACK(src, .proc/beginLaunch, SO, podID), delayTime)//standard pods take 3 seconds to come in, bluespace pods take 1.5 -/obj/effect/DPtarget/proc/beginLaunch(var/SO, var/podID) +/obj/effect/DPtarget/proc/beginLaunch(SO, podID) fallingPod = new /obj/effect/temp_visual/DPfall(drop_location(), podID) animate(fallingPod, pixel_z = 0, time = 3, easing = LINEAR_EASING)//make and animate a falling pod addtimer(CALLBACK(src, .proc/endLaunch, SO, podID), 3, TIMER_CLIENT_TIME)//fall 0.3seconds -/obj/effect/DPtarget/proc/endLaunch(var/SO, var/podID) +/obj/effect/DPtarget/proc/endLaunch(SO, podID) if(podID == POD_STANDARD) new /obj/structure/closet/supplypod(drop_location(), SO)//pod is created explosion(src,0,0,2, flame_range = 3) //less advanced equipment than bluespace pod, so larger explosion when landing @@ -132,6 +132,8 @@ else if(podID == POD_CENTCOM) new /obj/structure/closet/supplypod/bluespacepod/centcompod(drop_location(), SO)//CentCom supplypods dont create explosions; instead they directly deal 40 fire damage to people on the turf var/turf/T = get_turf(src) + playsound(src, "explosion", 80, 1) + new /obj/effect/hotspot(T) T.hotspot_expose(700, 50, 1)//same as fireball for(var/mob/living/M in T.contents) M.adjustFireLoss(40) diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index 9f14fff8d0..c0ca1277d3 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -27,7 +27,7 @@ var/obj/item/storage/bag/trash/T = W to_chat(user, "You fill the bag.") for(var/obj/item/O in src) - T.SendSignal(COMSIG_TRY_STORAGE_INSERT, O, user, TRUE) + SEND_SIGNAL(T, COMSIG_TRY_STORAGE_INSERT, O, user, TRUE) T.update_icon() do_animate() return TRUE diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index a98b800e09..5fd480f6fd 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -18,7 +18,7 @@ return to_chat(user, "You attempt to sacrifice [L] by invoking the sacrificial ritual.") L.gib() - message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrifical altar at [AREACOORD(src)].") + message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].") /obj/structure/healingfountain name = "healing fountain" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index f73a206747..aa2f7bed86 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,23 +8,23 @@ max_integrity = 200 integrity_failure = 50 var/obj/item/extinguisher/stored_extinguisher - var/opened = 0 + var/opened = FALSE -/obj/structure/extinguisher_cabinet/examine(mob/user) - ..() - to_chat(user, "Alt-click to [opened ? "close":"open"] it.") - -/obj/structure/extinguisher_cabinet/New(loc, ndir, building) - ..() +/obj/structure/extinguisher_cabinet/Initialize(mapload, ndir, building) + . = ..() if(building) setDir(ndir) pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0 - opened = 1 + opened = TRUE icon_state = "extinguisher_empty" else stored_extinguisher = new /obj/item/extinguisher(src) +/obj/structure/extinguisher_cabinet/examine(mob/user) + ..() + to_chat(user, "Alt-click to [opened ? "close":"open"] it.") + /obj/structure/extinguisher_cabinet/Destroy() if(stored_extinguisher) qdel(stored_extinguisher) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 0c84c4cf63..448734d917 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -1,19 +1,20 @@ /obj/structure/fireaxecabinet name = "fire axe cabinet" desc = "There is a small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - var/obj/item/twohanded/fireaxe/fireaxe = new/obj/item/twohanded/fireaxe icon = 'icons/obj/wallmounts.dmi' icon_state = "fireaxe" anchored = TRUE density = FALSE armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) - var/locked = TRUE - var/open = FALSE max_integrity = 150 integrity_failure = 50 + var/locked = TRUE + var/open = FALSE + var/obj/item/twohanded/fireaxe/fireaxe /obj/structure/fireaxecabinet/Initialize() . = ..() + fireaxe = new update_icon() /obj/structure/fireaxecabinet/Destroy() diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 2735bd7e81..b670fe5cf0 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -111,7 +111,7 @@ playsound(src, 'sound/effects/comfyfire.ogg',50,0, 0, 1) var/turf/T = get_turf(src) - T.hotspot_expose(700, 5) + T.hotspot_expose(500, 5) update_icon() adjust_light() diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 39ae5bfae8..43916182ac 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -476,7 +476,7 @@ random = TRUE mob_species = /datum/species/human flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artifical Program telling you that you would only be asleep for eight hours. As you open \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod." uniform = /obj/item/clothing/under/rank/security shoes = /obj/item/clothing/shoes/jackboots @@ -500,7 +500,7 @@ random = TRUE mob_species = /datum/species/human flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artifical Program telling you that you would only be asleep for eight hours. As you open \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod." uniform = /obj/item/clothing/under/rank/engineer shoes = /obj/item/clothing/shoes/workboots @@ -524,7 +524,7 @@ random = TRUE mob_species = /datum/species/human flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artifical Program telling you that you would only be asleep for eight hours. As you open \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod." uniform = /obj/item/clothing/under/rank/scientist shoes = /obj/item/clothing/shoes/laceup diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index 169132a158..df145baf94 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -180,7 +180,7 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - flags_1 = ABSTRACT_1 | NODROP_1 | NOBLUDGEON_1 | DROPDEL_1 + item_flags = ABSTRACT | NODROP | NOBLUDGEON | DROPDEL resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF var/obj/machinery/manned_turret/turret diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 4d3b19177e..a247f4c125 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -201,7 +201,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/bodycontainer/crematorium name = "crematorium" - desc = "A human incinerator. Works well on barbeque nights." + desc = "A human incinerator. Works well on barbecue nights." icon_state = "crema1" dir = SOUTH var/id = 1 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 5ec1c31d30..aa87410d2c 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -116,7 +116,7 @@ if(!ishuman(pushed_mob)) return var/mob/living/carbon/human/H = pushed_mob - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table) /obj/structure/table/attackby(obj/item/I, mob/user, params) if(!(flags_1 & NODECONSTRUCT_1)) @@ -136,12 +136,12 @@ if(istype(I, /obj/item/storage/bag/tray)) var/obj/item/storage/bag/tray/T = I if(T.contents.len > 0) // If the tray isn't empty - I.SendSignal(COMSIG_TRY_STORAGE_QUICK_EMPTY, drop_location()) + SEND_SIGNAL(I, COMSIG_TRY_STORAGE_QUICK_EMPTY, drop_location()) user.visible_message("[user] empties [I] on [src].") return // If the tray IS empty, continue on (tray will be placed on the table like other items) - if(user.a_intent != INTENT_HARM && !(I.flags_1 & ABSTRACT_1)) + if(user.a_intent != INTENT_HARM && !(I.item_flags & ABSTRACT)) if(user.transferItemToLoc(I, drop_location())) var/list/click_params = params2list(params) //Center the icon where the user clicked. diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index f0e11434f2..56608789f7 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -42,9 +42,9 @@ for(var/obj/structure/transit_tube_pod/pod in src.loc) to_chat(user, "Remove the pod first!") return - user.visible_message("[user] starts to deattach \the [src].", "You start to deattach the [name]...") + user.visible_message("[user] starts to detach \the [src].", "You start to detach the [name]...") if(W.use_tool(src, user, time_to_unwrench, volume=50)) - to_chat(user, "You deattach the [name].") + to_chat(user, "You detach the [name].") var/obj/structure/c_transit_tube/R = new tube_construction(loc) R.setDir(dir) transfer_fingerprints_to(R) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 4798aae883..9b1bd0ec2c 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -241,7 +241,7 @@ soundloop.start() wash_turf() for(var/atom/movable/G in loc) - G.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + SEND_SIGNAL(G, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) if(isliving(G)) var/mob/living/L = G wash_mob(L) @@ -314,7 +314,7 @@ /obj/machinery/shower/proc/wash_obj(obj/O) - . = O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + . = SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) if(isitem(O)) var/obj/item/I = O @@ -325,7 +325,7 @@ /obj/machinery/shower/proc/wash_turf() if(isturf(loc)) var/turf/tile = loc - tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) for(var/obj/effect/E in tile) if(is_cleanable(E)) @@ -333,12 +333,12 @@ /obj/machinery/shower/proc/wash_mob(mob/living/L) - L.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) L.wash_cream() L.ExtinguishMob() L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily L.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - L.SendSignal(COMSIG_ADD_MOOD_EVENT, "shower", /datum/mood_event/nice_shower) + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "shower", /datum/mood_event/nice_shower) if(iscarbon(L)) var/mob/living/carbon/M = L . = TRUE @@ -378,7 +378,7 @@ else if(H.w_uniform && wash_obj(H.w_uniform)) H.update_inv_w_uniform() if(washgloves) - H.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(H.shoes && washshoes && wash_obj(H.shoes)) H.update_inv_shoes() if(H.wear_mask && washmask && wash_obj(H.wear_mask)) @@ -395,9 +395,9 @@ else if(M.wear_mask && wash_obj(M.wear_mask)) M.update_inv_wear_mask(0) - M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else - L.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/machinery/shower/proc/contamination_cleanse(atom/movable/thing) var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive) @@ -493,7 +493,7 @@ H.regenerate_icons() user.drowsyness = max(user.drowsyness - rand(2,3), 0) //Washing your face wakes you up if you're falling asleep else - user.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/structure/sink/attackby(obj/item/O, mob/living/user, params) if(busy) @@ -539,7 +539,7 @@ if(!istype(O)) return - if(O.flags_1 & ABSTRACT_1) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. + if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. return if(user.a_intent != INTENT_HARM) @@ -549,7 +549,7 @@ busy = FALSE return 1 busy = FALSE - O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) O.acid_level = 0 create_reagents(5) reagents.add_reagent(dispensedreagent, 5) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 928c0b4734..f94d055391 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -439,7 +439,7 @@ /obj/structure/window/plasma/reinforced name = "reinforced plasma window" - desc = "A window made out of a plasma-silicate alloy and a rod matrice. It looks hopelessly tough to break and is most likely nigh fireproof." + desc = "A window made out of a plasma-silicate alloy and a rod matrix. It looks hopelessly tough to break and is most likely nigh fireproof." icon_state = "plasmarwindow" reinf = TRUE heat_resistance = 50000 diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 0f68e68b7b..2983d3d923 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -88,6 +88,7 @@ icon_state = "heater" desc = "Directs energy into compressed particles in order to power engines." engine_power = 0 // todo make these into 2x1 parts + CanAtmosPass = ATMOS_PASS_NO /obj/structure/shuttle/engine/platform name = "engine platform" diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 8b39785b5c..f108a536d2 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -38,6 +38,17 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( T.setDir(dir) return T +/turf/open/copyTurf(turf/T, copy_air = FALSE) + . = ..() + if (isopenturf(T)) + GET_COMPONENT(slip, /datum/component/wet_floor) + if(slip) + var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor) + WF.InheritComponent(slip) + if (copy_air) + var/turf/open/openTurf = T + openTurf.air.copy_from(air) + //wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself /turf/proc/TerraformTurf(path, new_baseturf, flags) return ChangeTurf(path, new_baseturf, flags) @@ -70,7 +81,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/list/old_baseturfs = baseturfs var/list/transferring_comps = list() - SendSignal(COMSIG_TURF_CHANGE, path, new_baseturfs, flags, transferring_comps) + SEND_SIGNAL(src, COMSIG_TURF_CHANGE, path, new_baseturfs, flags, transferring_comps) for(var/i in transferring_comps) var/datum/component/comp = i comp.RemoveComponent() @@ -227,7 +238,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( // Copy an existing turf and put it on top // Returns the new turf -/turf/proc/CopyOnTop(turf/copytarget, ignore_bottom=1, depth=INFINITY) +/turf/proc/CopyOnTop(turf/copytarget, ignore_bottom=1, depth=INFINITY, copy_air = FALSE) var/list/new_baseturfs = list() new_baseturfs += baseturfs new_baseturfs += type @@ -244,7 +255,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( target_baseturfs -= new_baseturfs & GLOB.blacklisted_automated_baseturfs new_baseturfs += target_baseturfs - var/turf/newT = copytarget.copyTurf(src) + var/turf/newT = copytarget.copyTurf(src, copy_air) newT.baseturfs = new_baseturfs return newT diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index db1dba66cf..c1aba02f28 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -8,7 +8,7 @@ . = ..() AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION) -/turf/closed/ChangeTurf() +/turf/closed/AfterChange() . = ..() SSair.high_pressure_delta -= src @@ -31,6 +31,10 @@ /turf/closed/indestructible/acid_act(acidpwr, acid_volume, acid_id) return 0 +/turf/closed/indestructible/Melt() + to_be_destroyed = FALSE + return src + /turf/closed/indestructible/oldshuttle name = "strange shuttle wall" icon = 'icons/turf/shuttleold.dmi' diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index f334f8e0b3..44dff22963 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -19,11 +19,15 @@ icon = 'icons/turf/floors.dmi' icon_state = "floor" +/turf/open/indestructible/Melt() + to_be_destroyed = FALSE + return src + /turf/open/indestructible/TerraformTurf(path, defer_change = FALSE, ignore_air = FALSE) return /turf/open/indestructible/sound - name = "squeeky floor" + name = "squeaky floor" var/sound /turf/open/indestructible/sound/Entered(var/mob/AM) @@ -186,7 +190,7 @@ for(var/mob/living/simple_animal/slime/M in src) M.apply_water() - SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) for(var/obj/effect/O in src) if(is_cleanable(O)) qdel(O) @@ -210,7 +214,7 @@ to_chat(C, "You slipped[ O ? " on the [O.name]" : ""]!") playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3) - C.SendSignal(COMSIG_ADD_MOOD_EVENT, "slipped", /datum/mood_event/slipped) + SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "slipped", /datum/mood_event/slipped) for(var/obj/item/I in C.held_items) C.accident(I) @@ -231,19 +235,11 @@ new /datum/forced_movement(C, get_ranged_target_turf(C, olddir, 1), 1, FALSE) //spinning would be bad for ice, fucks up the next dir return 1 -/turf/open/copyTurf(turf/T) - . = ..() - if(. && isopenturf(T)) - GET_COMPONENT(slip, /datum/component/wet_floor) - if(slip) - var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor) - WF.InheritComponent(slip) - /turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0, max_wet_time = MAXIMUM_WET_TIME, permanent) AddComponent(/datum/component/wet_floor, wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) /turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER, immediate = FALSE, amount = INFINITY) - SendSignal(COMSIG_TURF_MAKE_DRY, wet_setting, immediate, amount) + SEND_SIGNAL(src, COMSIG_TURF_MAKE_DRY, wet_setting, immediate, amount) /turf/open/get_dumping_location() return src diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 3515527bfd..d107b0f1fd 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -55,6 +55,7 @@ return if(target == src) ScrapeAway() + return if(target != null) severity = 3 diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index ffb672e773..48674e5ae4 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -80,7 +80,7 @@ update_icon() to_chat(user, "You replace the light bulb.") else - to_chat(user, "The lightbulb seems fine, no need to replace it.") + to_chat(user, "The light bulb seems fine, no need to replace it.") //Cycles through all of the colours diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm index e5560df6ec..cd82888827 100644 --- a/code/game/turfs/simulated/floor/mineral_floor.dm +++ b/code/game/turfs/simulated/floor/mineral_floor.dm @@ -133,7 +133,7 @@ .=..() if(!.) if(istype(L)) - squeek() + squeak() /turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params) .=..() @@ -155,7 +155,7 @@ playsound(src, 'sound/items/bikehorn.ogg', 50, 1) spam_flag = world.time + 20 -/turf/open/floor/mineral/bananium/proc/squeek() +/turf/open/floor/mineral/bananium/proc/squeak() if(spam_flag < world.time) playsound(src, "clownstep", 50, 1) spam_flag = world.time + 10 diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index b3929abf91..3b3d4c40ec 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -47,17 +47,17 @@ initial_gas_mix = "TEMP=2.7" /turf/open/floor/circuit/killroom - name = "killroom Floor" + name = "killroom floor" initial_gas_mix = "n2=500;TEMP=80" /turf/open/floor/circuit/telecomms initial_gas_mix = "n2=100;TEMP=80" /turf/open/floor/circuit/telecomms/mainframe - name = "mainframe Base" + name = "mainframe base" /turf/open/floor/circuit/telecomms/server - name = "server Base" + name = "server base" /turf/open/floor/circuit/green icon_state = "gcircuit" @@ -81,7 +81,7 @@ initial_gas_mix = "n2=100;TEMP=80" /turf/open/floor/circuit/green/telecomms/mainframe - name = "mainframe Base" + name = "mainframe base" /turf/open/floor/circuit/red icon_state = "rcircuit" diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm index 815cb52bd4..1b4f959fc9 100644 --- a/code/game/turfs/simulated/floor/plasteel_floor.dm +++ b/code/game/turfs/simulated/floor/plasteel_floor.dm @@ -60,7 +60,7 @@ /turf/open/floor/plasteel/brown/telecomms initial_gas_mix = "n2=100;TEMP=80" /turf/open/floor/plasteel/brown/telecomms/mainframe - name = "mainframe Floor" + name = "mainframe floor" /turf/open/floor/plasteel/brown/corner icon_state = "browncorner" @@ -349,9 +349,9 @@ /turf/open/floor/plasteel/vault/telecomms initial_gas_mix = "n2=100;TEMP=80" /turf/open/floor/plasteel/vault/telecomms/mainframe - name = "mainframe Floor" + name = "mainframe floor" /turf/open/floor/plasteel/vault/killroom - name = "killroom Floor" + name = "killroom floor" initial_gas_mix = "n2=500;TEMP=80" /turf/open/floor/plasteel/cult diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 63ff9f6519..a57213a4f9 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -39,7 +39,7 @@ return TRUE if(istype(W, /obj/item/storage/bag/ore)) for(var/obj/item/stack/ore/O in src) - W.SendSignal(COMSIG_PARENT_ATTACKBY, O) + SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O) /turf/open/floor/plating/asteroid/singularity_act() if(is_planet_level(z)) @@ -47,7 +47,7 @@ ScrapeAway() /turf/open/floor/plating/asteroid/ex_act(severity, target) - . = SendSignal(COMSIG_ATOM_EX_ACT, severity, target) + . = SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) contents_explosion(severity, target) /turf/open/floor/plating/lavaland_baseturf diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 987689cb9a..490a6dcaf7 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -466,3 +466,8 @@ var/datum/reagent/consumable/nutri_check = R if(nutri_check.nutriment_factor >0) M.reagents.remove_reagent(R.id,R.volume) + +//Whatever happens after high temperature fire dies out or thermite reaction works. +//Should return new turf +/turf/proc/Melt() + return ScrapeAway() \ No newline at end of file diff --git a/code/game/world.dm b/code/game/world.dm index a22d4345a5..7d7b17b4ac 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -11,7 +11,7 @@ GLOBAL_PROTECT(security_mode) SetupExternalRSC() - GLOB.config_error_log = GLOB.world_manifest_log = GLOB.world_pda_log = GLOB.sql_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = "data/logs/config_error.log" //temporary file used to record errors with loading config, moved to log directory once logging is set bl + GLOB.config_error_log = GLOB.world_manifest_log = GLOB.world_pda_log = GLOB.world_job_debug_log = GLOB.sql_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = "data/logs/config_error.log" //temporary file used to record errors with loading config, moved to log directory once logging is set bl CheckSecurityMode() @@ -96,6 +96,7 @@ GLOBAL_PROTECT(security_mode) GLOB.world_qdel_log = "[GLOB.log_directory]/qdel.log" GLOB.world_runtime_log = "[GLOB.log_directory]/runtime.log" GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log" + GLOB.world_job_debug_log = "[GLOB.log_directory]/job_debug.log" #ifdef UNIT_TESTS GLOB.test_log = file("[GLOB.log_directory]/tests.log") @@ -108,6 +109,7 @@ GLOBAL_PROTECT(security_mode) start_log(GLOB.world_href_log) start_log(GLOB.world_qdel_log) start_log(GLOB.world_runtime_log) + start_log(GLOB.world_job_debug_log) GLOB.changelog_hash = md5('html/changelog.html') //for telling if the changelog has changed recently if(fexists(GLOB.config_error_log)) diff --git a/code/modules/NTNet/network.dm b/code/modules/NTNet/network.dm index 68b158dd65..ae8948dafb 100644 --- a/code/modules/NTNet/network.dm +++ b/code/modules/NTNet/network.dm @@ -102,20 +102,20 @@ return FALSE data.network_id = src log_data_transfer(data) - var/list/datum/component/ntnet_interface/recieving = list() + var/list/datum/component/ntnet_interface/receiving = list() if((length(data.recipient_ids == 1) && data.recipient_ids[1] == NETWORK_BROADCAST_ID) || data.recipient_ids == NETWORK_BROADCAST_ID) data.broadcast = TRUE for(var/i in connected_interfaces_by_id) - recieving |= connected_interfaces_by_id[i] + receiving |= connected_interfaces_by_id[i] else for(var/i in data.recipient_ids) - var/datum/component/ntnet_interface/reciever = find_interface_id(i) - recieving |= reciever + var/datum/component/ntnet_interface/receiver = find_interface_id(i) + receiving |= receiver - for(var/i in recieving) - var/datum/component/ntnet_interface/reciever = i - if(reciever) - reciever.__network_recieve(data) + for(var/i in receiving) + var/datum/component/ntnet_interface/receiver = i + if(receiver) + receiver.__network_receive(data) for(var/i in services_by_id) var/datum/ntnet_service/serv = services_by_id[i] diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index dd89a08c9e..c36f0f040b 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -144,7 +144,7 @@ data["isoccupant"] = (user == occupant) return data -/obj/machinery/vr_sleeper/proc/get_vr_spawnpoint() //proc so it can be overriden for team games or something +/obj/machinery/vr_sleeper/proc/get_vr_spawnpoint() //proc so it can be overridden for team games or something return safepick(GLOB.vr_spawnpoints[vr_category]) /obj/machinery/vr_sleeper/proc/build_spawnpoints() // used to rebuild the list for admins if need be diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 09d0d5d2e2..fd95783525 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -74,12 +74,20 @@ ckey = ckey(banckey) computerid = bancid ip = banip + + var/had_banned_mob = banned_mob != null + var/client/banned_client = banned_mob?.client + var/banned_mob_guest_key = had_banned_mob && IsGuestKey(banned_mob.key) + banned_mob = null var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[ckey]'") if(!query_add_ban_get_ckey.warn_execute()) + qdel(query_add_ban_get_ckey) return - if(!query_add_ban_get_ckey.NextRow()) - if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) + var/seen_before = query_add_ban_get_ckey.NextRow() + qdel(query_add_ban_get_ckey) + if(!seen_before) + if(!had_banned_mob || (had_banned_mob && !banned_mob_guest_key)) if(alert(usr, "[ckey] has not been seen before, are you sure you want to create a ban for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") return @@ -116,6 +124,7 @@ if(maxadminbancheck) var/datum/DBQuery/query_check_adminban_amt = SSdbcore.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") if(!query_check_adminban_amt.warn_execute()) + qdel(query_check_adminban_amt) return if(query_check_adminban_amt.NextRow()) var/adm_bans = text2num(query_check_adminban_amt.item[1]) @@ -124,7 +133,9 @@ max_bans = MAX_ADMIN_BANS_PER_HEADMIN if(adm_bans >= max_bans) to_chat(usr, "You already logged [max_bans] admin ban(s) or more. Do not abuse this function!") + qdel(query_check_adminban_amt) return + qdel(query_check_adminban_amt) if(!computerid) computerid = "0" if(!ip) @@ -132,7 +143,9 @@ var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`round_id`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql) if(!query_add_ban.warn_execute()) + qdel(query_add_ban) return + qdel(query_add_ban) to_chat(usr, "Ban saved to database.") var/msg = "[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database." message_admins(msg,1) @@ -144,8 +157,8 @@ if(kickbannedckey) if(AH) AH.Resolve() //with prejudice - if(banned_mob && banned_mob.client && banned_mob.client.ckey == banckey) - qdel(banned_mob.client) + if(banned_client && banned_client.ckey == banckey) + qdel(banned_client) return 1 /datum/admins/proc/DB_ban_unban(ckey, bantype, job = "") @@ -204,10 +217,12 @@ var/datum/DBQuery/query_unban_get_id = SSdbcore.NewQuery(sql) if(!query_unban_get_id.warn_execute()) + qdel(query_unban_get_id) return while(query_unban_get_id.NextRow()) ban_id = query_unban_get_id.item[1] ban_number++; + qdel(query_unban_get_id) if(ban_number == 0) to_chat(usr, "Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.") @@ -236,6 +251,7 @@ var/datum/DBQuery/query_edit_ban_get_details = SSdbcore.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") if(!query_edit_ban_get_details.warn_execute()) + qdel(query_edit_ban_get_details) return var/eckey = usr.ckey //Editing admin ckey @@ -249,7 +265,9 @@ reason = query_edit_ban_get_details.item[3] else to_chat(usr, "Invalid ban id. Contact the database admin") + qdel(query_edit_ban_get_details) return + qdel(query_edit_ban_get_details) reason = sanitizeSQL(reason) var/value @@ -265,7 +283,9 @@ var/datum/DBQuery/query_edit_ban_reason = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
    ') WHERE id = [banid]") if(!query_edit_ban_reason.warn_execute()) + qdel(query_edit_ban_reason) return + qdel(query_edit_ban_reason) message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]") if("duration") if(!value) @@ -276,7 +296,9 @@ var/datum/DBQuery/query_edit_ban_duration = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
    '), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") if(!query_edit_ban_duration.warn_execute()) + qdel(query_edit_ban_duration) return + qdel(query_edit_ban_duration) message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]") if("unban") if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") @@ -304,10 +326,12 @@ var/pckey var/datum/DBQuery/query_unban_get_ckey = SSdbcore.NewQuery(sql) if(!query_unban_get_ckey.warn_execute()) + qdel(query_unban_get_ckey) return while(query_unban_get_ckey.NextRow()) pckey = query_unban_get_ckey.item[1] ban_number++; + qdel(query_unban_get_ckey) if(ban_number == 0) to_chat(usr, "Database update failed due to a ban id not being present in the database.") @@ -327,7 +351,9 @@ var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" var/datum/DBQuery/query_unban = SSdbcore.NewQuery(sql_update) if(!query_unban.warn_execute()) + qdel(query_unban) return + qdel(query_unban) message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.") /client/proc/DB_ban_panel() @@ -422,9 +448,11 @@ page = text2num(page) var/datum/DBQuery/query_count_bans = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("ban")] WHERE [search]") if(!query_count_bans.warn_execute()) + qdel(query_count_bans) return if(query_count_bans.NextRow()) bancount = text2num(query_count_bans.item[1]) + qdel(query_count_bans) if(bancount > bansperpage) output += "
    Page: " while(bancount > 0) @@ -448,6 +476,7 @@ var/limit = " LIMIT [bansperpage * page], [bansperpage]" var/datum/DBQuery/query_search_bans = SSdbcore.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, round_id FROM [format_table_name("ban")] WHERE [search] ORDER BY bantime DESC[limit]") if(!query_search_bans.warn_execute()) + qdel(query_search_bans) return while(query_search_bans.NextRow()) @@ -511,7 +540,7 @@ output += "" output += " " output += "" - + qdel(query_search_bans) output += "" usr << browse(output,"window=lookupbans;size=900x500") diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 097076fc74..a3f83ef3ba 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -80,6 +80,7 @@ var/datum/DBQuery/query_ban_check = SSdbcore.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") if(!query_ban_check.Execute()) + qdel(query_ban_check) return while(query_ban_check.NextRow()) var/pckey = query_ban_check.item[1] @@ -117,7 +118,9 @@ log_access("Failed Login: [key] [computer_id] [address] - Banned (#[banid]) [.["reason"]]") + qdel(query_ban_check) return . + qdel(query_ban_check) var/list/ban = ..() //default pager ban stuff if (ban) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 8cce9bc4f4..d9ab979686 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,11 +1,11 @@ //////////////////////////////// /proc/message_admins(msg) - msg = "ADMIN LOG: [msg]" + msg = "ADMIN LOG: [msg]" to_chat(GLOB.admins, msg) /proc/relay_msg_admins(msg) - msg = "RELAY: [msg]" + msg = "RELAY: [msg]" to_chat(GLOB.admins, msg) @@ -77,14 +77,19 @@ body += "Ban | " body += "Jobban | " body += "Identity Ban | " + var/rm = REF(M) if(jobban_isbanned(M, "OOC")) - body+= "OOCBan | " + body+= "OOCBan | " else - body+= "OOCBan | " + body+= "OOCBan | " + if(QDELETED(M) || QDELETED(usr)) + return if(jobban_isbanned(M, "emote")) - body+= "EmoteBan | " + body+= "EmoteBan | " else - body+= "Emoteban | " + body+= "Emoteban | " + if(QDELETED(M) || QDELETED(usr)) + return body += "Notes | Messages | Watchlist | " if(M.client) diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index b5fead892f..94efce6059 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -4,7 +4,7 @@ var/F = file("[GLOB.log_directory]/[subject].html") WRITE_FILE(F, "[time_stamp()] [REF(src)] ([x],[y],[z]) || [src] [message]
    ") -/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION) ) +/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION, INVESTIGATE_CIRCUIT) ) set name = "Investigate" set category = "Admin" if(!holder) diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 4aab13dbe5..b6824cc1a0 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -146,7 +146,7 @@ GLOBAL_PROTECT(protected_ranks) var/sql_exclude_flags = sanitizeSQL(R.exclude_rights) var/sql_can_edit_flags = sanitizeSQL(R.can_edit_rights) sql_ranks += list(list("rank" = "'[sql_rank]'", "flags" = "[sql_flags]", "exclude_flags" = "[sql_exclude_flags]", "can_edit_flags" = "[sql_can_edit_flags]")) - SSdbcore.MassInsert(format_table_name("admin_ranks"), sql_ranks, duplicate_key = TRUE) + SSdbcore.MassInsert(format_table_name("admin_ranks"), sql_ranks, duplicate_key = TRUE, blocking = TRUE) else var/datum/DBQuery/query_load_admin_ranks = SSdbcore.NewQuery("SELECT rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")]") if(!query_load_admin_ranks.Execute()) @@ -169,6 +169,7 @@ GLOBAL_PROTECT(protected_ranks) if(!R) continue GLOB.admin_ranks += R + qdel(query_load_admin_ranks) //load ranks from backup file if(dbfail) var/backup_file = file("data/admins_backup.json") @@ -247,6 +248,7 @@ GLOBAL_PROTECT(protected_ranks) skip = 1 if(!skip) new /datum/admins(rank_names[admin_rank], admin_ckey) + qdel(query_load_admins) //load admins from backup file if(dbfail) var/backup_file = file("data/admins_backup.json") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 21642784a3..6104658e23 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,5 +1,4 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless -//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless //the procs are cause you can't put the comments in the GLOB var define GLOBAL_PROTECT(admin_verbs_default) GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 7e200c3aa2..fbb97fcea7 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -6,12 +6,14 @@ if(!M.client) //no cache. fallback to a datum/DBQuery var/datum/DBQuery/query_jobban_check_ban = SSdbcore.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") if(!query_jobban_check_ban.warn_execute()) + qdel(query_jobban_check_ban) return if(query_jobban_check_ban.NextRow()) var/reason = query_jobban_check_ban.item[1] + qdel(query_jobban_check_ban) return reason ? reason : TRUE //we don't want to return "" if there is no ban reason, as that would evaluate to false - else - return FALSE + qdel(query_jobban_check_ban) + return FALSE if(!M.client.jobbancache) jobban_buildcache(M.client) @@ -31,6 +33,7 @@ return while(query_jobban_build_cache.NextRow()) C.jobbancache[query_jobban_build_cache.item[1]] = query_jobban_build_cache.item[2] + qdel(query_jobban_build_cache) /proc/ban_unban_log_save(var/formatted_log) text2file(formatted_log,"data/ban_unban_log.txt") diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm index dbeb6fce7f..c4e5679c76 100644 --- a/code/modules/admin/chat_commands.dm +++ b/code/modules/admin/chat_commands.dm @@ -110,6 +110,10 @@ GLOBAL_LIST(round_end_notifiees) admin_only = TRUE /datum/tgs_chat_command/reload_admins/Run(datum/tgs_chat_user/sender, params) - load_admins() + ReloadAsync() log_admin("[sender.friendly_name] reloaded admins via chat command.") return "Admins reloaded." + +/datum/tgs_chat_command/reload_admins/proc/ReloadAsync() + set waitfor = FALSE + load_admins() \ No newline at end of file diff --git a/code/modules/admin/create_poll.dm b/code/modules/admin/create_poll.dm index 90fd6c66c9..f098dc1f05 100644 --- a/code/modules/admin/create_poll.dm +++ b/code/modules/admin/create_poll.dm @@ -36,7 +36,8 @@ return endtime = sanitizeSQL(endtime) var/datum/DBQuery/query_validate_time = SSdbcore.NewQuery("SELECT IF(STR_TO_DATE('[endtime]','%Y-%c-%d %T') > NOW(), STR_TO_DATE('[endtime]','%Y-%c-%d %T'), 0)") - if(!query_validate_time.warn_execute()) + if(!query_validate_time.warn_execute() || QDELETED(usr) || !src) + qdel(query_validate_time) return if(query_validate_time.NextRow()) var/checktime = text2num(query_validate_time.item[1]) @@ -44,6 +45,7 @@ to_chat(src, "Datetime entered is improperly formatted or not later than current server time.") return endtime = query_validate_time.item[1] + qdel(query_validate_time) var/adminonly switch(alert("Admin only poll?",,"Yes","No","Cancel")) if("Yes") @@ -124,18 +126,24 @@ add_option = 0 else return 0 + var/m1 = "[key_name(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]" + var/m2 = "[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]
    Question: [question]" var/datum/DBQuery/query_polladd_question = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', INET_ATON('[address]'), '[dontshow]')") if(!query_polladd_question.warn_execute()) + qdel(query_polladd_question) return + qdel(query_polladd_question) if(polltype != POLLTYPE_TEXT) var/pollid = 0 var/datum/DBQuery/query_get_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") if(!query_get_id.warn_execute()) + qdel(query_get_id) return if(query_get_id.NextRow()) pollid = query_get_id.item[1] + qdel(query_get_id) for(var/list/i in sql_option_list) i |= list("pollid" = "'[pollid]'") SSdbcore.MassInsert(format_table_name("poll_option"), sql_option_list, warn = 1) - log_admin("[key_name(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]") - message_admins("[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]
    Question: [question]") + log_admin(m1) + message_admins(m2) diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 85feb3026c..c88c610841 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -177,5 +177,5 @@ /area/shuttle_arena name = "arena" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY requires_power = FALSE diff --git a/code/modules/admin/ipintel.dm b/code/modules/admin/ipintel.dm index fa9951f276..e0056b3e40 100644 --- a/code/modules/admin/ipintel.dm +++ b/code/modules/admin/ipintel.dm @@ -51,6 +51,7 @@ )) "}) if(!query_get_ip_intel.Execute()) + qdel(query_get_ip_intel) return if (query_get_ip_intel.NextRow()) res.cache = TRUE @@ -59,14 +60,16 @@ res.cacheminutesago = text2num(query_get_ip_intel.item[3]) res.cacherealtime = world.realtime - (text2num(query_get_ip_intel.item[3])*10*60) SSipintel.cache[ip] = res + qdel(query_get_ip_intel) return + qdel(query_get_ip_intel) res.intel = ip_intel_query(ip) if (updatecache && res.intel >= 0) SSipintel.cache[ip] = res if(SSdbcore.Connect()) var/datum/DBQuery/query_add_ip_intel = SSdbcore.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()") query_add_ip_intel.Execute() - + qdel(query_add_ip_intel) /proc/ip_intel_query(ip, var/retryed=0) diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index 8c608a6e5e..ac55eac872 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -31,9 +31,11 @@ page = text2num(page) var/datum/DBQuery/query_count_admin_logs = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("admin_log")][search]") if(!query_count_admin_logs.warn_execute()) + qdel(query_count_admin_logs) return if(query_count_admin_logs.NextRow()) logcount = text2num(query_count_admin_logs.item[1]) + qdel(query_count_admin_logs) if(logcount > logssperpage) output += "
    Page: " while(logcount > 0) @@ -44,6 +46,7 @@ var/limit = " LIMIT [logssperpage * page], [logssperpage]" var/datum/DBQuery/query_search_admin_logs = SSdbcore.NewQuery("SELECT datetime, round_id, adminckey, operation, target, log FROM [format_table_name("admin_log")][search] ORDER BY datetime DESC[limit]") if(!query_search_admin_logs.warn_execute()) + qdel(query_search_admin_logs) return while(query_search_admin_logs.NextRow()) var/datetime = query_search_admin_logs.item[1] @@ -53,19 +56,23 @@ target = query_search_admin_logs.item[5] var/log = query_search_admin_logs.item[6] output += "

    [datetime] | Round ID [round_id] | Admin [admin_ckey] | Operation [operation] on [target]
    [log]


    " + qdel(query_search_admin_logs) if(action == 2) output += "

    Admin ckeys with invalid ranks

    " var/datum/DBQuery/query_check_admin_errors = SSdbcore.NewQuery("SELECT ckey, [format_table_name("admin")].rank FROM [format_table_name("admin")] LEFT JOIN [format_table_name("admin_ranks")] ON [format_table_name("admin_ranks")].rank = [format_table_name("admin")].rank WHERE [format_table_name("admin_ranks")].rank IS NULL") if(!query_check_admin_errors.warn_execute()) + qdel(query_check_admin_errors) return while(query_check_admin_errors.NextRow()) var/admin_ckey = query_check_admin_errors.item[1] var/admin_rank = query_check_admin_errors.item[2] - output += "[admin_ckey] has non-existant rank [admin_rank] | \[Change Rank\] | \[Remove\]" + output += "[admin_ckey] has non-existent rank [admin_rank] | \[Change Rank\] | \[Remove\]" output += "
    " + qdel(query_check_admin_errors) output += "

    Unused ranks

    " var/datum/DBQuery/query_check_unused_rank = SSdbcore.NewQuery("SELECT [format_table_name("admin_ranks")].rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")] LEFT JOIN [format_table_name("admin")] ON [format_table_name("admin")].rank = [format_table_name("admin_ranks")].rank WHERE [format_table_name("admin")].rank IS NULL") if(!query_check_unused_rank.warn_execute()) + qdel(query_check_unused_rank) return while(query_check_unused_rank.NextRow()) var/admin_rank = query_check_unused_rank.item[1] @@ -74,6 +81,7 @@
    Denied: [rights2text(text2num(query_check_unused_rank.item[3])," ", "-")]
    Allowed to edit: [rights2text(text2num(query_check_unused_rank.item[4])," ", "*")]
    "} + qdel(query_check_unused_rank) else if(!action) output += {" Permissions Panel @@ -108,6 +116,8 @@ output += "[rights2text(D.rank.can_edit_rights," ", "*")]" output += "" output += "
    Search:
    " + if(QDELETED(usr)) + return usr << browse("[jointext(output, "")]","window=editrights;size=1000x650") /datum/admins/proc/edit_rights_topic(list/href_list) @@ -153,6 +163,8 @@ admin_ckey = sanitizeSQL(admin_ckey) else use_db = FALSE + if(QDELETED(usr)) + return if(task != "add") D = GLOB.admin_datums[admin_ckey] if(!D) @@ -198,16 +210,23 @@ //if an admin exists without a datum they won't be caught by the above var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE ckey = '[.]'") if(!query_admin_in_db.warn_execute()) + qdel(query_admin_in_db) return FALSE if(query_admin_in_db.NextRow()) + qdel(query_admin_in_db) to_chat(usr, "[.] already listed in admin database. Check the Management tab if they don't appear in the list of admins.") return FALSE + qdel(query_admin_in_db) var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')") if(!query_add_admin.warn_execute()) + qdel(query_add_admin) return FALSE + qdel(query_add_admin) var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add admin', '[.]', 'New admin added: [.]')") if(!query_add_admin_log.warn_execute()) + qdel(query_add_admin_log) return FALSE + qdel(query_add_admin_log) /datum/admins/proc/remove_admin(admin_ckey, use_db, datum/admins/D) if(alert("Are you sure you want to remove [admin_ckey]?","Confirm Removal","Do it","Cancel") == "Do it") @@ -215,16 +234,22 @@ GLOB.deadmins -= admin_ckey if(D) D.disassociate() + var/m1 = "[key_name_admin(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]" + var/m2 = "[key_name(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]" if(use_db) var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin")] WHERE ckey = '[admin_ckey]'") if(!query_add_rank.warn_execute()) + qdel(query_add_rank) return + qdel(query_add_rank) var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove admin', '[admin_ckey]', 'Admin removed: [admin_ckey]')") if(!query_add_rank_log.warn_execute()) + qdel(query_add_rank_log) return + qdel(query_add_rank_log) sync_lastadminrank(admin_ckey) - message_admins("[key_name_admin(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]") - log_admin("[key_name(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]") + message_admins(m1) + log_admin(m2) /datum/admins/proc/force_readmin(admin_ckey, datum/admins/D) if(!D || !D.deadmined) @@ -260,35 +285,50 @@ else R = new(new_rank) //blank new admin_rank GLOB.admin_ranks += R + var/m1 = "[key_name_admin(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]" + var/m2 = "[key_name(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]" if(use_db) new_rank = sanitizeSQL(new_rank) //if a player was tempminned before having a permanent change made to their rank they won't yet be in the db var/old_rank var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT rank FROM [format_table_name("admin")] WHERE ckey = '[admin_ckey]'") if(!query_admin_in_db.warn_execute()) + qdel(query_admin_in_db) return if(!query_admin_in_db.NextRow()) add_admin(admin_ckey, TRUE) old_rank = "NEW ADMIN" else old_rank = query_admin_in_db.item[1] + qdel(query_admin_in_db) //similarly if a temp rank is created it won't be in the db if someone is permanently changed to it var/datum/DBQuery/query_rank_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin_ranks")] WHERE rank = '[new_rank]'") if(!query_rank_in_db.warn_execute()) + qdel(query_rank_in_db) return if(!query_rank_in_db.NextRow()) + QDEL_NULL(query_rank_in_db) var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_ranks")] (rank, flags, exclude_flags, can_edit_flags) VALUES ('[new_rank]', '0', '0', '0')") if(!query_add_rank.warn_execute()) + qdel(query_add_rank) return + qdel(query_add_rank) var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add rank', '[new_rank]', 'New rank added: [new_rank]')") if(!query_add_rank_log.warn_execute()) + qdel(query_add_rank_log) return + qdel(query_add_rank_log) + qdel(query_rank_in_db) var/datum/DBQuery/query_change_rank = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET rank = '[new_rank]' WHERE ckey = '[admin_ckey]'") if(!query_change_rank.warn_execute()) + qdel(query_change_rank) return + qdel(query_change_rank) var/datum/DBQuery/query_change_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change admin rank', '[admin_ckey]', 'Rank of [admin_ckey] changed from [old_rank] to [new_rank]')") if(!query_change_rank_log.warn_execute()) + qdel(query_change_rank_log) return + qdel(query_change_rank_log) if(D) //they were previously an admin D.disassociate() //existing admin needs to be disassociated D.rank = R //set the admin_rank as our rank @@ -296,8 +336,8 @@ D.associate(C) else D = new(R, admin_ckey, TRUE) //new admin - message_admins("[key_name_admin(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]") - log_admin("[key_name(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]") + message_admins(m1) + log_admin(m2) /datum/admins/proc/change_admin_flags(admin_ckey, use_db, datum/admins/D, legacy_only) var/new_flags = input_bitfield(usr, "Include permission flags
    [use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.include_rights, 350, 590, allowed_edit_list = usr.client.holder.rank.can_edit_rights) @@ -309,23 +349,31 @@ var/new_can_edit_flags = input_bitfield(usr, "Editable permission flags
    These are the flags this rank is allowed to edit if they have access to the permissions panel.
    They will be unable to modify admins to a rank that has a flag not included here.
    [use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.can_edit_rights, 350, 710, allowed_edit_list = usr.client.holder.rank.can_edit_rights) if(isnull(new_can_edit_flags)) return + var/m1 = "[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]" + var/m2 = "[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]" if(use_db || legacy_only) var/old_flags var/old_exclude_flags var/old_can_edit_flags var/datum/DBQuery/query_get_rank_flags = SSdbcore.NewQuery("SELECT flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")] WHERE rank = '[D.rank.name]'") if(!query_get_rank_flags.warn_execute()) + qdel(query_get_rank_flags) return if(query_get_rank_flags.NextRow()) old_flags = text2num(query_get_rank_flags.item[1]) old_exclude_flags = text2num(query_get_rank_flags.item[2]) old_can_edit_flags = text2num(query_get_rank_flags.item[3]) + qdel(query_get_rank_flags) var/datum/DBQuery/query_change_rank_flags = SSdbcore.NewQuery("UPDATE [format_table_name("admin_ranks")] SET flags = '[new_flags]', exclude_flags = '[new_exclude_flags]', can_edit_flags = '[new_can_edit_flags]' WHERE rank = '[D.rank.name]'") if(!query_change_rank_flags.warn_execute()) + qdel(query_change_rank_flags) return + qdel(query_change_rank_flags) var/datum/DBQuery/query_change_rank_flags_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change rank flags', '[D.rank.name]', 'Permissions of [D.rank.name] changed from[rights2text(old_flags," ")][rights2text(old_exclude_flags," ", "-")][rights2text(old_can_edit_flags," ", "*")] to[rights2text(new_flags," ")][rights2text(new_exclude_flags," ", "-")][rights2text(new_can_edit_flags," ", "*")]')") if(!query_change_rank_flags_log.warn_execute()) + qdel(query_change_rank_flags_log) return + qdel(query_change_rank_flags_log) for(var/datum/admin_rank/R in GLOB.admin_ranks) if(R.name != D.rank.name) continue @@ -356,8 +404,8 @@ D.rank.can_edit_rights = new_can_edit_flags var/client/C = GLOB.directory[admin_ckey] //find the client with the specified ckey (if they are logged in) D.associate(C) //link up with the client and add verbs - message_admins("[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]") - log_admin("[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]") + message_admins(m1) + log_admin(m2) /datum/admins/proc/remove_rank(admin_rank) if(!admin_rank) @@ -375,19 +423,28 @@ admin_rank = sanitizeSQL(admin_rank) var/datum/DBQuery/query_admins_with_rank = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE rank = '[admin_rank]'") if(!query_admins_with_rank.warn_execute()) + qdel(query_admins_with_rank) return if(query_admins_with_rank.NextRow()) + qdel(query_admins_with_rank) to_chat(usr, "Error: Rank deletion attempted while rank still used; Tell a coder, this shouldn't happen.") return + qdel(query_admins_with_rank) if(alert("Are you sure you want to remove [admin_rank]?","Confirm Removal","Do it","Cancel") == "Do it") + var/m1 = "[key_name_admin(usr)] removed rank [admin_rank] permanently" + var/m2 = "[key_name(usr)] removed rank [admin_rank] permanently" var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin_ranks")] WHERE rank = '[admin_rank]'") if(!query_add_rank.warn_execute()) + qdel(query_add_rank) return + qdel(query_add_rank) var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove rank', '[admin_rank]', 'Rank removed: [admin_rank]')") if(!query_add_rank_log.warn_execute()) + qdel(query_add_rank_log) return - message_admins("[key_name_admin(usr)] removed rank [admin_rank] permanently") - log_admin("[key_name(usr)] removed rank [admin_rank] permanently") + qdel(query_add_rank_log) + message_admins(m1) + log_admin(m2) /datum/admins/proc/sync_lastadminrank(admin_ckey, datum/admins/D) var/sqlrank = "Player" @@ -396,5 +453,7 @@ admin_ckey = sanitizeSQL(admin_ckey) var/datum/DBQuery/query_sync_lastadminrank = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET lastadminrank = '[sqlrank]' WHERE ckey = '[admin_ckey]'") if(!query_sync_lastadminrank.warn_execute()) + qdel(query_sync_lastadminrank) return + qdel(query_sync_lastadminrank) to_chat(usr, "Sync of [admin_ckey] successful.") diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index a3f7823b58..95e040ebd5 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -7,7 +7,6 @@ dat +={" General Secrets

    - Show Job Debug
    Admin Log
    Mentor Log
    Show Admin List
    @@ -111,18 +110,6 @@ if("mentor_log") CitadelMentorLogSecret() - - if("list_job_debug") - var/dat = "Job Debug info.
    " - for(var/line in SSjob.job_debug) - dat += "[line]
    " - dat+= "*******

    " - for(var/datum/job/job in SSjob.occupations) - if(!job) - continue - dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions]
    " - usr << browse(dat, "window=jobdebug;size=600x500") - if("show_admins") var/dat = "Current admins:
    " if(GLOB.admin_datums) @@ -433,7 +420,7 @@ H.equip_to_slot_or_del(I, SLOT_W_UNIFORM) qdel(olduniform) if(droptype == "Yes") - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP else to_chat(H, "You're not kawaii enough for this.") diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index d4dd5951d2..7f2fa5b938 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -11,11 +11,16 @@ new_ckey = sanitizeSQL(new_ckey) var/datum/DBQuery/query_find_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'") if(!query_find_ckey.warn_execute()) + qdel(query_find_ckey) return if(!query_find_ckey.NextRow()) if(alert(usr, "[new_ckey] has not been seen before, are you sure you want to create a [type] for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") + qdel(query_find_ckey) return + qdel(query_find_ckey) target_ckey = new_ckey + if(QDELETED(usr)) + return if(target_ckey) target_ckey = sanitizeSQL(target_ckey) if(!admin_ckey) @@ -46,11 +51,14 @@ else return var/datum/DBQuery/query_create_message = SSdbcore.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, server_ip, server_port, round_id, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]','[secret]')") + var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]" + var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]" if(!query_create_message.warn_execute()) + qdel(query_create_message) return + qdel(query_create_message) if(logged) - log_admin_private("[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]") - var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]" + log_admin_private(pm) message_admins("[header]:
    [text]") admin_ticket_log(target_ckey, "[header]") admin_ticket_log(target_ckey, text) @@ -69,19 +77,25 @@ var/type var/target_ckey var/text + var/m1 = "[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]" + var/m2 = "[key_name_admin(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:
    [text]" var/datum/DBQuery/query_find_del_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_del_message.warn_execute()) + qdel(query_find_del_message) return if(query_find_del_message.NextRow()) type = query_find_del_message.item[1] target_ckey = query_find_del_message.item[2] text = query_find_del_message.item[4] + qdel(query_find_del_message) var/datum/DBQuery/query_del_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET deleted = 1 WHERE id = [message_id]") if(!query_del_message.warn_execute()) + qdel(query_del_message) return + qdel(query_del_message) if(logged) - log_admin_private("[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]") - message_admins("[key_name_admin(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:
    [text]") + log_admin_private(m1) + message_admins(m2) if(browse) browse_messages("[type]") else @@ -96,6 +110,7 @@ return var/datum/DBQuery/query_find_edit_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_edit_message.warn_execute()) + qdel(query_find_edit_message) return if(query_find_edit_message.NextRow()) var/type = query_find_edit_message.item[1] @@ -105,11 +120,13 @@ var/editor_ckey = sanitizeSQL(usr.ckey) var/new_text = input("Input new [type]", "New [type]", "[old_text]") as null|message if(!new_text) + qdel(query_find_edit_message) return new_text = sanitizeSQL(new_text) var/edit_text = sanitizeSQL("Edited by [editor_ckey] on [SQLtime()] from
    [old_text]
    to
    [new_text]
    ") var/datum/DBQuery/query_edit_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id] AND deleted = 0") if(!query_edit_message.warn_execute()) + qdel(query_find_edit_message) return log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]") message_admins("[key_name_admin(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from
    [old_text]
    to
    [new_text]") @@ -117,6 +134,7 @@ browse_messages("[type]") else browse_messages(target_ckey = target_ckey, agegate = TRUE) + qdel(query_find_edit_message) /proc/toggle_message_secrecy(message_id) if(!SSdbcore.Connect()) @@ -125,22 +143,30 @@ message_id = text2num(message_id) if(!message_id) return + var/editor_ckey = usr.ckey + var/kn = key_name(usr) + var/kna = key_name_admin(usr) var/datum/DBQuery/query_find_message_secret = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_message_secret.warn_execute()) + qdel(query_find_message_secret) return if(query_find_message_secret.NextRow()) var/type = query_find_message_secret.item[1] var/target_ckey = query_find_message_secret.item[2] var/admin_ckey = query_find_message_secret.item[3] var/secret = text2num(query_find_message_secret.item[4]) - var/editor_ckey = sanitizeSQL(usr.ckey) + editor_ckey = sanitizeSQL(editor_ckey) var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_ckey] on [SQLtime()]
    " var/datum/DBQuery/query_message_secret = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") if(!query_message_secret.warn_execute()) + qdel(query_find_message_secret) + qdel(query_message_secret) return - log_admin_private("[key_name(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") - message_admins("[key_name_admin(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") + qdel(query_message_secret) + log_admin_private("[kn] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") + message_admins("[kna] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") browse_messages(target_ckey = target_ckey, agegate = TRUE) + qdel(query_find_message_secret) /proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE) if(!SSdbcore.Connect()) @@ -173,8 +199,11 @@ output += ruler var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0") if(!query_get_type_messages.warn_execute()) + qdel(query_get_type_messages) return while(query_get_type_messages.NextRow()) + if(QDELETED(usr)) + return var/id = query_get_type_messages.item[1] var/t_ckey = query_get_type_messages.item[2] if(type == "watchlist entry" && filter && !(t_ckey in GLOB.directory)) @@ -193,16 +222,20 @@ if(editor_ckey) output += " Last edit by [editor_ckey] (Click here to see edit log)" output += "
    [text]
    " + qdel(query_get_type_messages) if(target_ckey) target_ckey = sanitizeSQL(target_ckey) var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor, DATEDIFF(NOW(), timestamp) AS `age` FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 ORDER BY timestamp DESC") if(!query_get_messages.warn_execute()) + qdel(query_get_messages) return var/list/messagedata = list() var/list/watchdata = list() var/list/notedata = list() var/skipped = 0 while(query_get_messages.NextRow()) + if(QDELETED(usr)) + return type = query_get_messages.item[1] if(type == "memo") continue @@ -253,6 +286,7 @@ watchdata += data if("note") notedata += data + qdel(query_get_messages) output += "

    [target_ckey]

    " if(!linkless) output += "\[Add note\]" @@ -296,16 +330,20 @@ search = "^[index]" var/datum/DBQuery/query_list_messages = SSdbcore.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' AND deleted = 0 ORDER BY targetckey") if(!query_list_messages.warn_execute()) + qdel(query_list_messages) return while(query_list_messages.NextRow()) + if(QDELETED(usr)) + return index_ckey = query_list_messages.item[1] output += "[index_ckey]
    " + qdel(query_list_messages) else if(!type && !target_ckey && !index) output += "
    \[Add message\]\[Add watchlist entry\]\[Add note\]
    " output += ruler usr << browse({"[jointext(output, "")]"}, "window=browse_messages;size=900x500") -proc/get_message_output(type, target_ckey) +/proc/get_message_output(type, target_ckey) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") return @@ -319,6 +357,7 @@ proc/get_message_output(type, target_ckey) query += " AND targetckey = '[target_ckey]'" var/datum/DBQuery/query_get_message_output = SSdbcore.NewQuery(query) if(!query_get_message_output.warn_execute()) + qdel(query_get_message_output) return while(query_get_message_output.NextRow()) var/message_id = query_get_message_output.item[1] @@ -332,7 +371,10 @@ proc/get_message_output(type, target_ckey) output += "
    [text]
    " var/datum/DBQuery/query_message_read = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]") if(!query_message_read.warn_execute()) + qdel(query_get_message_output) + qdel(query_message_read) return + qdel(query_message_read) if("watchlist entry") message_admins("Notice: [key_name_admin(target_ckey)] has been on the watchlist since [timestamp] and has just connected - Reason: [text]") send2irc_adminless_only("Watchlist", "[key_name(target_ckey)] is on the watchlist and has just connected - Reason: [text]") @@ -341,6 +383,7 @@ proc/get_message_output(type, target_ckey) if(editor_ckey) output += "
    Last edit by [editor_ckey] (Click here to see edit log)" output += "
    [text]
    " + qdel(query_get_message_output) return output #define NOTESFILE "data/player_notes.sav" @@ -365,9 +408,11 @@ proc/get_message_output(type, target_ckey) var/admin_ckey = note.group[3] var/datum/DBQuery/query_convert_time = SSdbcore.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')") if(!query_convert_time.Execute()) + qdel(query_convert_time) return if(query_convert_time.NextRow()) timestamp = query_convert_time.item[1] + qdel(query_convert_time) if(ckey && notetext && timestamp && admin_ckey && server) create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0) notesfile.cd = "/" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d5349c3e2f..7cba469019 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -74,7 +74,7 @@ message_admins("[key_name_admin(usr)] tried to create traitors. Unfortunately, there were no candidates available.") log_admin("[key_name(usr)] failed to create traitors.") if("changelings") - if(src.makeChanglings()) + if(src.makeChangelings()) message_admins("[key_name(usr)] created changelings.") log_admin("[key_name(usr)] created changelings.") else @@ -447,6 +447,8 @@ if("Yes") delmob = 1 + log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") + message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") switch(href_list["simplemake"]) if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob ) @@ -499,8 +501,6 @@ M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob ) if("shade") M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob ) - log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") - message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") /////////////////////////////////////new ban stuff @@ -1200,10 +1200,13 @@ var/message_id = sanitizeSQL("[href_list["messageedits"]]") var/datum/DBQuery/query_get_message_edits = SSdbcore.NewQuery("SELECT edits FROM [format_table_name("messages")] WHERE id = '[message_id]'") if(!query_get_message_edits.warn_execute()) + qdel(query_get_message_edits) return if(query_get_message_edits.NextRow()) var/edit_log = query_get_message_edits.item[1] - usr << browse(edit_log,"window=noteedits") + if(!QDELETED(usr)) + usr << browse(edit_log,"window=noteedits") + qdel(query_get_message_edits) else if(href_list["newban"]) if(!check_rights(R_BAN)) @@ -1822,18 +1825,7 @@ usr.client.smite(H) else if(href_list["CentComReply"]) - var/mob/living/carbon/human/H = locate(href_list["CentComReply"]) in GLOB.mob_list - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - if(!istype(H.ears, /obj/item/radio/headset)) - to_chat(usr, "The person you are trying to contact is not wearing a headset.") - return - - message_admins("[src.owner] has started answering [key_name(H)]'s CentCom request.") - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from CentCom", "") - if(!input) - message_admins("[src.owner] decided not to answer [key_name(H)]'s CentCom request.") + if(!check_rights(R_ADMIN)) return var/mob/M = locate(href_list["CentComReply"]) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index f385cdc1bd..bef39c29ca 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -256,7 +256,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/MessageNoRecipient(msg) var/ref_src = "[REF(src)]" //Message to be sent to all admins - var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" + var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" AddInteraction("[LinkedReplyName(ref_src)]: [msg]") @@ -268,7 +268,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) to_chat(X, admin_msg) //show it to the person adminhelping too - to_chat(initiator, "PM to-Admins: [msg]") + to_chat(initiator, "PM to-Admins: [msg]") //Reopen a closed ticket /datum/admin_help/proc/Reopen() diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 179595866f..4d72f0a8e2 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -145,15 +145,15 @@ var/keywordparsedmsg = keywords_lookup(msg) if(irc) - to_chat(src, "PM to-Admins: [rawmsg]") + to_chat(src, "PM to-Admins: [rawmsg]") var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]") ircreplyamount-- send2irc("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg) else if(recipient.holder) if(holder) //both are admins - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") //omg this is dumb, just fill in both their tickets var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" @@ -162,12 +162,12 @@ admin_ticket_log(recipient, interaction_message) else //recipient is an admin but sender is not - var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" + var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" admin_ticket_log(src, replymsg) to_chat(recipient, replymsg) - to_chat(src, "PM to-Admins: [msg]") + to_chat(src, "PM to-Admins: [msg]") - //play the recieving admin the adminhelp sound (if they have them enabled) + //play the receiving admin the adminhelp sound (if they have them enabled) if(recipient.prefs.toggles & SOUND_ADMINHELP) SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) @@ -177,9 +177,9 @@ new /datum/admin_help(msg, recipient, TRUE) to_chat(recipient, "-- Administrator private message --") - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") to_chat(recipient, "Click on the administrator's name to reply.") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 82bbc27abc..bf39288511 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -12,10 +12,10 @@ log_talk(mob,"[key_name(src)] : [msg]",LOGASAY) msg = keywords_lookup(msg) if(check_rights(R_ADMIN,0)) - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" + msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" to_chat(GLOB.admins, msg) else - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" + msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" to_chat(GLOB.admins, msg) SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 4d1de50e47..a3b7e4247c 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -1,7 +1,9 @@ /client/proc/manipulate_organs(mob/living/carbon/C in world) set name = "Manipulate Organs" set category = "Debug" - var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel") + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel") + if (!operation) + return var/list/organs = list() switch(operation) @@ -10,7 +12,9 @@ var/dat = replacetext("[path]", "/obj/item/organ/", ":") organs[dat] = path - var/obj/item/organ/organ = input("Select organ type:", "Organ Manipulation", null) in organs + var/obj/item/organ/organ = input("Select organ type:", "Organ Manipulation", null) as null|anything in organs + if(!organ) + return organ = organs[organ] organ = new organ organ.Insert(C) @@ -22,7 +26,9 @@ var/dat = replacetext("[path]", "/obj/item/implant/", ":") organs[dat] = path - var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) in organs + var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) as null|anything in organs + if(!organ) + return organ = organs[organ] organ = new organ organ.implant(C) @@ -38,7 +44,9 @@ var/obj/item/implant/I = X organs["[I.name] ([I.type])"] = I - var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) in organs + var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) as null|anything in organs + if(!organ) + return organ = organs[organ] if(!organ) return diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index daa1ce473a..190ddd7e63 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -76,7 +76,7 @@ return 0 -/datum/admins/proc/makeChanglings() +/datum/admins/proc/makeChangelings() var/datum/game_mode/changeling/temp = new if(CONFIG_GET(flag/protect_roles_from_antagonist)) @@ -95,11 +95,11 @@ candidates += applicant if(candidates.len) - var/numChanglings = min(candidates.len, 3) + var/numChangelings = min(candidates.len, 3) - for(var/i = 0, i[ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" + msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e8afe623ee..0184c4b34f 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1356,8 +1356,9 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits alert("ERROR: Incorrect / improper path given.") return //send the pod - target.Stun(10)//takes 0.53 seconds for CentCom pod to land - new /obj/effect/DPtarget(get_turf(target), delivery, POD_CENTCOM, target) + if(iscarbon(target)) + target.Stun(10)//takes 0.53 seconds for CentCom pod to land + new /obj/effect/DPtarget(get_turf(target), delivery, POD_CENTCOM) var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]." message_admins(msg) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 1e7d3303d6..50281d54b4 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/is_banned(mob/M) if(!M) return FALSE - . = (jobban_isbanned(M, ROLE_SYNDICATE) || (job_rank && jobban_isbanned(M,job_rank))) + . = (jobban_isbanned(M, ROLE_SYNDICATE) || QDELETED(M) || (job_rank && (jobban_isbanned(M,job_rank) || QDELETED(M)))) /datum/antagonist/proc/replace_banned_player() set waitfor = FALSE @@ -110,12 +110,12 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/give_antag_moodies() if(!antag_moodlet) return - owner.current.SendSignal(COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet) + SEND_SIGNAL(owner.current, COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet) /datum/antagonist/proc/clear_antag_moodies() if(!antag_moodlet) return - owner.current.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet") + SEND_SIGNAL(owner.current, COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet") //Returns the team antagonist belongs to if any. /datum/antagonist/proc/get_team() diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 0a000c4bf0..ca87b94d5b 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -58,6 +58,8 @@ return var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) if(LAZYLEN(candidates)) + if(QDELETED(src)) + return if(used) to_chat(H, "You already used this contract!") return @@ -121,7 +123,7 @@ to_chat(user, "You activate [src] and wait for confirmation.") var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) if(LAZYLEN(nuke_candidates)) - if(!(check_usability(user))) + if(QDELETED(src) || !check_usability(user)) return used = TRUE var/mob/dead/observer/G = pick(nuke_candidates) @@ -235,7 +237,7 @@ return var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src) if(LAZYLEN(candidates)) - if(used) + if(used || QDELETED(src)) return used = TRUE var/mob/dead/observer/C = pick(candidates) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index e7cdb4d00c..f19521e821 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -30,9 +30,9 @@ var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90) /obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop() - flags_1 ^= NODROP_1 + item_flags ^= NODROP if(ismob(loc)) - to_chat(loc, "Your vest is now [flags_1 & NODROP_1 ? "locked" : "unlocked"].") + to_chat(loc, "Your vest is now [item_flags & NODROP ? "locked" : "unlocked"].") /obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() switch(mode) @@ -589,9 +589,10 @@ Congratulations! You are now trained for invasive xenobiology research!"} righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' breakouttime = 450 trashtype = /obj/item/restraints/handcuffs/energy/used + flags_1 = NONE /obj/item/restraints/handcuffs/energy/used - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/restraints/handcuffs/energy/used/dropped(mob/user) user.visible_message("[user]'s [name] breaks in a discharge of energy!", \ diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm index 8b8851ec18..e2b881d147 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm @@ -17,7 +17,7 @@ var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H if(V) console.AddVest(V) - V.flags_1 |= NODROP_1 + V.item_flags |= NODROP var/obj/item/storage/backpack/B = locate() in H if(B) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index 6bc8fc0d5d..a14b667069 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -75,7 +75,7 @@ dat+="
    " dat += "Select Agent Vest Disguise
    " - dat += "[vest.flags_1 & NODROP_1 ? "Unlock" : "Lock"] Vest
    " + dat += "[vest.item_flags & NODROP ? "Unlock" : "Lock"] Vest
    " else dat += "NO AGENT VEST DETECTED" var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm index 9d31852d28..3483c3a557 100644 --- a/code/modules/antagonists/blob/blob/overmind.dm +++ b/code/modules/antagonists/blob/blob/overmind.dm @@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) else L.fully_heal() - for(var/V in GLOB.sortedAreas) + for(var/V in GLOB.the_station_areas) var/area/A = V if(!A.blob_allowed) continue diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index a42ae6ef4f..ab6dd3607d 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -451,7 +451,7 @@ /datum/antagonist/changeling/proc/update_changeling_icons_added() var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] hud.join_hud(owner.current) - set_antag_hud(owner.current, "changling") + set_antag_hud(owner.current, "changeling") /datum/antagonist/changeling/proc/update_changeling_icons_removed() var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 199bc6636b..a8bec72771 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -112,10 +112,3 @@ target.death(0) target.Drain() return TRUE - - - -//Absorbs the target DNA. -//datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user) - -//datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user) diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm index f48464700f..5ec5440a2b 100644 --- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm +++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm @@ -1,4 +1,4 @@ -//Augmented Eyesight: Gives you x-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is. +//Augmented Eyesight: Gives you X-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is. //Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though. /obj/effect/proc_holder/changeling/augmented_eyesight @@ -41,7 +41,7 @@ return 1 -/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability +/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of X-ray vision and flash protection when the user refunds this ability var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) if(E) if (active) diff --git a/code/modules/antagonists/changeling/powers/digitalcamo.dm b/code/modules/antagonists/changeling/powers/digitalcamo.dm index afb4e0bef7..68a1fa4add 100644 --- a/code/modules/antagonists/changeling/powers/digitalcamo.dm +++ b/code/modules/antagonists/changeling/powers/digitalcamo.dm @@ -1,6 +1,6 @@ /obj/effect/proc_holder/changeling/digitalcamo name = "Digital Camouflage" - desc = "By evolving the ability to distort our form and proprotions, we defeat common altgorithms used to detect lifeforms on cameras." + desc = "By evolving the ability to distort our form and proportions, we defeat common algorithms used to detect lifeforms on cameras." helptext = "We cannot be tracked by camera or seen by AI units while using this skill. However, humans looking at us will find us... uncanny." dna_cost = 1 diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index dbc8446fca..08fe6bd0ce 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -29,7 +29,7 @@ /obj/effect/proc_holder/changeling/weapon/proc/check_weapon(mob/user, obj/item/hand_item) if(istype(hand_item, weapon_type)) - user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL_1 will delete the item + user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL will delete the item if(!silent) playsound(user, 'sound/effects/blobattack.ogg', 30, 1) user.visible_message("With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "We search for the scent of any nearby changelings.") + changeling.chem_recharge_slowdown += 0.5 + user.apply_status_effect(/datum/status_effect/agent_pinpointer/changeling) + else + to_chat(user, "We stop searching for now.") + changeling.chem_recharge_slowdown -= 0.5 + user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling) + + receptors_active = !receptors_active + +//Modified IA pinpointer - Points to the NEAREST changeling, but will only get you within a few tiles of the target. +//You'll still have to rely on intuition and observation to make the identification. Lings can 'hide' in public places. +/datum/status_effect/agent_pinpointer/changeling + alert_type = /obj/screen/alert/status_effect/agent_pinpointer/changeling + minimum_range = CHANGELING_PHEROMONE_MIN_DISTANCE + tick_interval = CHANGELING_PHEROMONE_PING_TIME + range_fuzz_factor = 0 + +/datum/status_effect/agent_pinpointer/changeling/scan_for_target() + var/turf/my_loc = get_turf(owner) + + var/list/mob/living/carbon/changelings = list() + + for(var/mob/living/carbon/C in GLOB.alive_mob_list) + if(C != owner && C.mind) + var/datum/antagonist/changeling/antag_datum = C.mind.has_antag_datum(/datum/antagonist/changeling) + if(istype(antag_datum)) + var/their_loc = get_turf(C) + var/distance = get_dist_euclidian(my_loc, their_loc) + if (distance < CHANGELING_PHEROMONE_MAX_DISTANCE) + changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2) + + if(changelings.len) + scan_target = pickweight(changelings) //Point at a 'random' changeling, biasing heavily towards closer ones. + else + scan_target = null + + +/obj/screen/alert/status_effect/agent_pinpointer/changeling + name = "Pheromone Scent" + desc = "The nose always knows." \ No newline at end of file diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 1d0a4cf143..a801c87ac2 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -134,7 +134,7 @@ return 1 /obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", object="falso armblade sting") + add_logs(user, target, "stung", object="false armblade sting") var/obj/item/held = target.get_active_held_item() if(held && !target.dropItemToGround(held)) diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 2929b5743e..1e2b22cdae 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -8,7 +8,7 @@ /obj/item/clothing/glasses/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/glasses/changeling/attack_hand(mob/user) @@ -20,7 +20,7 @@ /obj/item/clothing/under/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/under/changeling/attack_hand(mob/user) @@ -32,7 +32,7 @@ /obj/item/clothing/suit/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP allowed = list(/obj/item/changeling) //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -45,7 +45,7 @@ /obj/item/clothing/head/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/head/changeling/attack_hand(mob/user) @@ -57,7 +57,7 @@ /obj/item/clothing/shoes/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/shoes/changeling/attack_hand(mob/user) @@ -69,7 +69,7 @@ /obj/item/clothing/gloves/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/gloves/changeling/attack_hand(mob/user) @@ -81,7 +81,7 @@ /obj/item/clothing/mask/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/mask/changeling/attack_hand(mob/user) @@ -93,7 +93,7 @@ /obj/item/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP slot_flags = ALL allowed = list(/obj/item/changeling) diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm index b32345fa69..bd986bac25 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm @@ -254,8 +254,8 @@ var/list/repair_values = list() if(!fabricator.fabricator_repair_checks(repair_values, src, user)) return - user.visible_message("[user]'s [fabricator.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \ - "You start repairin[src == user ? "g yourself" : "g [src]"]...") + user.visible_message("[user]'s [fabricator.name] starts covering [src == user ? "[user.p_them()]" : "[src]"] in glowing orange energy...", \ + "You start repairing [src == user ? "yourself" : "[src]"]...") fabricator.repairing = src while(fabricator && user && src) if(!do_after(user, repair_values["healing_for_cycle"] * fabricator.speed_multiplier, target = src, \ @@ -283,7 +283,7 @@ if(health == maxHealth) //if we're at maximum health, replace the turf under us return FALSE else if(fabricator_heal(user, fabricator) && user) - user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ + user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health.") //Same with clockwork mobs. @@ -292,7 +292,7 @@ if(health == maxHealth) //if we're at maximum health, replace the turf under us return FALSE else if(fabricator_heal(user, fabricator) && user) - user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ + user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [health]/[maxHealth] health.") //Cogscarabs get special interaction because they're drones and have innate self-heals/revives. @@ -304,13 +304,13 @@ if(health == maxHealth) return FALSE else if(!(flags_1 & GODMODE)) - user.visible_message("[user]'s [fabricator.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \ - "You start repairin[src == user ? "g yourself" : "g [src]"]...") + user.visible_message("[user]'s [fabricator.name] starts covering [src == user ? "[user.p_them()]" : "[src]"] in glowing orange energy...", \ + "You start repairing [src == user ? "yourself" : "[src]"]...") fabricator.repairing = src if(do_after(user, (maxHealth - health)*2, target=src)) adjustHealth(-maxHealth) - user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ - "You finish repairin[src == user ? "g yourself" : "g [src]"].") + user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \ + "You finish repairing [src == user ? "yourself" : "[src]"].") if(fabricator) fabricator.repairing = null diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index d39656c8d8..aaeb871e5d 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -67,7 +67,7 @@ name = "replicant manacles" desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid." icon_state = "brass_manacles" - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/restraints/handcuffs/clockwork/dropped(mob/user) user.visible_message("[user]'s [name] come apart at the seams!", \ diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index d32eeee84b..8ed8edae8a 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -106,13 +106,13 @@ if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user)) if(!iscultist(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") - user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The curiass flickers off your body, leaving only nausea!") + user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The cuirass flickers off your body, leaving only nausea!") if(iscarbon(user)) var/mob/living/carbon/C = user C.vomit(20) else to_chat(user, "\"I think this armor is too hot for you to handle.\"") - to_chat(user, "The curiass emits a burst of flame as you scramble to get it off!") + to_chat(user, "The cuirass emits a burst of flame as you scramble to get it off!") user.emote("scream") user.apply_damage(15, BURN, BODY_ZONE_CHEST) user.adjust_fire_stacks(2) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index c464656150..1cdc05a07a 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -278,7 +278,7 @@ dat += "Items
    " dat += "Slab: A clockwork slab, a Servant's most important tool. You're holding one! Keep it safe and hidden.
    " dat += "Visor: A judicial visor, which is a pair of glasses that can smite an area for a brief stun and delayed explosion.
    " - dat += "Wraith Specs: Wraith spectacles, which provide true sight (x-ray, night vision) but damage the wearer's eyes.
    " + dat += "Wraith Specs: Wraith spectacles, which provide true sight (X-ray, night vision) but damage the wearer's eyes.
    " dat += "Spear: A Ratvarian spear, which is a very powerful melee weapon that produces Vitality.
    " dat += "Fabricator: A replica fabricator, which converts objects into clockwork versions.

    " dat += "Constructs
    " diff --git a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm index 4e4aff5569..0ce70336fe 100644 --- a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm +++ b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm @@ -9,7 +9,7 @@ Siphons 5 W of power per second while in an APC." icon_state = "wall_gear" w_class = WEIGHT_CLASS_TINY - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/obj/machinery/power/apc/apc /obj/item/clockwork/integration_cog/Initialize() diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm index c89a04c932..741b251a4f 100644 --- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm +++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm @@ -8,7 +8,7 @@ righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' w_class = WEIGHT_CLASS_NORMAL force = 5 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/speed_multiplier = 1 //The speed ratio the fabricator operates at var/uses_power = TRUE var/repairing = null //what we're currently repairing, if anything diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm index dab12dc304..6fda25a1b5 100644 --- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm +++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm @@ -1,4 +1,4 @@ -//Wraith spectacles: Grants x-ray and night vision at the eventual cost of the wearer's sight if worn too long. Nar-Sian cultists are instantly blinded. +//Wraith spectacles: Grants X-ray and night vision at the eventual cost of the wearer's sight if worn too long. Nar-Sian cultists are instantly blinded. /obj/item/clothing/glasses/wraith_spectacles name = "antique spectacles" desc = "Unnerving glasses with opaque yellow lenses." diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm index ad4062598e..e78a6e4623 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm @@ -29,7 +29,7 @@ descname = "Trap, Stunning" name = "Sigil of Transgression" desc = "Wards a tile with a sigil, which will briefly stun the next non-Servant to cross it and apply Belligerent to them." - invocations = list("Divinity, smite...", "...those who tresspass here!") + invocations = list("Divinity, smite...", "...those who trespass here!") channel_time = 50 power_cost = 50 whispered = TRUE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 5459e4c45e..847b49c354 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -339,7 +339,8 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "disintegrate" item_state = null - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL + w_class = WEIGHT_CLASS_HUGE throwforce = 0 throw_range = 0 @@ -519,7 +520,7 @@ name = "shadow shackles" desc = "Shackles that bind the wrists with sinister magic." trashtype = /obj/item/restraints/handcuffs/energy/used - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user) user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \ @@ -541,7 +542,7 @@ var/obj/item/stack/sheet/candidate = target if(candidate.use(50)) uses-- - to_chat(user, "A dark cloud eminates from your hand and swirls around the metal, twisting it into a construct shell!") + to_chat(user, "A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!") new /obj/structure/constructshell(T) SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else @@ -552,12 +553,12 @@ if(candidate.use(quantity)) uses -- new /obj/item/stack/sheet/runed_metal(T,quantity) - to_chat(user, "A dark cloud eminates from you hand and swirls around the plasteel, transforming it into runed metal!") + to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!") SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/mob/living/silicon/robot)) var/mob/living/silicon/robot/candidate = target if(candidate.mmi) - user.visible_message("A dark cloud eminates from [user]'s hand and swirls around [candidate]!") + user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!") playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, 1) var/prev_color = candidate.color candidate.color = "black" @@ -580,7 +581,7 @@ candidate.color = prev_color else uses-- - to_chat(user, "A dark cloud eminates from you hand and swirls around [candidate] - twisting it into a construct shell!") + to_chat(user, "A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!") new /obj/structure/constructshell(T) SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/obj/machinery/door/airlock)) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index f8a3d84576..8ea391d2ca 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -95,7 +95,7 @@ else to_chat(mob, "You have a [item_name] in your [where].") if(where == "backpack") - mob.back.SendSignal(COMSIG_TRY_STORAGE_SHOW, mob) + SEND_SIGNAL(mob.back, COMSIG_TRY_STORAGE_SHOW, mob) return TRUE /datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) @@ -228,7 +228,7 @@ target_candidates += player.mind if(target_candidates.len == 0) - message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.") + message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.") for(var/mob/living/carbon/human/player in GLOB.player_list) if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD) target_candidates += player.mind @@ -248,7 +248,7 @@ objectives += sac_objective else - message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!") + message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!") //SUMMON OBJECTIVE diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 4e6a50bf6b..fd1d0d1c67 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -215,7 +215,7 @@ var/cooldown = 0 var/base_cooldown = 1200 -/datum/action/innate/cult/master/cultmark/New() +/datum/action/innate/cult/master/cultmark/New(Target) CM = new() CM.attached_action = src ..() @@ -299,7 +299,7 @@ name = "Mark a Blood Target for the Cult" desc = "Marks a target for the entire cult to track." -/datum/action/innate/cult/master/cultmark/IsAvailable() +/datum/action/innate/cult/master/cultmark/ghost/IsAvailable() if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current)) return TRUE else diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 7678cdcfb3..e1710dae96 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -64,7 +64,8 @@ /obj/item/melee/cultblade/ghost name = "eldritch sword" force = 19 //can't break normal airlocks - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NEEDS_PERMIT | NODROP | DROPDEL + flags_1 = NONE /obj/item/melee/cultblade/pickup(mob/living/user) ..() @@ -301,7 +302,7 @@ item_state = "cult_hoodalt" /obj/item/clothing/head/culthood/alt/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/suit/cultrobes/alt name = "cultist robes" @@ -310,7 +311,7 @@ item_state = "cultrobesalt" /obj/item/clothing/suit/cultrobes/alt/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/head/magus @@ -333,7 +334,7 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/head/helmet/space/hardsuit/cult - name = "nar-sien hardened helmet" + name = "\improper Nar-Sien hardened helmet" desc = "A heavily-armored helmet worn by warriors of the Nar-Sien cult. It can withstand hard vacuum." icon_state = "cult_helmet" item_state = "cult_helmet" @@ -342,7 +343,7 @@ actions_types = list() /obj/item/clothing/suit/space/hardsuit/cult - name = "nar-sien hardened armor" + name = "\improper Nar-Sien hardened armor" icon_state = "cult_armor" item_state = "cult_armor" desc = "A heavily-armored exosuit worn by warriors of the Nar-Sien cult. It can withstand hard vacuum." @@ -754,7 +755,7 @@ guns_left = 24 mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood fire_sound = 'sound/magic/wand_teleport.ogg' - flags_1 = NOBLUDGEON_1 | DROPDEL_1 + item_flags = NEEDS_PERMIT | NOBLUDGEON | DROPDEL /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood @@ -792,7 +793,7 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "disintegrate" item_state = null - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE throwforce = 0 throw_range = 0 diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 4f4cc6c751..df4715bc69 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -804,7 +804,7 @@ structure_check() searches for nearby cultist structures required for the invoca construct_invoke = FALSE color = RUNE_COLOR_DARKRED var/mob/living/affecting = null - var/ghost_limit = 4 + var/ghost_limit = 3 var/ghosts = 0 /obj/effect/rune/manifest/Initialize() @@ -834,10 +834,15 @@ structure_check() searches for nearby cultist structures required for the invoca if(A.map_name == "Space" || is_mining_level(T.z)) to_chat(user, "The veil is not weak enough here to manifest spirits, you must be on station!") return + if(ghosts >= ghost_limit) + to_chat(user, "You are sustaining too many ghosts to summon more!") + fail_invoke() + log_game("Manifest rune failed - too many summoned ghosts") + return list() notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) var/list/ghosts_on_rune = list() for(var/mob/dead/observer/O in T) - if(O.client && !jobban_isbanned(O, ROLE_CULTIST)) + if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O)) ghosts_on_rune += O if(!ghosts_on_rune.len) to_chat(user, "There are no spirits near [src]!") @@ -852,11 +857,6 @@ structure_check() searches for nearby cultist structures required for the invoca new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts new_human.see_invisible = SEE_INVISIBLE_OBSERVER ghosts++ - if(ghosts >= ghost_limit) - to_chat(user, "You are sustaining too many ghosts to summon more!") - fail_invoke() - log_game("Manifest rune failed - too many summoned ghosts") - return list() playsound(src, 'sound/magic/exit_blood.ogg', 50, 1) visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.") to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm index 7752d0449f..da51a5d698 100644 --- a/code/modules/antagonists/devil/imp/imp.dm +++ b/code/modules/antagonists/devil/imp/imp.dm @@ -36,7 +36,7 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT var/list/consumed_mobs = list() - var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ + var/playstyle_string = "You are an imp, a mischievous creature from hell. You are the lowest rank on the hellish totem pole \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ of intentionally harming a fellow devil." diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index 72b945600b..4e1175c13e 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -67,7 +67,7 @@ //Left hand items for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Braindead diff --git a/code/modules/antagonists/disease/disease_abilities.dm b/code/modules/antagonists/disease/disease_abilities.dm index 9a792749a0..07cd3030b1 100644 --- a/code/modules/antagonists/disease/disease_abilities.dm +++ b/code/modules/antagonists/disease/disease_abilities.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( stage_speed += initial(S.stage_speed) transmittable += initial(S.transmittable) threshold_block += "

    [initial(S.threshold_desc)]" - stat_block = "Resistance: [resistance]
    Stealth: [stealth]
    Stage Speed: [stage_speed]
    Transmittability: [transmittable]

    " + stat_block = "Resistance: [resistance]
    Stealth: [stealth]
    Stage Speed: [stage_speed]
    Transmissibility: [transmittable]

    " /datum/disease_ability/proc/CanBuy(mob/camera/disease/D) if(world.time < D.next_adaptation_time) @@ -130,14 +130,14 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( required_total_points = 0 start_with = TRUE short_desc = "Force the host you are following to cough, spreading your infection to those nearby." - long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmitability is low.
    Cooldown: 10 seconds" + long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
    Cooldown: 10 seconds" /datum/action/cooldown/disease_cough name = "Cough" icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "cough" - desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmitability is low.
    Cooldown: 10 seconds" + desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
    Cooldown: 10 seconds" cooldown_time = 100 /datum/action/cooldown/disease_cough/Trigger() @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( if(!L) return FALSE if(L.stat != CONSCIOUS) - to_chat(D, "Your host must be concious to cough.") + to_chat(D, "Your host must be conscious to cough.") return FALSE to_chat(D, "You force [L.real_name] to cough.") L.emote("cough") @@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( name = "Sneeze" icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "sneeze" - desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmitability is low.
    Cooldown: 20 seconds" + desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmissibility is low.
    Cooldown: 20 seconds" cooldown_time = 200 /datum/action/cooldown/disease_sneeze/Trigger() @@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( if(!L) return FALSE if(L.stat != CONSCIOUS) - to_chat(D, "Your host must be concious to sneeze.") + to_chat(D, "Your host must be conscious to sneeze.") return FALSE to_chat(D, "You force [L.real_name] to sneeze.") L.emote("sneeze") @@ -243,7 +243,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 2 required_total_points = 4 short_desc = "Cause victims to cough intermittently." - long_desc = "Cause victims to cough intermittently, spreading your infection if your transmitability is high." + long_desc = "Cause victims to cough intermittently, spreading your infection if your transmissibility is high." /datum/disease_ability/symptom/sneeze name = "Involuntary Sneezing" @@ -251,7 +251,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 2 required_total_points = 4 short_desc = "Cause victims to sneeze intermittently." - long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmitability and resistance, at the cost of stealth." + long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmissibility and resistance, at the cost of stealth." /datum/disease_ability/symptom/beard //I don't think I need to justify the fact that this is the best symptom @@ -277,7 +277,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to choke." - long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmittability." + long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmissibility." /datum/disease_ability/symptom/confusion @@ -295,7 +295,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to become eternally young." - long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmittability." + long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility." /datum/disease_ability/symptom/vomit @@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to vomit." - long_desc = "Cause victims to vomit. Slightly increases transmittability. Vomiting also also causes the victims to lose nutrition and removes some toxin damage." + long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage." /datum/disease_ability/symptom/voice_change @@ -367,7 +367,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to lose weight." - long_desc = "Cause victims to lose weight, and make it almost immpossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing." + long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing." /datum/disease_ability/symptom/metabolism_heal diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm index bf035e1f21..6908c5eebf 100644 --- a/code/modules/antagonists/disease/disease_mob.dm +++ b/code/modules/antagonists/disease/disease_mob.dm @@ -81,7 +81,7 @@ the new instance inside the host to be updated to the template's stats. /mob/camera/disease/Login() ..() if(freemove) - to_chat(src, "You have [round((freemove_end - world.time)/10)] seconds to select your first host. Click on a human to select your host.") + to_chat(src, "You have [DisplayTimeText(freemove_end - world.time)] to select your first host. Click on a human to select your host.") /mob/camera/disease/Stat() @@ -285,7 +285,7 @@ the new instance inside the host to be updated to the template's stats. ..() /mob/camera/disease/proc/adapt_cooldown() - to_chat(src, "You have altered your genetic structure. You will be unable to adapt again for [adaptation_cooldown/10] seconds.") + to_chat(src, "You have altered your genetic structure. You will be unable to adapt again for [DisplayTimeText(adaptation_cooldown)].") next_adaptation_time = world.time + adaptation_cooldown addtimer(CALLBACK(src, .proc/notify_adapt_ready), adaptation_cooldown) @@ -310,7 +310,7 @@ the new instance inside the host to be updated to the template's stats. Resistance: [DT.totalResistance()]
    \ Stealth: [DT.totalStealth()]
    \ Stage Speed: [DT.totalStageSpeed()]
    \ - Transmittability: [DT.totalTransmittable()]
    \ + Transmissibility: [DT.totalTransmittable()]
    \ Cure: [DT.cure_text]" dat += "

    Adaptations

    \ Points: [points] / [total_points]\ diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index 4e511d7fac..62da2df87f 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -59,7 +59,7 @@ W.access += get_all_centcom_access() W.assignment = "Highlander" W.registered_name = H.real_name - W.flags_1 |= NODROP_1 + W.item_flags |= NODROP W.update_label(H.real_name) H.equip_to_slot_or_del(W, SLOT_WEAR_ID) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index b3c5ae3b30..df04059f99 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \ Must be used within five minutes, or your benefactors will lose interest." var/declaring_war = FALSE - var/uplink_type = /obj/item/radio/uplink/nuclear + var/uplink_type = /obj/item/uplink/nuclear /obj/item/nuclear_challenge/attack_self(mob/living/user) if(!check_allowed(user)) @@ -88,7 +88,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) return TRUE /obj/item/nuclear_challenge/clownops - uplink_type = /obj/item/radio/uplink/clownop + uplink_type = /obj/item/uplink/clownop #undef CHALLENGE_TELECRYSTALS #undef CHALLENGE_TIME_LIMIT diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 1beb60f624..df9b35ee8b 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -588,7 +588,7 @@ This is here to make the tiles around the station mininuke change when it's arme CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck") var/turf/newturf = get_turf(src) if(newturf && lastlocation == newturf) - if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.00001)) + if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001)) var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control if(istype(loneop)) loneop.weight += 1 diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index 1cdc356559..d8dc709975 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -52,7 +52,7 @@ /obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode) if(isliving(loc)) var/mob/living/L = loc - to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") + to_chat(L, "Your [name] beeps as it reconfigures it's tracking algorithms.") playsound(L, 'sound/machines/triple_beep.ogg', 50, 1) mode = new_mode scan_for_target() @@ -65,7 +65,8 @@ /obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative. name = "cyborg syndicate pinpointer" desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." - flags_1 = NODROP_1 + item_flags = NODROP + flags_1 = NONE /obj/item/pinpointer/syndicate_cyborg/scan_for_target() target = null @@ -79,4 +80,3 @@ if(closest_operative) target = closest_operative ..() - diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index 3df9d1d9ca..db25adcda4 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -278,7 +278,7 @@ return NUKE_RESULT_WRONG_STATION else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) return NUKE_RESULT_WRONG_STATION_DEAD - else if ((disk_rescued || evacuation) && operatives_dead()) + else if ((disk_rescued && evacuation) && operatives_dead()) return NUKE_RESULT_CREW_WIN_SYNDIES_DEAD else if (disk_rescued) return NUKE_RESULT_CREW_WIN diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm index 4b867585ae..23bf472422 100644 --- a/code/modules/antagonists/official/official.dm +++ b/code/modules/antagonists/official/official.dm @@ -31,7 +31,7 @@ else if (!mission) var/datum/objective/missionobj = new missionobj.owner = owner - missionobj.explanation_text = "Conduct a routine preformance review of [station_name()] and its Captain." + missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain." missionobj.completed = 1 mission = missionobj objectives |= mission diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm index e17d1a23b4..5213c679ca 100644 --- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm +++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm @@ -44,6 +44,7 @@ tick_interval = PINPOINTER_PING_TIME alert_type = /obj/screen/alert/status_effect/agent_pinpointer var/minimum_range = PINPOINTER_MINIMUM_RANGE + var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE var/mob/scan_target = null /obj/screen/alert/status_effect/agent_pinpointer @@ -61,7 +62,7 @@ if(here.z != there.z) linked_alert.icon_state = "pinonnull" return - if(get_dist_euclidian(here,there)<=minimum_range + rand(0, PINPOINTER_EXTRA_RANDOM_RANGE)) + if(get_dist_euclidian(here,there)<=minimum_range + rand(0, range_fuzz_factor)) linked_alert.icon_state = "pinondirect" else linked_alert.setDir(get_dir(here, there)) @@ -228,14 +229,14 @@ /datum/antagonist/traitor/internal_affairs/forge_traitor_objectives() forge_iaa_objectives() - + var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive var/datum/objective/escape_objective = new objtype escape_objective.owner = owner add_objective(escape_objective) /datum/antagonist/traitor/internal_affairs/proc/greet_iaa() - var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") + var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "receiving bribes", "malpractice", "worship of prohibited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") to_chat(owner.current, "You are the [special_role].") if(syndicate) diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index f574412b4c..ff4f7276bc 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( if(!is_station_level(AA.z)) continue AA.obj_flags |= EMAGGED - to_chat(owner, "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.") + to_chat(owner, "All air alarm safeties on the station have been overridden. Air alarms may now use the Flood environmental mode.") owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) @@ -625,7 +625,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( to_chat(ranged_ability_user, "You can only animate machines!") return if(!target.can_be_overridden() || is_type_in_typecache(target, GLOB.blacklisted_malf_machines)) - to_chat(ranged_ability_user, "That machine can't be overriden!") + to_chat(ranged_ability_user, "That machine can't be overridden!") return ranged_ability_user.playsound_local(ranged_ability_user, 'sound/misc/interference.ogg', 50, 0) attached_action.adjust_uses(-1) @@ -806,7 +806,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( desc = "[initial(desc)] There are [uses] reactivations remaining." -//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them x-ray vision. +//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision. /datum/AI_Module/large/upgrade_cameras module_name = "Upgrade Camera Network" mod_pick_name = "upgradecam" diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm index 7e1effbaff..31e69b32c2 100644 --- a/code/modules/antagonists/valentines/valentine.dm +++ b/code/modules/antagonists/valentines/valentine.dm @@ -16,8 +16,17 @@ /datum/antagonist/valentine/on_gain() forge_objectives() + if(isliving(owner)) + var/mob/living/L = owner + L.apply_status_effect(STATUS_EFFECT_INLOVE, date) . = ..() +/datum/antagonist/valentine/on_removal() + . = ..() + if(isliving(owner)) + var/mob/living/L = owner + L.remove_status_effect(STATUS_EFFECT_INLOVE) + /datum/antagonist/valentine/greet() to_chat(owner, "You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.") diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 5afd1ca3c3..415d1318cb 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -109,6 +109,10 @@ move() eat() return + +/obj/singularity/wizard/mapped/admin_investigate_setup() + return + /////////////////////////////////////////Scrying/////////////////// /obj/item/scrying @@ -205,7 +209,7 @@ for(var/obj/item/I in H) H.dropItemToGround(I) - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire) H.equip_to_slot_or_del(new hat(H), SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), SLOT_W_UNIFORM) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 9a5f41baee..50bc4f54a4 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -9,7 +9,7 @@ desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power." w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_BELT - var/usability = 0 + var/usability = FALSE var/old_shard = FALSE var/spent = FALSE @@ -23,7 +23,7 @@ whatever spark it once held long extinguished." /obj/item/soulstone/anybody - usability = 1 + usability = TRUE /obj/item/soulstone/anybody/chaplain name = "mysterious old shard" @@ -63,8 +63,9 @@ if(!ishuman(M))//If target is not a human. return ..() if(iscultist(M)) - to_chat(user, "\"Come now, do not capture your bretheren's soul.\"") - return + if(iscultist(user)) + to_chat(user, "\"Come now, do not capture your bretheren's soul.\"") + return add_logs(user, M, "captured [M.name]'s soul", src) transfer_soul("VICTIM", M, user) @@ -82,7 +83,7 @@ /obj/item/soulstone/proc/release_shades(mob/user) for(var/mob/living/simple_animal/shade/A in src) A.status_flags &= ~GODMODE - A.canmove = 1 + A.canmove = TRUE A.forceMove(get_turf(user)) A.cancel_camera() icon_state = "soulstone" @@ -128,15 +129,15 @@ switch(choice) if("FORCE") if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul - return 0 + return FALSE if(contents.len) - return 0 + return FALSE var/mob/living/carbon/T = target if(T.client != null) for(var/obj/item/W in T) T.dropItemToGround(W) init_shade(T, user) - return 1 + return TRUE else to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") return getCultGhost(T,user) @@ -149,7 +150,7 @@ to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") else to_chat(user, "The soulstone seems to reject this soul.") - return 0 + return FALSE if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") else @@ -172,7 +173,7 @@ else T.forceMove(src) //put shade in stone T.status_flags |= GODMODE - T.canmove = 0 + T.canmove = FALSE T.health = T.maxHealth icon_state = "soulstone2" name = "soulstone: Shade of [T.real_name]" @@ -239,7 +240,7 @@ T.dust_animation() var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) S.status_flags |= GODMODE //So they won't die inside the stone somehow - S.canmove = 0//Can't move out of the soul stone + S.canmove = FALSE//Can't move out of the soul stone S.name = "Shade of [T.real_name]" S.real_name = "Shade of [T.real_name]" S.key = T.key @@ -272,15 +273,15 @@ if(consenting_candidates.len) chosen_ghost = pick(consenting_candidates) if(!T) - return 0 + return FALSE if(!chosen_ghost) to_chat(U, "There were no spirits willing to become a shade.") - return 0 + return FALSE if(contents.len) //If they used the soulstone on someone else in the meantime - return 0 + return FALSE T.ckey = chosen_ghost.ckey for(var/obj/item/W in T) T.dropItemToGround(W) init_shade(T, U) qdel(T) - return 1 + return TRUE diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 3f94c65437..afefaa68c1 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -318,7 +318,7 @@ /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" - desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." + desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you X-ray vision." item_path = /obj/item/scrying category = "Defensive" @@ -409,7 +409,7 @@ /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" - desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." + desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted." item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard limit = 1 category = "Defensive" @@ -452,7 +452,7 @@ /datum/spellbook_entry/summon/ghosts name = "Summon Ghosts" - desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." + desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilities to frustrate you." cost = 0 /datum/spellbook_entry/summon/ghosts/IsAvailible() @@ -589,22 +589,22 @@ switch(category) if("Offensive") dat += "Spells and items geared towards debilitating and destroying.

    " - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
    " + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
    " dat += "For spells: the number after the spell name is the cooldown time.
    " dat += "You can reduce this number by spending more points on the spell.
    " if("Defensive") - dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.

    " - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
    " + dat += "Spells and items geared towards improving your survivability or reducing foes' ability to attack.

    " + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
    " dat += "For spells: the number after the spell name is the cooldown time.
    " dat += "You can reduce this number by spending more points on the spell.
    " if("Mobility") dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.

    " - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
    " + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
    " dat += "For spells: the number after the spell name is the cooldown time.
    " dat += "You can reduce this number by spending more points on the spell.
    " if("Assistance") - dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.

    " - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
    " + dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilities.

    " + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
    " dat += "For spells: the number after the spell name is the cooldown time.
    " dat += "You can reduce this number by spending more points on the spell.
    " if("Challenges") diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index ececaf683f..b5a7c5d3c5 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -161,7 +161,7 @@ AOE_flash() burn_out() -/obj/item/assembly/flash/activate()//AOE flash on signal recieved +/obj/item/assembly/flash/activate()//AOE flash on signal received if(!..()) return AOE_flash() @@ -210,7 +210,7 @@ /obj/item/assembly/flash/armimplant name = "photon projector" - desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocals fix the flashbulb if it ever burns out." + desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocols fix the flashbulb if it ever burns out." var/flashcd = 20 var/overheat = 0 var/obj/item/organ/cyberimp/arm/flash/I = null diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 2aae7db5e2..1f62bfaaef 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -26,7 +26,7 @@ return FALSE//Cooldown check var/turf/location = get_turf(loc) if(location) - location.hotspot_expose(1000,1000) + location.hotspot_expose(700,10) sparks.start() return TRUE diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index fe6e94605b..94359f0a10 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -171,6 +171,10 @@ return if(offender == src || istype(offender,/obj/effect/beam/i_beam)) return + if (offender && isitem(offender)) + var/obj/item/I = offender + if (I.item_flags & ABSTRACT) + return return refreshBeam() /obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel @@ -219,10 +223,13 @@ var/obj/item/assembly/infra/master anchored = TRUE density = FALSE - flags_1 = ABSTRACT_1 pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW /obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) - if(istype(AM, /obj/effect/beam) || (AM.flags_1 & ABSTRACT_1)) + if(istype(AM, /obj/effect/beam)) return + if (isitem(AM)) + var/obj/item/I = AM + if (I.item_flags & ABSTRACT) + return master.trigger_beam(AM, get_turf(src)) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 0a1394bf04..8959029b9b 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -24,7 +24,7 @@ return MANUAL_SUICIDE /obj/item/assembly/signaler/proc/manual_suicide(mob/living/carbon/user) - user.visible_message("[user]'s \the [src] recieves a signal, killing [user.p_them()] instantly!") + user.visible_message("[user]'s \the [src] receives a signal, killing [user.p_them()] instantly!") user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something. user.death(0) @@ -158,21 +158,21 @@ Code: // Embedded signaller used in grenade construction. // It's necessary because the signaler doens't have an off state. // Generated during grenade construction. -Sayu -/obj/item/assembly/signaler/reciever +/obj/item/assembly/signaler/receiver var/on = FALSE -/obj/item/assembly/signaler/reciever/proc/toggle_safety() +/obj/item/assembly/signaler/receiver/proc/toggle_safety() on = !on -/obj/item/assembly/signaler/reciever/activate() +/obj/item/assembly/signaler/receiver/activate() toggle_safety() return TRUE -/obj/item/assembly/signaler/reciever/examine(mob/user) +/obj/item/assembly/signaler/receiver/examine(mob/user) ..() to_chat(user, "The radio receiver is [on?"on":"off"].") -/obj/item/assembly/signaler/reciever/receive_signal(datum/signal/signal) +/obj/item/assembly/signaler/receiver/receive_signal(datum/signal/signal) if(!on) return return ..(signal) diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index a3c9c68d55..ede69a6b22 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -42,6 +42,11 @@ active_hotspot.just_spawned = (current_cycle < SSair.times_fired) //remove just_spawned protection if no longer processing this cell SSair.add_to_active(src, 0) + else + var/datum/gas_mixture/heating = air_contents.remove_ratio(exposed_volume/air_contents.volume) + heating.temperature = exposed_temperature + heating.react() + assume_air(heating) return igniting //This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile @@ -231,7 +236,7 @@ else chance_of_deletion = 100 if(prob(chance_of_deletion)) - T.ScrapeAway() + T.Melt() else T.to_be_destroyed = FALSE T.max_fire_temperature_sustained = 0 @@ -256,4 +261,4 @@ . = ..() if(!isliving(loc)) return INITIALIZE_HINT_QDEL -#undef INSUFFICIENT \ No newline at end of file +#undef INSUFFICIENT diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index db489d04fe..104879b168 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -100,28 +100,38 @@ if (atmos_overlay_types) for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added - vars["vis_contents"] -= overlay + vis_contents -= overlay - if (new_overlay_types.len) + if (length(new_overlay_types)) if (atmos_overlay_types) - vars["vis_contents"] += new_overlay_types - atmos_overlay_types //don't add overlays that already exist + vis_contents += new_overlay_types - atmos_overlay_types //don't add overlays that already exist else - vars["vis_contents"] += new_overlay_types + vis_contents += new_overlay_types UNSETEMPTY(new_overlay_types) src.atmos_overlay_types = new_overlay_types /turf/open/proc/tile_graphic() - . = new /list + var/static/list/nonoverlaying_gases = typecache_of_gases_with_no_overlays() if(air) + . = new /list var/list/gases = air.gases for(var/id in gases) + if (nonoverlaying_gases[id]) + continue var/gas = gases[id] var/gas_meta = gas[GAS_META] var/gas_overlay = gas_meta[META_GAS_OVERLAY] if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE]) . += gas_overlay +/proc/typecache_of_gases_with_no_overlays() + . = list() + for (var/gastype in subtypesof(/datum/gas)) + var/datum/gas/gasvar = gastype + if (!initial(gasvar.gas_overlay)) + .[gastype] = TRUE + /////////////////////////////SIMULATION/////////////////////////////////// #define LAST_SHARE_CHECK \ diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index 6e78256c87..f2bb51159c 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -285,8 +285,6 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) return 1 /datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) - if(!sharer) - return 0 var/list/cached_gases = gases var/list/sharer_gases = sharer.gases @@ -322,7 +320,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) if(delta > 0) heat_capacity_self_to_sharer += gas_heat_capacity else - heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. saves a proc call. + heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. gas[MOLES] -= delta sharergas[MOLES] += delta @@ -348,8 +346,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.1) // <10% change in sharer heat capacity temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT) - var/list/unique_gases = cached_gases ^ sharer_gases - if(unique_gases.len) //if all gases were present in both mixtures, we know that no gases are 0 + if(length(cached_gases ^ sharer_gases)) //if all gases were present in both mixtures, we know that no gases are 0 garbage_collect(cached_gases - sharer_gases) //any gases the sharer had, we are guaranteed to have. gases that it didn't have we are not. sharer.garbage_collect(sharer_gases - cached_gases) //the reverse is equally true sharer.after_share(src, atmos_adjacent_turfs) @@ -358,8 +355,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) TOTAL_MOLES(cached_gases,our_moles) var/their_moles TOTAL_MOLES(sharer_gases,their_moles) - var/delta_pressure = temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles) - return delta_pressure * R_IDEAL_GAS_EQUATION / volume + return (temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles)) * R_IDEAL_GAS_EQUATION / volume /datum/gas_mixture/after_share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) return diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 5bd8c548f7..67836746fa 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -88,7 +88,7 @@ /datum/gas_reaction/nobliumsupression priority = INFINITY - name = "Hyper-Noblium Reaction Supression" + name = "Hyper-Noblium Reaction Suppression" id = "nobstop" /datum/gas_reaction/nobliumsupression/init_reqs() @@ -402,13 +402,13 @@ var/pressure = air.return_pressure() var/old_heat_capacity = air.heat_capacity() - var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/tritium][MOLES],1))),cached_gases[/datum/gas/tritium][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2) + var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/nitrous_oxide][MOLES],1))),cached_gases[/datum/gas/nitrous_oxide][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2) var/energy_released = 2*reaction_efficency*FIRE_CARBON_ENERGY_RELEASED - if ((cached_gases[/datum/gas/tritium][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing. return NO_REACTION ASSERT_GAS(/datum/gas/bz,air) cached_gases[/datum/gas/bz][MOLES] += reaction_efficency - cached_gases[/datum/gas/tritium][MOLES] -= reaction_efficency + cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency cached_gases[/datum/gas/plasma][MOLES] -= 2*reaction_efficency @@ -422,6 +422,7 @@ priority = 5 name = "Stimulum formation" id = "stimformation" + /datum/gas_reaction/stimformation/init_reqs() min_requirements = list( /datum/gas/tritium = 30, diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index cf1d0e1866..dd593c53bc 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -1,12 +1,12 @@ //node2, air2, network2 correspond to input //node1, air1, network1 correspond to output -#define CIRCULATOR_COLD 0 -#define CIRCULATOR_HOT 1 +#define CIRCULATOR_HOT 0 +#define CIRCULATOR_COLD 1 /obj/machinery/atmospherics/components/binary/circulator name = "circulator/heat exchanger" desc = "A gas circulator pump and heat exchanger." - icon_state = "circ-off" + icon_state = "circ-off-0" var/active = FALSE @@ -185,4 +185,4 @@ flipped = !flipped to_chat(usr, "You flip [src].") - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index a737b3c688..879668e4d7 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -227,7 +227,7 @@ Acts like a normal vent, but has an input AND output. pressure_checks &= ~1 pump_direction = 0 - if("stabalize" in signal.data) + if("stabilize" in signal.data) pressure_checks |= 1 pump_direction = 1 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 4fb1de3527..e7df188f70 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -27,7 +27,7 @@ Thus, the two variables affect pump operation are set in New(): construction_type = /obj/item/pipe/directional pipe_state = "pump" - + /obj/machinery/atmospherics/components/binary/pump/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -41,7 +41,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/components/binary/pump/on on = TRUE icon_state = "pump_on_map" - + /obj/machinery/atmospherics/components/binary/pump/on/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -51,7 +51,7 @@ Thus, the two variables affect pump operation are set in New(): piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/components/binary/pump/Destroy() SSradio.remove_object(src,frequency) if(radio_connection) @@ -132,8 +132,8 @@ Thus, the two variables affect pump operation are set in New(): switch(action) if("power") on = !on - investigate_log("Pump, [src.name], was turned [on ? "on" : "off"] by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS) message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) . = TRUE if("pressure") var/pressure = params["pressure"] diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index fb6539828e..f22ac62106 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -13,7 +13,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off. var/frequency = 0 var/id = null - var/open = FALSE var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes() construction_type = /obj/item/pipe/binary diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 5623a14dbe..a3ecda947a 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -79,7 +79,7 @@ Thus, the two variables affect pump operation are set in New(): if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000)) return - var/transfer_ratio = min(1, transfer_rate/air1.volume) + var/transfer_ratio = transfer_rate/air1.volume var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 861821349c..ced4855b1a 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -341,7 +341,7 @@ pressure_checks &= ~EXT_BOUND pump_direction = SIPHONING - if("stabalize" in signal.data) + if("stabilize" in signal.data) pressure_checks |= EXT_BOUND pump_direction = RELEASING @@ -399,7 +399,7 @@ user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") welded = TRUE else - user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") + user.visible_message("[user] unwelded the vent.", "You unweld the vent.", "You hear welding.") welded = FALSE update_icon() pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index bc034ec506..cfaef38f6c 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -60,7 +60,7 @@ warning("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) Nearby: ([item.x], [item.y], [item.z])") pipenetwarnings -= 1 if(pipenetwarnings == 0) - warning("build_pipeline(): further messages about pipenets will be supressed") + warning("build_pipeline(): further messages about pipenets will be suppressed") members += item possible_expansions += item diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index c65fc0960e..56f5d63b0c 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -494,14 +494,14 @@ W.registered_name = H.real_name W.update_label(W.registered_name, W.assignment) - // The shielded hardsuit is already NODROP_1 + // The shielded hardsuit is already NODROP no_drops += H.get_item_by_slot(SLOT_GLOVES) no_drops += H.get_item_by_slot(SLOT_SHOES) no_drops += H.get_item_by_slot(SLOT_W_UNIFORM) no_drops += H.get_item_by_slot(SLOT_EARS) for(var/i in no_drops) var/obj/item/I = i - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP /datum/outfit/ctf/instagib r_hand = /obj/item/gun/energy/laser/instakill diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 92704833ef..0ee182d9f8 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -37,6 +37,8 @@ if(jobban_isbanned(user, banType)) to_chat(user, "You are jobanned!") return + if(QDELETED(src) || QDELETED(user)) + return var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No") if(ghost_role == "No" || !loc) return diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index b233235d81..57d8420fa8 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -58,7 +58,7 @@ /obj/item/paper/fluff/awaymissions/academy/grade/failure name = "Pyromancy Evaluation" - info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutilage." + info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutelage." /obj/singularity/academy diff --git a/code/modules/awaymissions/mission_code/caves.dm b/code/modules/awaymissions/mission_code/caves.dm index fd2f8f18af..fd2735678d 100644 --- a/code/modules/awaymissions/mission_code/caves.dm +++ b/code/modules/awaymissions/mission_code/caves.dm @@ -31,14 +31,14 @@ //caves papers /obj/item/paper/crumpled/awaymissions/caves/unsafe_area - info = "
    WARNING


    Majority of this area is consitered 'unsafe' past this point. Theres an outpost directly south of here where you can get your bearing and travel further down if needed. Traveling in groups is HIGHLY advised, the shit out there can be extremely deadly if you're alone.
    " + info = "
    WARNING


    Majority of this area is considered 'unsafe' past this point. Theres an outpost directly south of here where you can get your bearing and travel further down if needed. Traveling in groups is HIGHLY advised, the shit out there can be extremely deadly if you're alone.
    " /obj/item/paper/fluff/awaymissions/caves/omega name = "Subject Omega Notes" info = "
    Testing Notes


    Subject appears unresponsive to most interactions, refusing to move away from the corners or face any scientists. Subject appears to move between the two back corners every observation. A strange humming can be heard from inside the cell, appears to be originating from the subject itself, further testing is necessary to confirm or deny this.
    " /obj/item/paper/fluff/awaymissions/caves/magma - info = "
    Mining is hell down here, you can feel the heat of the magma no matter how thick the suit is. Conditions are barely managble as is, restless nights and horrid work conditions. The ore maybe rich down here, but we've already lost a few men to the faults shifting, god knows how much longer till it all just collapses down and consumes everyone with it.
    " + info = "
    Mining is hell down here, you can feel the heat of the magma no matter how thick the suit is. Conditions are barely manageable as is, restless nights and horrid work conditions. The ore maybe rich down here, but we've already lost a few men to the faults shifting, god knows how much longer till it all just collapses down and consumes everyone with it.
    " /obj/item/paper/fluff/awaymissions/caves/work_notice name = "work notice" @@ -48,7 +48,7 @@ name = "shipment notice" info = "
    We were suppose to get a shipment of these special laser rifles and a couple 'nades to help combat the wildlife down here, but its been weeks since we last heard from the caravan carrying the shit down here. At this point we can only assume they fell victim to one of the monster nests or the dumbasses managed to trip into the lava. So much for that shipment, I guess.
    " -/obj/item/paper/fluff/awaymissions/caves/saftey_notice +/obj/item/paper/fluff/awaymissions/caves/safety_notice name = "safety notice" info = "
    Some of the miners have gone to laying some mine traps among the lower levels of the mine to keep the monsters at bay. This probably isn't the smartest idea in a cavern like this but the boys seem to get a chuckle out of every distant blast they hear go off, so I guess it works
    " diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm index 92d25bfee3..c0af9cd08c 100644 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm @@ -44,7 +44,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_social name = "Larva Xenomorph Social Interactions & Capturing Procedure" - info = "Researcher: Dr. Sakuma Sano
    Date: 04/06/2554

    Report:
    As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.

    The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.

    The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.

    It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor." + info = "Researcher: Dr. Sakuma Sano
    Date: 04/06/2554

    Report:
    As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.

    The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.

    The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.

    It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor." /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_queen name = "Queen Xenomorph Physiology & Behavior Observation" @@ -65,7 +65,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_hivemind name = "The Hivemind Hypothesis" info = "Researcher: Dr. Mark Douglas
    Date: 17/06/2554

    Report:
    Earlier today we have observed a new phenomenon with our subjects. While feeding them our last monkey subject and throwing out the box, the aliens merely looked at us instead of infecting the monkey right away. They looked to be collectively distressed as they would no longer be given hosts, where instead we would move to the next phase of the experiment. When I glanced at the gas tanks and piping leading to their cell, I looked back to see all of them were up against the glass, even the queen! It was as if they all understood what was going to happen, even though we knew only the queen had the cognitive capability to do so.

    The only explanation for this is a form of communication between the aliens, but we have seen no such action take place anywhere in the cell until now. We also know that regular drone and hunter xenomorphs have no personality or instinct to survive by themselves. Perhaps the queen has a direct link to them? A form of a commander or overseer that controls their every move? A hivemind?" - + /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_behavior name = "A Preliminary Study of Alien Behavior" info = "Researcher: Dr. Sakuma Sano
    Date: 08/06/2554

    Report:
    The xenomorphs we have come to study here are a remarkable species. They are almost universally aggressive across all castes, showing no remorse or guilt or pause before or after acts of violence. They appear to be a species entirely designed to kill. Oddly enough, even their method of reproduction is a brutal two-for-one method of birthing a new xenomorph and killing its host.

    The lone xenomorph we studied only five days ago showed little sign of intelligence. Only a simple drone that flung itself at the safety glass and shields repeatedly and thankfully without success. Once the drone molted into a queen, it became much more calm and calculating, merely looking at us and waiting while building its nest. As the hive grew in size and in numbers, so too did the intelligence of the common hunter and drone. We are still researching how they can communicate with one another and the relationship between the different castes and the queen. We will continue to update our research as we learn more about the species." @@ -80,11 +80,11 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation name = "Evacuation Procedure" - info = "

    In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediatly.



    Current Xenobiology Containment Level:Secure RUN

    " + info = "

    In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediately.



    Current Xenobiology Containment Level:Secure RUN

    " /obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal name = "Personal Log" - info = "Log 1:
    We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.

    Log 2:
    Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognise his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.

    Log 3:
    Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things." + info = "Log 1:
    We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.

    Log 2:
    Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognize his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.

    Log 3:
    Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things." /obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal_2 name = "Personal Log" @@ -100,7 +100,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/log/ivan name = "Personal Log - Ivan Volodin" - info = "Ivan Volodin Stories:

    Entry Won - 28/05/2554:
    Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.

    Entry Too - 05/06/2554:
    I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.

    Entry Tree - 08/06/2554:
    Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.

    Entry Fore - 12/06/2554:
    Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?

    Entry Fiv - 15/06/2554:
    I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.

    Entry Sex: 19/06/2554:
    Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end." + info = "Ivan Volodin Stories:

    Entry Won - 28/05/2554:
    Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.

    Entry Too - 05/06/2554:
    I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.

    Entry Tree - 08/06/2554:
    Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.

    Entry Fore - 12/06/2554:
    Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?

    Entry Fiv - 15/06/2554:
    I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.

    Entry Sex: 19/06/2554:
    Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end." /obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald name = "Personal Log - Gerald Rosswell" @@ -117,5 +117,5 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/goodbye_note name = "Note" info = "Bugs break out. I run to here and lock door. I hear door next to me break open and screams. All nice people here dead now. I no want to be eaten, and bottle always said to be coward way out, but person who say that is stupid. Mira, there is no escape for me, tell Alexis and Elena that father will never come home, and that I love you all." - + diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index f64b1fe838..b3018d9d1c 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -89,7 +89,7 @@ icon_state = "awaycontent22" /area/awaymission/snowdin/post/broken_shuttle - name = "Snowdin Outpost - Broken Transist Shuttle" + name = "Snowdin Outpost - Broken Transit Shuttle" icon_state = "awaycontent20" requires_power = FALSE @@ -223,8 +223,9 @@ var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman var/mob/living/carbon/human/PP = L - if(istype(PP.dna.species, /datum/species/plasmaman || /datum/species/android || /datum/species/synth)) //ignore plasmamen/robotic species - return + var/S = PP.dna.species + if(istype(S, /datum/species/plasmaman) || istype(S, /datum/species/android) || istype(S, /datum/species/synth)) //ignore plasmamen/robotic species + continue for(var/BP in PP.bodyparts) var/obj/item/bodypart/NN = BP @@ -263,7 +264,7 @@ /obj/item/paper/crumpled/ruins/snowdin/foreshadowing name = "scribbled note" - info = {"Somnethings gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me, + info = {"Something's gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me, telling me to mind my own business. I reported him to the officer, said he'd look into it. We only got another 2 months here before we're pulled for another assignment, so this shit can't go any quicker.."} /obj/item/paper/crumpled/ruins/snowdin/misc1 @@ -283,58 +284,58 @@ /obj/item/paper/fluff/awaymissions/snowdin/research_feed name = "Research Feed" - info = {"A page full of graphs and other detailed infomation on the seismic activity of the surrounding area."} + info = {"A page full of graphs and other detailed information on the seismic activity of the surrounding area."} //profile of each of the old crewmembers for the outpost /obj/item/paper/fluff/awaymissions/snowdin/profile/overseer name = "Personnel Record AOP#01" - info = {"
    Personnel Log


    Name:Caleb Reed
    Age:38
    Gender:Male
    On-Site Profession:Outpost Overseer

    Infomation

    Caleb Reed lead several expeditions + info = {"
    Personnel Log


    Name:Caleb Reed
    Age:38
    Gender:Male
    On-Site Profession:Outpost Overseer

    Information

    Caleb Reed lead several expeditions among uncharted planets in search of plasma for Nanotrasen, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the expedition of _______, where mis-used of explosive ordinance for tunneling causes a cave-in."} /obj/item/paper/fluff/awaymissions/snowdin/profile/sec1 name = "Personnel Record AOP#02" - info = {"
    Personnel Log


    Name:James Reed
    Age:43
    Gender:Male
    On-Site Profession:Outpost Security

    Infomation

    James Reed has been a part + info = {"
    Personnel Log


    Name:James Reed
    Age:43
    Gender:Male
    On-Site Profession:Outpost Security

    Information

    James Reed has been a part of Nanotrasen's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen when it comes to keeping the peace while prioritizing Nanotrasen privacy matters. "} /obj/item/paper/fluff/awaymissions/snowdin/profile/hydro1 name = "Personnel Record AOP#03" - info = {"
    Personnel Log


    Name:Katherine Esterdeen
    Age:27
    Gender:Female
    On-Site Profession:Outpost Botanist

    Infomation

    Katherine Esterdeen is a recent + info = {"
    Personnel Log


    Name:Katherine Esterdeen
    Age:27
    Gender:Female
    On-Site Profession:Outpost Botanist

    Information

    Katherine Esterdeen is a recent graduate with a major in Botany and a PH.D in Ecology. Having a clean record and eager to work, Esterdeen seems to be the right fit for maintaining plants in the middle of nowhere."} /obj/item/paper/fluff/awaymissions/snowdin/profile/engi1 name = "Personnel Record AOP#04" - info = {"
    Personnel Log


    Name:Rachel Migro
    Age:35
    Gender:Female
    On-Site Profession:Outpost Engineer

    Infomation

    Recently certified to be a full-time Journeyman, Rachel has + info = {"
    Personnel Log


    Name:Rachel Migro
    Age:35
    Gender:Female
    On-Site Profession:Outpost Engineer

    Information

    Recently certified to be a full-time Journeyman, Rachel has been assigned various construction projects in the past 5 years. Competent and has no past infractions, should be of little concern."} /obj/item/paper/fluff/awaymissions/snowdin/profile/research1 name = "Personnel Record AOP#05" - info = {"
    Personnel Log


    Name:Jacob Ullman
    Age:27
    Gender:Male
    On-Site Profession:Outpost Researcher

    Infomation

    "} + info = {"
    Personnel Log


    Name:Jacob Ullman
    Age:27
    Gender:Male
    On-Site Profession:Outpost Researcher

    Information

    "} /obj/item/paper/fluff/awaymissions/snowdin/profile/research2 name = "Personnel Record AOP#06" - info = {"
    Personnel Log


    Name:Elizabeth Queef
    Age:28
    Gender:Female
    On-Site Profession:Outpost Researcher

    Infomation

    "} + info = {"
    Personnel Log


    Name:Elizabeth Queef
    Age:28
    Gender:Female
    On-Site Profession:Outpost Researcher

    Information

    "} /obj/item/paper/fluff/awaymissions/snowdin/profile/research3 name = "Personnel Record AOP#07" - info = {"
    Personnel Log


    Name:Jouslen McGee
    Age:38
    Gender:Male
    On-Site Profession:Outpost Researcher

    Infomation

    "} + info = {"
    Personnel Log


    Name:Jouslen McGee
    Age:38
    Gender:Male
    On-Site Profession:Outpost Researcher

    Information

    "} /obj/item/paper/fluff/awaymissions/snowdin/secnotice name = "Security Notice" - info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital infomation is kept secure while the stationed crew obeys protocal. The picked + info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the offending crewmember."} /obj/item/paper/fluff/awaymissions/snowdin/mining name = "Assignment Notice" - info = {"This cold-ass planet is the new-age equivilant of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\ + info = {"This cold-ass planet is the new-age equivalent of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\ Nanotrasen pays by the pound, so get minin' boys!"} /obj/item/paper/crumpled/ruins/snowdin/lootstructures name = "scribbled note" - info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensned mixture of ice and snow. We've already barricaded up the ones we've found so far, + info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensed mixture of ice and snow. We've already barricaded up the ones we've found so far, since we keep hearing some strange noises from inside. Besides, what sort of fool would wrecklessly run into ancient ruins full of monsters for some old gear, anyway?"} /obj/item/paper/crumpled/ruins/snowdin/shovel @@ -388,7 +389,7 @@ DELAY 30 SAY Nanotrasen is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector! DELAY 30 - SAY Further job assignment infomation can be found at your local security post! Have a secure day! + SAY Further job assignment information can be found at your local security post! Have a secure day! DELAY 20;"} /obj/item/disk/holodisk/snowdin/overrun @@ -529,7 +530,7 @@ /obj/item/gun/ballistic/automatic/c20r/unrestricted = 16, /obj/item/gun/magic/wand/resurrection/inert = 15, /obj/item/gun/magic/wand/resurrection = 10, - /obj/item/radio/uplink/old = 2, + /obj/item/uplink/old = 2, /obj/item/book/granter/spell/charge = 12, /obj/item/grenade/clusterbuster/spawner_manhacks = 15, /obj/item/book/granter/spell/fireball = 10, @@ -558,7 +559,7 @@ /obj/item/clothing/under/syndicate/coldres name = "insulated tactical turtleneck" - desc = "A non-descript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection." + desc = "A nondescript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection." armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25) cold_protection = CHEST|GROIN|ARMS|LEGS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm index 8d0157ad86..42c9ab8202 100644 --- a/code/modules/cargo/bounties/special.dm +++ b/code/modules/cargo/bounties/special.dm @@ -1,6 +1,6 @@ /datum/bounty/item/alien_organs name = "Alien Organs" - description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thouroughly compensated." + description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated." reward = 25000 required_count = 3 wanted_types = list(/obj/item/organ/brain/alien, /obj/item/organ/alien, /obj/item/organ/body_egg/alien_embryo) diff --git a/code/modules/cargo/bounties/virus.dm b/code/modules/cargo/bounties/virus.dm index e046e09af2..8f078a2668 100644 --- a/code/modules/cargo/bounties/virus.dm +++ b/code/modules/cargo/bounties/virus.dm @@ -73,7 +73,7 @@ return A.totalStealth() == stat_value /datum/bounty/virus/transmit - stat_name = "transmittable" + stat_name = "transmissible" /datum/bounty/virus/transmit/accepts_virus(V) var/datum/disease/advance/A = V diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm index e493f96c6e..2113696e90 100644 --- a/code/modules/cargo/export_scanner.dm +++ b/code/modules/cargo/export_scanner.dm @@ -6,7 +6,7 @@ item_state = "radio" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL siemens_coefficient = 1 var/obj/machinery/computer/cargo/cargo_console = null diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index 28b55a2c8f..0d363f7132 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -69,29 +69,29 @@ unit_name = "pair" message = "of handcuffs" export_types = list(/obj/item/restraints/handcuffs) - + // relics of lavaland /datum/export/weapon/hierophant cost = 40000 unit_name = "Hierophant Club" export_types = list(/obj/item/hierophant_club) - + /datum/export/weapon/lava cost = 40000 unit_name = "Lava Staff" export_types = list(/obj/item/lava_staff) - + /datum/export/weapon/cleaving_saw cost = 40000 unit_name = "Cleaving Saw" export_types = list(/obj/item/melee/transforming/cleaving_saw) - + /datum/export/weapon/mayhem cost = 40000 unit_name = "Mayhem in a bottle" export_types = list(/obj/item/mayhem) - + /datum/export/weapon/blood_contract cost = 40000 unit_name = "Blood Contract" @@ -103,22 +103,22 @@ cost = 10000 unit_name = "Immortality Talisman" export_types = list(/obj/item/immortality_talisman) - + /datum/export/weapon/babel cost = 10000 unit_name = "Book of Babel" export_types = list(/obj/item/book_of_babel) - + /datum/export/weapon/hook cost = 10000 unit_name = "Meat hook" export_types = list(/obj/item/gun/magic/hook) - + /datum/export/weapon/shipbottle //the price for not breaking the bottle. cost = 20000 unit_name = "Ship in a bottle" export_types = list(/obj/item/ship_in_a_bottle) - + /datum/export/weapon/tarot //price for sacraficing a very profitiable ally cost = 20000 unit_name = "Tarot cards" @@ -128,37 +128,37 @@ cost = 5000 unit_name = "Red Cube" export_types = list(/obj/item/warp_cube/red) - + /datum/export/weapon/blue //first half of telecube cost = 5000 unit_name = "Blue Cube" export_types = list(/obj/item/warp_cube) - + /datum/export/weapon/wisplantern //thermals on lavaland cost = 10000 unit_name = "Wisp Lantern" export_types = list(/obj/item/wisp_lantern) - + /datum/export/weapon/flight //if xenobiology ever reaches the point to get these without shuttle being called they deserve it cost = 10000 - unit_name = "Strange Elixer" + unit_name = "Strange Elixir" export_types = list(/obj/item/reagent_containers/glass/bottle/potion/flight) - + /datum/export/weapon/cheart //is a very powerfull healing artifact in the robust hands cost = 10000 unit_name = "Cursed Heart" export_types = list(/obj/item/organ/heart/cursed/wizard) - + /datum/export/weapon/ckatana cost = 10000 unit_name = "Katana" export_types = list(/obj/item/katana/cursed) - + /datum/export/weapon/geye //xray cost = 10000 unit_name = "God eye" export_types = list(/obj/item/clothing/glasses/godeye) - + /datum/export/weapon/spectral cost = 10000 unit_name = "Spectral Sword" diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index cffd954b0e..e27cb8f56e 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -60,15 +60,6 @@ crate_name = "Biker Kit" crate_type = /obj/structure/closet/crate/large -/datum/supply_pack/emergency/droneshells - name = "Drone Shell Crate" - desc = "The station's little helpers. Contains three Drone Shells." - cost = 1000 - contains = list(/obj/item/drone_shell, - /obj/item/drone_shell, - /obj/item/drone_shell) - crate_name = "drone shell crate" - /datum/supply_pack/emergency/equipment name = "Emergency Bot/Internals Crate" desc = "Explosions got you down? These supplies are guaranteed to patch up holes, in stations and people alike! Comes with two floorbots, two medbots, five oxygen masks and five small oxygen tanks." @@ -181,7 +172,7 @@ /datum/supply_pack/emergency/radiation name = "Radiation Protection Crate" - desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and geiger counter. We'll even throw in a bottle of vodka and some glasses too, considering the life-expectancy of people who order this." + desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and Geiger counter. We'll even throw in a bottle of vodka and some glasses too, considering the life-expectancy of people who order this." cost = 1000 contains = list(/obj/item/clothing/head/radiation, /obj/item/clothing/head/radiation, @@ -225,7 +216,7 @@ /datum/supply_pack/emergency/weedcontrol name = "Weed Control Crate" - desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warrenty void if used on ambrosia. Requires Hydroponics access to open." + desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warranty void if used on ambrosia. Requires Hydroponics access to open." cost = 1500 access = ACCESS_HYDROPONICS contains = list(/obj/item/scythe, @@ -631,7 +622,7 @@ /datum/supply_pack/engineering/shuttle_engine name = "Shuttle Engine Crate" - desc = "Through advanced bluespace-shenanigins, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open." + desc = "Through advanced bluespace-shenanigans, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open." cost = 5000 access = ACCESS_CE contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) @@ -1134,24 +1125,24 @@ desc = "Contains refills for medical vending machines." cost = 2000 contains = list(/obj/item/vending_refill/medical, - /obj/item/vending_refill/medical, - /obj/item/vending_refill/medical) + /obj/item/vending_refill/wallmed) crate_name = "medical vending crate" /datum/supply_pack/medical/virus name = "Virus Crate" - desc = "Contains twelve different bottles, each filled with a different chemical compound, each useful for virology. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open." + desc = "Contains twelve different bottles, containing several viral samples for virology research. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open." cost = 2500 access = ACCESS_CMO contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, /obj/item/reagent_containers/glass/bottle/cold, - /obj/item/reagent_containers/glass/bottle/epiglottis_virion, - /obj/item/reagent_containers/glass/bottle/liver_enhance_virion, + /obj/item/reagent_containers/glass/bottle/random_virus, + /obj/item/reagent_containers/glass/bottle/random_virus, + /obj/item/reagent_containers/glass/bottle/random_virus, + /obj/item/reagent_containers/glass/bottle/random_virus, /obj/item/reagent_containers/glass/bottle/fake_gbs, /obj/item/reagent_containers/glass/bottle/magnitis, /obj/item/reagent_containers/glass/bottle/pierrot_throat, /obj/item/reagent_containers/glass/bottle/brainrot, - /obj/item/reagent_containers/glass/bottle/hallucigen_virion, /obj/item/reagent_containers/glass/bottle/anxiety, /obj/item/reagent_containers/glass/bottle/beesease, /obj/item/storage/box/syringes, @@ -1367,53 +1358,41 @@ /datum/supply_pack/service/vending/bartending name = "Bartending Supply Crate" - desc = "Bring on the booze with six vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!" + desc = "Bring on the booze with vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!" cost = 2000 contains = list(/obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee, /obj/item/vending_refill/coffee, /obj/item/book/granter/action/drink_fling) crate_name = "bartending supply crate" /datum/supply_pack/service/vending/cigarette name = "Cigarette Supply Crate" - desc = "Don't believe the reports - smoke today! Contains cigarette vending machine refills." + desc = "Don't believe the reports - smoke today! Contains a cigarette vending machine refill." cost = 1500 - contains = list(/obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette) + contains = list(/obj/item/vending_refill/cigarette) crate_name = "cigarette supply crate" crate_type = /obj/structure/closet/crate /datum/supply_pack/service/vending/games name = "Games Supply Crate" - desc = "Get your game on with these three game vending machine refills." + desc = "Get your game on with this game vending machine refill." cost = 1000 - contains = list(/obj/item/vending_refill/games, - /obj/item/vending_refill/games, - /obj/item/vending_refill/games) + contains = list(/obj/item/vending_refill/games) crate_name = "games supply crate" crate_type = /obj/structure/closet/crate /datum/supply_pack/service/vending/snack name = "Snack Supply Crate" - desc = "Three vending machine refills of cavity-bringin' goodness! The number one dentist recommended order!" + desc = "One vending machine refill of cavity-bringin' goodness! The number one dentist recommended order!" cost = 1500 - contains = list(/obj/item/vending_refill/snack, - /obj/item/vending_refill/snack, - /obj/item/vending_refill/snack) + contains = list(/obj/item/vending_refill/snack) crate_name = "snacks supply crate" /datum/supply_pack/service/vending/cola name = "Softdrinks Supply Crate" - desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with these three soda machine refills, today!" + desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with this soda machine refill, today!" cost = 1500 - contains = list(/obj/item/vending_refill/cola, - /obj/item/vending_refill/cola, - /obj/item/vending_refill/cola) + contains = list(/obj/item/vending_refill/cola) crate_name = "soft drinks supply crate" ////////////////////////////////////////////////////////////////////////////// @@ -1957,10 +1936,9 @@ /datum/supply_pack/costumes_toys/wardrobes/autodrobe name = "Autodrobe Supply Crate" - desc = "Autodrobe missing your favorite dress? Solve that issue today with these two autodrobe refills." + desc = "Autodrobe missing your favorite dress? Solve that issue today with this autodrobe refill." cost = 1500 - contains = list(/obj/item/vending_refill/autodrobe, - /obj/item/vending_refill/autodrobe) + contains = list(/obj/item/vending_refill/autodrobe) crate_name = "autodrobe supply crate" /datum/supply_pack/costumes_toys/wardrobes/cargo @@ -2083,7 +2061,7 @@ /datum/supply_pack/misc/paper name = "Bureaucracy Crate" - desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureacratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced + desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureaucratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced cost = 1500 contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, /obj/item/camera_film, diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 28a3ec23b9..b57aebb2cd 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -225,7 +225,7 @@ GLOBAL_LIST_EMPTY(asset_datums) var/res_name = "spritesheet_[name].css" var/fname = "data/spritesheets/[res_name]" - call("rust_g", "file_write")(generate_css(), fname) + text2file(generate_css(), fname) register_asset(res_name, file(fname)) for(var/size_id in sizes) @@ -249,7 +249,7 @@ GLOBAL_LIST_EMPTY(asset_datums) // save flattened version var/fname = "data/spritesheets/[name]_[size_id].png" fcopy(size[SPRSZ_ICON], fname) - var/error = call("rust_g", "dmi_strip_metadata")(fname) + var/error = rustg_dmi_strip_metadata(fname) if(length(error)) stack_trace("Failed to strip [name]_[size_id].png: [error]") size[SPRSZ_STRIPPED] = icon(fname) @@ -587,7 +587,11 @@ GLOBAL_LIST_EMPTY(asset_datums) if (machine) item = machine var/icon_file = initial(item.icon) - var/icon/I = icon(icon_file, initial(item.icon_state), SOUTH) + var/icon_state = initial(item.icon_state) + if (!(icon_state in icon_states(icon_file))) + warning("design [D] with icon '[icon_file]' missing state '[icon_state]'") + continue + var/icon/I = icon(icon_file, icon_state, SOUTH) // computers (and snowflakes) get their screen and keyboard sprites if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control)) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index fdcb27ad75..2ae00f9348 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -217,7 +217,9 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) new /datum/admins(localhost_rank, ckey, 1, 1) //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) prefs = GLOB.preferences_datums[ckey] - if(!prefs) + if(prefs) + prefs.parent = src + else prefs = new /datum/preferences(src) GLOB.preferences_datums[ckey] = prefs prefs.last_ip = address //these are gonna be used for banning @@ -465,12 +467,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) related_accounts_ip = "" while(query_get_related_ip.NextRow()) related_accounts_ip += "[query_get_related_ip.item[1]], " + qdel(query_get_related_ip) var/datum/DBQuery/query_get_related_cid = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") if(!query_get_related_cid.Execute()) return related_accounts_cid = "" while (query_get_related_cid.NextRow()) related_accounts_cid += "[query_get_related_cid.item[1]], " + qdel(query_get_related_cid) var/admin_rank = "Player" if (src.holder && src.holder.rank) admin_rank = src.holder.rank.name @@ -483,6 +487,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/new_player var/datum/DBQuery/query_client_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") if(!query_client_in_db.Execute()) + qdel(query_client_in_db) return if(!query_client_in_db.NextRow()) if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey]) @@ -496,6 +501,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].") winset(src, null, "command=.options") src << link("[panic_addr]?redirect=1") + qdel(query_client_in_db) qdel(src) return @@ -503,12 +509,17 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) account_join_date = sanitizeSQL(findJoinDate()) var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") if(!query_add_player.Execute()) + qdel(query_client_in_db) + qdel(query_add_player) return + qdel(query_add_player) if(!account_join_date) account_join_date = "Error" account_age = -1 + qdel(query_client_in_db) var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") if(!query_get_client_age.Execute()) + qdel(query_get_client_age) return if(query_get_client_age.NextRow()) player_join_date = query_get_client_age.item[1] @@ -523,17 +534,23 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) else var/datum/DBQuery/query_datediff = SSdbcore.NewQuery("SELECT DATEDIFF(Now(),'[account_join_date]')") if(!query_datediff.Execute()) + qdel(query_datediff) return if(query_datediff.NextRow()) account_age = text2num(query_datediff.item[1]) + qdel(query_datediff) + qdel(query_get_client_age) if(!new_player) var/datum/DBQuery/query_log_player = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET lastseen = Now(), lastseen_round_id = '[GLOB.round_id]', ip = INET_ATON('[sql_ip]'), computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]', accountjoindate = [account_join_date ? "'[account_join_date]'" : "NULL"] WHERE ckey = '[sql_ckey]'") if(!query_log_player.Execute()) + qdel(query_log_player) return + qdel(query_log_player) if(!account_join_date) account_join_date = "Error" var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`round_id`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')),'[world.port]','[GLOB.round_id]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") query_log_connection.Execute() + qdel(query_log_connection) if(new_player) player_age = -1 . = player_age @@ -569,6 +586,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/lastcid if (query_cidcheck.NextRow()) lastcid = query_cidcheck.item[1] + qdel(query_cidcheck) var/oldcid = cidcheck[ckey] if (oldcid) @@ -642,16 +660,22 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) //check to see if we noted them in the last day. var/datum/DBQuery/query_get_notes = SSdbcore.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[sql_system_ckey]' AND timestamp + INTERVAL 1 DAY < NOW() AND deleted = 0") if(!query_get_notes.Execute()) + qdel(query_get_notes) return if(query_get_notes.NextRow()) + qdel(query_get_notes) return + qdel(query_get_notes) //regardless of above, make sure their last note is not from us, as no point in repeating the same note over and over. query_get_notes = SSdbcore.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' AND deleted = 0 ORDER BY timestamp DESC LIMIT 1") if(!query_get_notes.Execute()) + qdel(query_get_notes) return if(query_get_notes.NextRow()) if (query_get_notes.item[1] == system_ckey) + qdel(query_get_notes) return + qdel(query_get_notes) create_message("note", ckey, system_ckey, message, null, null, 0, 0) @@ -797,6 +821,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) if (isliving(mob)) var/mob/living/M = mob M.update_damage_hud() + if (prefs.auto_fit_viewport) + fit_viewport() /client/proc/generate_clickcatcher() if(!void) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5c6c0a8229..088c75a1b5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //autocorrected this round, not that you'd need to check that. - var/UI_style = "Midnight" + var/UI_style = null var/buttons_locked = FALSE var/hotkeys = FALSE var/tgui_fancy = TRUE @@ -121,6 +121,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/parallax var/ambientocclusion = TRUE + var/auto_fit_viewport = FALSE var/uplink_spawn_loc = UPLINK_PDA @@ -133,9 +134,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) parent = C custom_names["human"] = random_unique_name() custom_names["ai"] = pick(GLOB.ai_names) - custom_names["cyborg"] = pick(GLOB.ai_names) + custom_names["cyborg"] = DEFAULT_CYBORG_NAME custom_names["clown"] = pick(GLOB.clown_names) custom_names["mime"] = pick(GLOB.mime_names) + UI_style = GLOB.available_ui_styles[1] if(istype(C)) if(!IsGuestKey(C.key)) load_path(C.ckey) @@ -213,10 +215,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Special Names:
    " dat += "Backup Human Name: [custom_names["human"]] " + dat += "
    " dat += "Clown: [custom_names["clown"]] " - dat += "Mime:[custom_names["mime"]]
    " + dat += "Mime: [custom_names["mime"]]" + dat += "
    " dat += "AI: [custom_names["ai"]] " - dat += "Cyborg: [custom_names["cyborg"]]
    " + dat += "Cyborg: [custom_names["cyborg"]]" + dat += "
    " dat += "Chaplain religion: [custom_names["religion"]] " dat += "Chaplain deity: [custom_names["deity"]]
    " @@ -457,24 +462,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) button_name = GHOST_OTHERS_SIMPLE_NAME dat += "Ghosts of Others: [button_name]
    " - - if (CONFIG_GET(flag/maprotation)) - var/p_map = preferred_map - if (!p_map) - p_map = "Default" - if (config.defaultmap) - p_map += " ([config.defaultmap.map_name])" - else - if (p_map in config.maplist) - var/datum/map_config/VM = config.maplist[p_map] - if (!VM) - p_map += " (No longer exists)" - else - p_map = VM.map_name - else - p_map += " (No longer exists)" - if(CONFIG_GET(flag/allow_map_voting)) - dat += "Preferred Map: [p_map]
    " + dat += "
    " dat += "FPS: [clientfps]
    " @@ -493,6 +481,25 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    " dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
    " + dat += "Fit Viewport: [auto_fit_viewport ? "Auto" : "Manual"]
    " + + if (CONFIG_GET(flag/maprotation)) + var/p_map = preferred_map + if (!p_map) + p_map = "Default" + if (config.defaultmap) + p_map += " ([config.defaultmap.map_name])" + else + if (p_map in config.maplist) + var/datum/map_config/VM = config.maplist[p_map] + if (!VM) + p_map += " (No longer exists)" + else + p_map = VM.map_name + else + p_map += " (No longer exists)" + if(CONFIG_GET(flag/allow_map_voting)) + dat += "Preferred Map: [p_map]
    " dat += "" @@ -1101,11 +1108,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_age) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) - if("metadata") - var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null - if(new_metadata) - metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) - /* if("hair") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null if(new_hair) @@ -1326,7 +1328,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and .") if("cyborg_name") - var/new_cyborg_name = reject_bad_name( input(user, "Choose your character's cyborg name:", "Character Preference") as text|null, 1 ) + var/raw_name = input(user, "Choose your character's cyborg name (Leave empty to use default naming scheme):", "Character Preference") as text|null + var/new_cyborg_name + if(!raw_name) + new_cyborg_name = DEFAULT_CYBORG_NAME + else + new_cyborg_name = reject_bad_name(raw_name,1 ) if(new_cyborg_name) custom_names["cyborg"] = new_cyborg_name else @@ -1372,13 +1379,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (!isnull(desiredfps)) clientfps = desiredfps parent.fps = desiredfps - else - clientfps = 0 - parent.fps = 0 if("ui") - var/pickedui = input(user, "Choose your UI style.", "Character Preference") as null|anything in list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork") + var/pickedui = input(user, "Choose your UI style.", "Character Preference", UI_style) as null|anything in GLOB.available_ui_styles if(pickedui) UI_style = pickedui + if (parent && parent.mob && parent.mob.hud_used) + parent.mob.hud_used.update_ui_style(ui_style2icon(UI_style)) if("pda_style") var/pickedPDAStyle = input(user, "Choose your PDA style.", "Character Preference", pda_style) as null|anything in GLOB.pda_styles if(pickedPDAStyle) @@ -1468,6 +1474,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) toggles ^= SOUND_ADMINHELP if("announce_login") toggles ^= ANNOUNCE_LOGIN + if("combohud_lighting") + toggles ^= COMBOHUD_LIGHTING if("be_special") var/be_special_type = href_list["be_special_type"] @@ -1487,7 +1495,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("lobby_music") toggles ^= SOUND_LOBBY - if((toggles & SOUND_LOBBY) && user.client) + if((toggles & SOUND_LOBBY) && user.client && isnewplayer(user)) user.client.playtitlemusic() else user.stop_sound_channel(CHANNEL_LOBBYMUSIC) @@ -1539,6 +1547,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen PM.backdrop(parent.mob) + if("auto_fit_viewport") + auto_fit_viewport = !auto_fit_viewport + if(auto_fit_viewport && parent) + parent.fit_viewport() + if("save") save_preferences() save_character() @@ -1600,7 +1613,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(be_random_body) random_character(gender) - if(CONFIG_GET(flag/humans_need_surnames)) + if(CONFIG_GET(flag/humans_need_surnames) && (pref_species.id == "human")) var/firstspace = findtext(real_name, " ") var/name_length = length(real_name) if(!firstspace) //we need a surname diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ad53f8f0dd..4c2cdbb074 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -131,6 +131,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["clientfps"] >> clientfps S["parallax"] >> parallax S["ambientocclusion"] >> ambientocclusion + S["auto_fit_viewport"] >> auto_fit_viewport S["menuoptions"] >> menuoptions S["enable_tips"] >> enable_tips S["tip_delay"] >> tip_delay @@ -151,7 +152,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) - UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork"), initial(UI_style)) + UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) hotkeys = sanitize_integer(hotkeys, 0, 1, initial(hotkeys)) tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy)) tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock)) @@ -162,6 +163,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car clientfps = sanitize_integer(clientfps, 0, 1000, 0) parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null) ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) + auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport)) ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) @@ -213,6 +215,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["clientfps"], clientfps) WRITE_FILE(S["parallax"], parallax) WRITE_FILE(S["ambientocclusion"], ambientocclusion) + WRITE_FILE(S["auto_fit_viewport"], auto_fit_viewport) WRITE_FILE(S["menuoptions"], menuoptions) WRITE_FILE(S["enable_tips"], enable_tips) WRITE_FILE(S["tip_delay"], tip_delay) @@ -260,7 +263,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["features["mcolor"]"] , "#FFF") //Character - S["OOC_Notes"] >> metadata S["real_name"] >> real_name S["name_is_always_random"] >> be_random_name S["body_is_always_random"] >> be_random_body @@ -374,7 +376,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car update_character(needs_update, S) //needs_update == savefile_version if we need an update (positive integer) //Sanitize - metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) if(!features["mcolor"] || features["mcolor"] == "#000") features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") @@ -444,7 +445,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) //Character - WRITE_FILE(S["OOC_Notes"] , metadata) WRITE_FILE(S["real_name"] , real_name) WRITE_FILE(S["name_is_always_random"] , be_random_name) WRITE_FILE(S["body_is_always_random"] , be_random_body) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 0bcfac811e..2f4922fddf 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -22,6 +22,8 @@ if(jobban_isbanned(src.mob, "OOC")) to_chat(src, "You have been banned from OOC.") return + if(QDELETED(src)) + return msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) var/raw_msg = msg @@ -56,21 +58,19 @@ if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) keyname = "[icon2html('icons/member_content.dmi', world, "blag")][keyname]" - + //The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url for(var/client/C in GLOB.clients) if(C.prefs.chat_toggles & CHAT_OOC) if(holder) if(!holder.fakekey || C.holder) if(check_rights_for(src, R_ADMIN)) - to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") + to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") + to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") - else if(is_mentor()) // Citadel Mentors - to_chat(C, "OOC: [keyname]: [msg]") // hippie end + to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") else if(!(key in C.prefs.ignoring)) - to_chat(C, "OOC: [keyname]: [msg]") + to_chat(C, "OOC: [keyname]: [msg]") /proc/toggle_ooc(toggle = null) if(toggle != null) //if we're specifically en/disabling ooc @@ -301,3 +301,49 @@ GLOBAL_VAR_INIT(normal_ooc_colour, OOC_COLOR) set desc = "View the last round end report you've seen" SSticker.show_roundend_report(src, TRUE) + +/client/verb/fit_viewport() + set name = "Fit Viewport" + set category = "OOC" + set desc = "Fit the width of the map window to match the viewport" + + // Fetch aspect ratio + var/view_size = getviewsize(view) + var/aspect_ratio = view_size[1] / view_size[2] + + // Calculate desired pixel width using window size and aspect ratio + var/sizes = params2list(winget(src, "mainwindow.split;mapwindow", "size")) + var/map_size = splittext(sizes["mapwindow.size"], "x") + var/height = text2num(map_size[2]) + var/desired_width = round(height * aspect_ratio) + if (text2num(map_size[1]) == desired_width) + // Nothing to do + return + + var/split_size = splittext(sizes["mainwindow.split.size"], "x") + var/split_width = text2num(split_size[1]) + + // Calculate and apply a best estimate + // +4 pixels are for the width of the splitter's handle + var/pct = 100 * (desired_width + 4) / split_width + winset(src, "mainwindow.split", "splitter=[pct]") + + // Apply an ever-lowering offset until we finish or fail + var/delta + for(var/safety in 1 to 10) + var/after_size = winget(src, "mapwindow", "size") + map_size = splittext(after_size, "x") + var/got_width = text2num(map_size[1]) + + if (got_width == desired_width) + // success + return + else if (isnull(delta)) + // calculate a probable delta value based on the difference + delta = 100 * (desired_width - got_width) / split_width + else if ((delta > 0 && got_width > desired_width) || (delta < 0 && got_width < desired_width)) + // if we overshot, halve the delta and reverse direction + delta = -delta/2 + + pct += delta + winset(src, "mainwindow.split", "splitter=[pct]") diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 06e555bb32..6b273cb818 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -19,7 +19,7 @@ if(damagetype & SHAME) adjustStaminaLoss(200) suiciding = FALSE - SendSignal(COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide) return suicide_log() @@ -219,7 +219,4 @@ if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") return -// if(has_brain_worms()) -// to_chat(src, "You can't bring yourself to commit suicide!") -// return return TRUE diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 9d4983ed57..e4cc477f11 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -170,7 +170,7 @@ for(var/V in typesof(chameleon_type)) if(ispath(V) && ispath(V, /obj/item)) var/obj/item/I = V - if(chameleon_blacklist[V] || (initial(I.flags_1) & ABSTRACT_1) || !initial(I.icon_state)) + if(chameleon_blacklist[V] || (initial(I.item_flags) & ABSTRACT) || !initial(I.icon_state)) continue var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])" chameleon_list[chameleon_item_name] = I @@ -405,7 +405,7 @@ /obj/item/clothing/head/chameleon/drone // The camohat, I mean, holographic hat projection, is part of the // drone itself. - flags_1 = NODROP_1 + item_flags = NODROP armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // which means it offers no protection, it's just air and light @@ -459,7 +459,7 @@ /obj/item/clothing/mask/chameleon/drone //Same as the drone chameleon hat, undroppable and no protection - flags_1 = NODROP_1 + item_flags = NODROP armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // Can drones use the voice changer part? Let's not find out. vchange = 0 diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index bb2a489030..1dcaeb35fa 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -1,50 +1,50 @@ - -//Ears: currently only used for headsets and earmuffs -/obj/item/clothing/ears - name = "ears" - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - slot_flags = ITEM_SLOT_EARS - resistance_flags = NONE - -/obj/item/clothing/ears/earmuffs - name = "earmuffs" - desc = "Protects your hearing from loud noises, and quiet ones as well." - icon_state = "earmuffs" - item_state = "earmuffs" - strip_delay = 15 - equip_delay_other = 25 - resistance_flags = FLAMMABLE - -/obj/item/clothing/ears/earmuffs/ComponentInitialize() - . = ..() - AddComponent(/datum/component/earhealing) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) - -/obj/item/clothing/ears/headphones - name = "headphones" - desc = "Unce unce unce unce. Boop!" - icon = 'icons/obj/clothing/accessories.dmi' - icon_state = "headphones" - item_state = "headphones" - slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! - actions_types = list(/datum/action/item_action/toggle_headphones) - var/headphones_on = FALSE - -/obj/item/clothing/ears/headphones/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/ears/headphones/update_icon() - icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" - item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]" - -/obj/item/clothing/ears/headphones/proc/toggle(owner) - headphones_on = !headphones_on - update_icon() - var/mob/living/carbon/human/H = owner - if(istype(H)) - H.update_inv_ears() - H.update_inv_neck() - H.update_inv_head() - to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]") + +//Ears: currently only used for headsets and earmuffs +/obj/item/clothing/ears + name = "ears" + w_class = WEIGHT_CLASS_TINY + throwforce = 0 + slot_flags = ITEM_SLOT_EARS + resistance_flags = NONE + +/obj/item/clothing/ears/earmuffs + name = "earmuffs" + desc = "Protects your hearing from loud noises, and quiet ones as well." + icon_state = "earmuffs" + item_state = "earmuffs" + strip_delay = 15 + equip_delay_other = 25 + resistance_flags = FLAMMABLE + +/obj/item/clothing/ears/earmuffs/ComponentInitialize() + . = ..() + AddComponent(/datum/component/earhealing) + AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + +/obj/item/clothing/ears/headphones + name = "headphones" + desc = "Unce unce unce unce. Boop!" + icon = 'icons/obj/clothing/accessories.dmi' + icon_state = "headphones" + item_state = "headphones" + slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! + actions_types = list(/datum/action/item_action/toggle_headphones) + var/headphones_on = FALSE + +/obj/item/clothing/ears/headphones/Initialize() + . = ..() + update_icon() + +/obj/item/clothing/ears/headphones/update_icon() + icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" + item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]" + +/obj/item/clothing/ears/headphones/proc/toggle(owner) + headphones_on = !headphones_on + update_icon() + var/mob/living/carbon/human/H = owner + if(istype(H)) + H.update_inv_ears() + H.update_inv_neck() + H.update_inv_head() + to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]") diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index c64ecc0e0f..bbb8d687d9 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -367,7 +367,7 @@ vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS darkness_view = 8 scan_reagents = 1 - flags_1 = NODROP_1 + item_flags = NODROP lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE resistance_flags = LAVA_PROOF | FIRE_PROOF diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2d60c7d236..25e0dbe886 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -150,7 +150,7 @@ dog_fashion = null /obj/item/clothing/head/helmet/roman - name = "roman helmet" + name = "\improper Roman helmet" desc = "An ancient helmet made of bronze and leather." flags_inv = HIDEEARS|HIDEHAIR flags_cover = HEADCOVERSEYES @@ -165,13 +165,13 @@ desc = "An ancient helmet made of plastic and leather." armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -/obj/item/clothing/head/helmet/roman/legionaire - name = "roman legionaire helmet" +/obj/item/clothing/head/helmet/roman/legionnaire + name = "\improper Roman legionnaire helmet" desc = "An ancient helmet made of bronze and leather. Has a red crest on top of it." icon_state = "roman_c" item_state = "roman_c" -/obj/item/clothing/head/helmet/roman/legionaire/fake +/obj/item/clothing/head/helmet/roman/legionnaire/fake desc = "An ancient helmet made of plastic and leather. Has a red crest on top of it." armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 18521b7dc9..faa3ebdb0f 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -100,7 +100,7 @@ /obj/item/clothing/head/beret/highlander desc = "That was white fabric. Was." - flags_1 = NODROP_1 + item_flags = NODROP dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES //Security @@ -136,7 +136,7 @@ /obj/item/clothing/head/beret/sec name = "security beret" - desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." + desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." icon_state = "beret_badge" armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) strip_delay = 60 diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index d7a7e7f5e2..ba23338415 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -221,7 +221,7 @@ icon_state = "shamebrero" item_state = "shamebrero" desc = "Once it's on, it never comes off." - flags_1 = NODROP_1 + item_flags = NODROP dog_fashion = null /obj/item/clothing/head/cone @@ -305,8 +305,8 @@ icon_state = "drfreeze_hat" flags_inv = HIDEHAIR -/obj/item/clothing/head/pharoah - name = "pharoah hat" +/obj/item/clothing/head/pharaoh + name = "pharaoh hat" desc = "Walk like an Egyptian." icon_state = "pharoah_hat" icon_state = "pharoah_hat" @@ -318,7 +318,7 @@ dynamic_hair_suffix = "" /obj/item/clothing/head/nemes - name = "headress of Nemes" + name = "headdress of Nemes" desc = "Lavish space tomb not included." icon_state = "nemes_headdress" icon_state = "nemes_headdress" @@ -344,4 +344,4 @@ if(prob(3)) M += pick(" Honh honh honh!"," Honh!"," Zut Alors!") - return trim(M) \ No newline at end of file + return trim(M) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 0d78e11874..3f21780f15 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -3,7 +3,7 @@ /obj/item/clothing/mask/gas/sechailer name = "security gas mask" - desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device." + desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device." actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust) icon_state = "sechailer" item_state = "sechailer" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 667bc7fc78..c0d41aeb68 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -123,7 +123,7 @@ return message /obj/item/clothing/mask/frog/cursed - flags_1 = NODROP_1 //reee!! + item_flags = NODROP //reee!! /obj/item/clothing/mask/frog/cursed/attack_self(mob/user) return //no voicebox to alter. diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm index 37a06046b5..347fc5c2d7 100644 --- a/code/modules/clothing/outfits/event.dm +++ b/code/modules/clothing/outfits/event.dm @@ -26,5 +26,5 @@ var/obj/item/storage/backpack/bag = H.back var/obj/item/a_gift/gift = new(H) - while(bag.SendSignal(COMSIG_TRY_STORAGE_INSERT, gift, null, TRUE, FALSE)) + while(SEND_SIGNAL(bag, COMSIG_TRY_STORAGE_INSERT, gift, null, TRUE, FALSE)) gift = new(H) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 88752f7415..88b51963e5 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -182,11 +182,11 @@ for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) for(var/i = 3 to 0 step -1) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE) var/obj/item/pda/heads/pda = H.belt pda.owner = H.real_name diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index 48b69c9568..cd8930641f 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -27,7 +27,7 @@ /datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H) . = ..() - var/obj/item/radio/uplink/U = new /obj/item/radio/uplink/nuclear_restricted(H, H.key, 80) + var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, H.key, 80) H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) W.implant(H) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 9f0d8358ac..c81505d8e8 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,5 +1,5 @@ /obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking - SendSignal(COMSIG_SHOES_STEP_ACTION) + SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION) /obj/item/clothing/shoes/sneakers/mime name = "mime shoes" @@ -64,7 +64,7 @@ /obj/item/clothing/shoes/galoshes/dry/step_action() var/turf/open/t_loc = get_turf(src) - t_loc.SendSignal(COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) + SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" @@ -82,12 +82,12 @@ /obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) . = ..() if(user.mind && user.mind.assigned_role == "Clown") - user.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "noshoes") + SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "noshoes") /obj/item/clothing/shoes/clown_shoes/dropped(mob/user) . = ..() if(user.mind && user.mind.assigned_role == "Clown") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes) /obj/item/clothing/shoes/clown_shoes/jester name = "jester shoes" @@ -157,7 +157,7 @@ icon_state = "cultalt" /obj/item/clothing/shoes/cult/alt/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/shoes/cyborg name = "cyborg boots" diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index b3b74446ec..d0820304fe 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -98,7 +98,7 @@ teleporting = 0 for(var/obj/item/I in user.held_items) if(I in hands_nodrop) - I.flags_1 &= ~NODROP_1 + I.item_flags &= ~NODROP if(camera) camera.remove_target_ui() camera.forceMove(user) @@ -133,9 +133,9 @@ hands_nodrop = list() for(var/obj/item/I in user.held_items) - if(!(I.flags_1 & NODROP_1)) + if(!(I.item_flags & NODROP)) hands_nodrop += I - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP user.animate_movement = NO_STEPS user.changeNext_move(8 + phase_in_ds) user.notransform = 1 @@ -194,9 +194,9 @@ if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos)) to_chat(user, "\[ ok \] Mounting /dev/helm") helmet = user.head - helmet.flags_1 |= NODROP_1 + helmet.item_flags |= NODROP helmet.suit = src - src.flags_1 |= NODROP_1 + src.item_flags |= NODROP to_chat(user, "\[ ok \] Starting brainwave scanner") to_chat(user, "\[ ok \] Starting ui display driver") to_chat(user, "\[ ok \] Initializing chronowalk4-view") @@ -215,7 +215,7 @@ activating = 1 var/mob/living/carbon/human/user = src.loc var/hard_landing = teleporting && force - src.flags_1 &= ~NODROP_1 + item_flags &= ~NODROP cooldown = world.time + cooldowntime * 1.5 activated = 0 activating = 0 @@ -236,7 +236,7 @@ to_chat(user, "\[ ok \] Unmounting /dev/helmet") to_chat(user, "logout") if(helmet) - helmet.flags_1 &= ~NODROP_1 + helmet.item_flags &= ~NODROP helmet.suit = null helmet = null if(camera) diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index d117bf482b..176bc81665 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -302,7 +302,7 @@ if(suit && !suit.deployedshoes && (brake || stabilizer)) brake = FALSE stabilizer = FALSE - usermessage("Warning: Sensor data is not being recieved from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning") + usermessage("Warning: Sensor data is not being received from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning") /obj/item/flightpack/process() @@ -897,7 +897,7 @@ usermessage("You're already wearing something on your back!", "boldwarning") return FALSE user.equip_to_slot_if_possible(pack,SLOT_BACK,0,0,1) - pack.flags_1 |= NODROP_1 + pack.item_flags |= NODROP resync() user.visible_message("A [pack.name] extends from [user]'s [name] and clamps to [user.p_their()] back!") user.update_inv_wear_suit() @@ -911,7 +911,7 @@ return FALSE if(pack.flight && forced) pack.disable_flight(1) - pack.flags_1 &= ~NODROP_1 + pack.item_flags &= ~NODROP resync() if(user) user.transferItemToLoc(pack, src, TRUE) @@ -935,14 +935,14 @@ usermessage("You're already wearing something on your feet!", "boldwarning") return FALSE user.equip_to_slot_if_possible(shoes,SLOT_SHOES,0,0,1) - shoes.flags_1 |= NODROP_1 + shoes.item_flags |= NODROP user.visible_message("[user]'s [name] extends a pair of [shoes.name] over [user.p_their()] feet!") user.update_inv_wear_suit() playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) deployedshoes = TRUE /obj/item/clothing/suit/space/hardsuit/flightsuit/proc/retract_flightshoes(forced = FALSE) - shoes.flags_1 &= ~NODROP_1 + shoes.item_flags &= ~NODROP playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) if(user) user.transferItemToLoc(shoes, src, TRUE) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 0667f2be6f..2e5896098f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -713,7 +713,7 @@ icon_state = "ert_medical" item_state = "ert_medical" item_color = "ert_medical" - flags_1 = NODROP_1 //Dont want people changing into the other teams gear + item_flags = NODROP //Dont want people changing into the other teams gear helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95) slowdown = 0 diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index f3975d1f81..a4b82c8234 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -165,7 +165,7 @@ Contains: item_color = "ert_commander" armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) strip_delay = 130 - flags_1 = NODROP_1 + item_flags = NODROP brightness_on = 7 /obj/item/clothing/suit/space/hardsuit/ert @@ -265,7 +265,7 @@ Contains: armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy as a space carp brightness_on = 0 //luminosity when on actions_types = list() - flags_1 = NODROP_1 + item_flags = NODROP /obj/item/clothing/suit/space/hardsuit/carp diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index ea300aaf13..f73ca30fb0 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -53,7 +53,7 @@ /obj/item/clothing/suit/armor/hos/trenchcoat name = "armored trenchoat" - desc = "A trenchcoat enchanced with a special lightweight kevlar. The epitome of tactical plainclothes." + desc = "A trenchcoat enhanced with a special lightweight kevlar. The epitome of tactical plainclothes." icon_state = "hostrench" item_state = "hostrench" flags_inv = 0 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index d38c625ee2..1c24ee17a7 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -2,7 +2,7 @@ /obj/item/clothing/head/bio_hood name = "bio hood" icon_state = "bio" - desc = "A hood that protects the head and face from biological comtaminants." + desc = "A hood that protects the head and face from biological contaminants." permeability_coefficient = 0.01 clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 8b87cf6f6e..85767852e4 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -15,7 +15,7 @@ icon_state = "golhood" desc = "A hood for a cloak." body_parts_covered = HEAD - flags_1 = NODROP_1 + item_flags = NODROP flags_inv = HIDEHAIR|HIDEEARS /obj/item/clothing/neck/cloak/suicide_act(mob/user) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 1b28c71c4b..a598bd0959 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -17,13 +17,13 @@ item_state = "labcoat_cmo" /obj/item/clothing/suit/toggle/labcoat/emt - name = "EMT's jacket" + name = "\improper EMT's jacket" desc = "A dark blue jacket with reflective strips for emergency medical technicians." icon_state = "labcoat_emt" item_state = "labcoat_cmo" /obj/item/clothing/suit/toggle/labcoat/mad - name = "\improper The Mad's labcoat" + name = "\proper The Mad's labcoat" desc = "It makes you look capable of konking someone on the noggin and shooting them into space." icon_state = "labgreen" item_state = "labgreen" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index f6cb6a44ad..858f65b64c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -222,7 +222,7 @@ desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseparable. Literally." icon_state = "ponchoshame" item_state = "ponchoshame" - flags_1 = NODROP_1 + item_flags = NODROP /obj/item/clothing/suit/whitedress name = "white dress" @@ -311,7 +311,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR /obj/item/clothing/suit/security/officer/russian - name = "russian officer's jacket" + name = "\improper Russian officer's jacket" desc = "This jacket is for those special occasions when a russian officer isn't required to wear their armor." icon_state = "officertanjacket" item_state = "officertanjacket" @@ -594,3 +594,12 @@ icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "clockwork_cuirass_old" armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) + +/obj/item/clothing/suit/ghost_sheet + name = "ghost sheet" + desc = "The hands float by themselves, so it's extra spooky." + icon_state = "ghost_sheet" + item_state = "ghost_sheet_item" + w_class = WEIGHT_CLASS_TINY + flags_inv = HIDEGLOVES|HIDEMASK|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + alternate_worn_layer = UNDER_HEAD_LAYER diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 0ac6dba14e..59f7a1c387 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -81,7 +81,7 @@ /obj/item/clothing/suit/wizrobe/yellow name = "yellow wizard robe" - desc = "A magnificant yellow gem-lined robe that seems to radiate power." + desc = "A magnificent yellow gem-lined robe that seems to radiate power." icon_state = "yellowwizard" item_state = "yellowwizrobe" diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 235eac6704..8d250ab766 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -14,7 +14,7 @@ /obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/U, user) GET_COMPONENT(storage, /datum/component/storage) if(storage) - if(U.SendSignal(COMSIG_CONTAINS_STORAGE)) + if(SEND_SIGNAL(U, COMSIG_CONTAINS_STORAGE)) return FALSE U.TakeComponent(storage) detached_pockets = storage diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index afb9bff1c1..324c16fec7 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -22,7 +22,7 @@ resistance_flags = NONE /obj/item/clothing/under/color/black/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/under/color/grey name = "grey jumpsuit" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 8c85f414e6..57ead15de8 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -38,7 +38,7 @@ can_adjust = FALSE /obj/item/clothing/under/roman - name = "roman armor" + name = "\improper Roman armor" desc = "Ancient Roman armor. Made of metallic and leather straps." icon_state = "roman" item_color = "roman" @@ -388,7 +388,7 @@ /obj/item/clothing/under/kilt/highlander desc = "You're the only one worthy of this kilt." - flags_1 = NODROP_1 + item_flags = NODROP /obj/item/clothing/under/sexymime name = "sexy mime outfit" @@ -667,7 +667,7 @@ icon = 'icons/obj/device.dmi' /obj/item/clothing/under/rank/security/navyblue/russian - name = "russian officer's uniform" + name = "\improper Russian officer's uniform" desc = "The latest in fashionable russian outfits." icon_state = "hostanclothes" item_state = "hostanclothes" diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 7d309bd9c7..ea1db981e5 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -100,6 +100,7 @@ .["other"][I.type] += S.amount else if(I.tool_behaviour) .["tool_behaviour"] += I.tool_behaviour + .["other"][I.type] += 1 else if(istype(I, /obj/item/reagent_containers)) var/obj/item/reagent_containers/RC = I @@ -182,7 +183,7 @@ After its done loop over deletion list and delete all the shit that wasnt taken by parts loop - del_reqs return the list of parts resulting object will recieve as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already + del_reqs return the list of parts resulting object will receive as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already */ /datum/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, mob/user) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 5122574e58..1ffda7413e 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -669,3 +669,11 @@ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1) category = CAT_CLOTHING + +/datum/crafting_recipe/ghostsheet + name = "Ghost Sheet" + result = /obj/item/clothing/suit/ghost_sheet + time = 5 + tools = list(TOOL_WIRECUTTER) + reqs = list(/obj/item/bedsheet = 1) + category = CAT_CLOTHING diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index d17090816c..a97758e294 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -40,8 +40,8 @@ return if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up. - if(I.loc.SendSignal(COMSIG_CONTAINS_STORAGE)) //in a container. - I.loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, I, src) + if(SEND_SIGNAL(I.loc, COMSIG_CONTAINS_STORAGE)) //in a container. + SEND_SIGNAL(I.loc, COMSIG_TRY_STORAGE_TAKE, I, src) if(!user.dropItemToGround(I)) return diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 5f4603e35e..50a845a689 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -12,7 +12,7 @@ w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/toy.dmi' icon_state = "rag" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON container_type = OPENCONTAINER amount_per_transfer_from_this = 5 possible_transfer_amounts = list() @@ -46,5 +46,5 @@ user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...") if(do_after(user,30, target = A)) user.visible_message("[user] finishes wiping off [A]!", "You finish wiping off [A].") - A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) + SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) return diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index c323f1edf2..e8847adb11 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -11,7 +11,8 @@ item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT var/scanning = 0 var/list/log = list() @@ -200,4 +201,4 @@ return to_chat(user, "Scanner Report") for(var/iterLog in log) - to_chat(user, iterLog) \ No newline at end of file + to_chat(user, iterLog) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 745e8a6ac3..89a84d3494 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -14,8 +14,8 @@ announceWhen = 1 startWhen = 9 endWhen = 50 - var/list/aurora_colors = list("#A2FF80", "#A2FF8B", "#A2FF96", "#A2FFA5", "#A2FFB6", "#A2FFC7", "#A2FFDE") - var/aurora_progress = 0 //this cycles from 1 to 7, slowly changing colors from gentle green to gentle blue + var/list/aurora_colors = list("#A2FF80", "#A2FF8B", "#A2FF96", "#A2FFA5", "#A2FFB6", "#A2FFC7", "#A2FFDE", "#A2FFEE") + var/aurora_progress = 0 //this cycles from 1 to 8, slowly changing colors from gentle green to gentle blue /datum/round_event/aurora_caelus/announce() priority_announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. Nanotrasen has approved a short break for all employees to relax and observe this very rare event. During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. We hope you enjoy the lights.", diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 81e93244ea..f09c0481f6 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -61,7 +61,7 @@ else D = new virus_type() else - D = make_virus(max_severity, max_severity) + D = new /datum/disease/advance/random(max_severity, max_severity) D.carrier = TRUE H.ForceContractDisease(D, FALSE, TRUE) @@ -73,23 +73,3 @@ message_admins("An event has triggered a random advanced virus outbreak on [ADMIN_LOOKUPFLW(H)]! It has these symptoms: [english_list(name_symptoms)]") log_game("An event has triggered a random advanced virus outbreak on [key_name(H)]! It has these symptoms: [english_list(name_symptoms)]") break - -/datum/round_event/disease_outbreak/proc/make_virus(max_symptoms, max_level) - if(max_symptoms > VIRUS_SYMPTOM_LIMIT) - max_symptoms = VIRUS_SYMPTOM_LIMIT - var/datum/disease/advance/A = new /datum/disease/advance() - 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 - A.symptoms += S - A.Refresh() //just in case someone already made and named the same disease - return A diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 180589b4f1..a6e08fbd8c 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -50,7 +50,7 @@ var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list H.dropItemToGround(H.get_item_by_slot(i), TRUE) H.equip_to_slot_or_del(I, i) - I.flags_1 |= NODROP_1 | DROPDEL_1 + I.item_flags |= NODROP | DROPDEL I.name = "cursed " + I.name for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index 08cfe7aeea..d94ee0e212 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -16,7 +16,7 @@ GET_COMPONENT_FROM(STR, /datum/component/storage, S) if(prob(upgrade_scroll_chance) && S.contents.len < STR.max_items && !S.invisibility) var/obj/item/upgradescroll/scroll = new - S.SendSignal(COMSIG_TRY_STORAGE_INSERT, scroll, null, TRUE, TRUE) + SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT, scroll, null, TRUE, TRUE) upgrade_scroll_chance = max(0,upgrade_scroll_chance-100) upgrade_scroll_chance += 25 @@ -77,7 +77,7 @@ attached = null /datum/rpg_loot/proc/randomise() - var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "enpowered", "honed", "true", "glorious", "robust") + var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "empowered", "honed", "true", "glorious", "robust") var/static/list/prefixesnegative = list("lesser", "minor", "blighted", "inferior", "enfeebled", "rusted", "unsteady", "tragic", "gimped") var/static/list/suffixes = list("orc slaying", "elf slaying", "corgi slaying", "strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma", "the forest", "the hills", "the plains", "the sea", "the sun", "the moon", "the void", "the world", "the fool", "many secrets", "many tales", "many colors", "rending", "sundering", "the night", "the day") diff --git a/code/modules/fields/gravity.dm b/code/modules/fields/gravity.dm new file mode 100644 index 0000000000..8b16bb6487 --- /dev/null +++ b/code/modules/fields/gravity.dm @@ -0,0 +1,17 @@ +/datum/proximity_monitor/advanced/gravity + name = "modified gravity zone" + setup_field_turfs = TRUE + var/gravity_value = 0 + var/list/grav_components = list() + field_shape = FIELD_SHAPE_RADIUS_SQUARE + +/datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/T) + . = ..() + grav_components[T] = T.AddComponent(/datum/component/forced_gravity,gravity_value) + +/datum/proximity_monitor/advanced/gravity/cleanup_field_turf(turf/T) + . = ..() + var/datum/component/forced_gravity/G = grav_components[T] + grav_components -= T + if(G) + qdel(G) \ No newline at end of file diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm index 7d7454f46a..d37036d83c 100644 --- a/code/modules/fields/turf_objects.dm +++ b/code/modules/fields/turf_objects.dm @@ -6,7 +6,7 @@ icon_state = null alpha = 0 invisibility = INVISIBILITY_ABSTRACT - flags_1 = ABSTRACT_1|ON_BORDER_1 + flags_1 = ON_BORDER_1 mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/datum/proximity_monitor/advanced/parent = null diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 1ade5070a7..a21747837b 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -915,7 +915,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( /datum/hallucination/fake_alert/New(mob/living/carbon/C, forced = TRUE, specific, duration = 150) set waitfor = FALSE ..() - var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") + var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","gravity","fire","locked","hacked","temphot","tempcold","pressure") if(specific) alert_type = specific feedback_details += "Type: [alert_type]" @@ -937,7 +937,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.throw_alert(alert_type, /obj/screen/alert/fat, override = TRUE) else target.throw_alert(alert_type, /obj/screen/alert/starving, override = TRUE) - if("weightless") + if("gravity") target.throw_alert(alert_type, /obj/screen/alert/weightless, override = TRUE) if("fire") target.throw_alert(alert_type, /obj/screen/alert/fire, override = TRUE) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index dc903dce85..d84deb8132 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -250,6 +250,11 @@ list_reagents = list("beer" = 30) foodtype = GRAIN | ALCOHOL +/obj/item/reagent_containers/food/drinks/beer/light + name = "Carp Lite" + desc = "Brewed with \"Pure Ice Asteroid Spring Water\"." + list_reagents = list("light_beer" = 30) + /obj/item/reagent_containers/food/drinks/ale name = "Magm-Ale" desc = "A true dorf's drink of choice." diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 375ce80f96..f9d9a3d85a 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -23,15 +23,15 @@ if(foodtype & H.dna.species.toxic_food) to_chat(H,"What the hell was that thing?!") H.adjust_disgust(25 + 30 * fraction) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) else if(foodtype & H.dna.species.disliked_food) to_chat(H,"That didn't taste very good...") H.adjust_disgust(11 + 15 * fraction) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) else if(foodtype & H.dna.species.liked_food) to_chat(H,"I love this taste!") H.adjust_disgust(-5 + -2.5 * fraction) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) else if(foodtype & H.dna.species.toxic_food) to_chat(H, "You don't feel so good...") diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 3df4ca4bd0..e98aae37e3 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -118,8 +118,8 @@ if(INGREDIENTS_STACKPLUSTOP) filling.pixel_x = rand(-1,1) filling.pixel_y = 2 * ingredients.len - 1 - if(our_overlays) - our_overlays.Cut(ingredients.len) //???, add overlay calls later in this proc will queue the compile if necessary + if(overlays) + overlays -= overlays[ingredients.len] var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top") TOP.pixel_y = 2 * ingredients.len + 3 add_overlay(filling) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 85371e0875..a74c7c6f69 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -109,7 +109,7 @@ M.satiety -= junkiness playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1) if(reagents.total_volume) - SendSignal(COMSIG_FOOD_EATEN, M, user) + SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user) var/fraction = min(bitesize / reagents.total_volume, 1) reagents.reaction(M, INGEST, fraction) reagents.trans_to(M, bitesize) diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 01105cf6d3..80aa588bae 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -406,8 +406,8 @@ name = "stack of pancakes" else name = initial(name) - if(contents.len < LAZYLEN(our_overlays)) - cut_overlay(our_overlays[our_overlays.len]) + if(contents.len < LAZYLEN(overlays)) + overlays-=overlays[overlays.len] /obj/item/reagent_containers/food/snacks/pancakes/examine(mob/user) var/ingredients_listed = "" diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 5efcb98faf..04177783e6 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -56,7 +56,7 @@ if(!H.creamed) // one layer at a time H.add_overlay(creamoverlay) H.creamed = TRUE - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie) qdel(src) /obj/item/reagent_containers/food/snacks/pie/cream/nostun diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index bdcc8e14ac..5e7a3db504 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -95,7 +95,7 @@ God bless America. else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?! return else - if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.flags_1 & (ABSTRACT_1 | NODROP_1 | DROPDEL_1))) + if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.item_flags & (ABSTRACT | NODROP | DROPDEL))) return ..() else if(!frying && user.transferItemToLoc(I, src)) to_chat(user, "You put [I] into [src].") diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 42da7e226b..b1da39daf3 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -92,7 +92,7 @@ to_chat(user, "[src] is at full capacity.") break else - if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src)) + if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) if(stored_food[sanitize(S.name)]) stored_food[sanitize(S.name)]++ else diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index d960d9945b..e6734b4b58 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -78,7 +78,7 @@ if(!ignore_clothing) for(var/obj/item/I in C.held_items + C.get_equipped_items()) - if(!(I.flags_1 & NODROP_1)) + if(!(I.item_flags & NODROP)) to_chat(user, "Subject may not have abiotic items on.") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index ee04e73fbe..8c4e0eaae0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -129,7 +129,7 @@ if (contents.len>=max_n_of_items) to_chat(user, "[src] is full, you can't put anything in!") return 1 - if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src)) + if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) loaded++ if(loaded) diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 2ec1e56adb..3f917273b4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -60,7 +60,7 @@ for(var/obj/item/reagent_containers/food/snacks/S in T.contents) var/datum/food_processor_process/P = select_recipe(S) if(P) - if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src)) + if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) loaded++ if(loaded) @@ -106,7 +106,7 @@ for(var/O in src.contents) var/datum/food_processor_process/P = select_recipe(O) if (!P) - log_admin("DEBUG: [O] in processor hasnt got a suitable recipe. How did it get in there? Please report it immediatly!!!") + log_admin("DEBUG: [O] in processor doesn't have a suitable recipe. How did it get in there? Please report it immediately!!!") continue total_time += P.time var/offset = prob(50) ? -2 : 2 @@ -115,7 +115,7 @@ for(var/atom/movable/O in src.contents) var/datum/food_processor_process/P = select_recipe(O) if (!P) - log_admin("DEBUG: [O] in processor havent suitable recipe. How do you put it in?") + log_admin("DEBUG: [O] in processor doesn't have a suitable recipe. How do you put it in?") continue process_food(P, O) pixel_x = initial(pixel_x) //return to its spot after shaking diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 11da92dce0..79202e8190 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -125,8 +125,8 @@ else return TRUE else - if(O.loc.SendSignal(COMSIG_CONTAINS_STORAGE)) - return O.loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, O, src) + if(SEND_SIGNAL(O.loc, COMSIG_CONTAINS_STORAGE)) + return SEND_SIGNAL(O.loc, COMSIG_TRY_STORAGE_TAKE, O, src) else O.forceMove(src) return TRUE @@ -327,7 +327,7 @@ desc = "A refrigerated storage unit for tasty tasty alcohol." /obj/machinery/smartfridge/drinks/accept_check(obj/item/O) - if(!istype(O, /obj/item/reagent_containers) || (O.flags_1 & ABSTRACT_1) || !O.reagents || !O.reagents.reagent_list.len) + if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT) || !O.reagents || !O.reagents.reagent_list.len) return FALSE if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks) || istype(O, /obj/item/reagent_containers/food/condiment)) return TRUE @@ -375,7 +375,7 @@ return FALSE return TRUE return FALSE - if(!istype(O, /obj/item/reagent_containers) || (O.flags_1 & ABSTRACT_1)) + if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT)) return FALSE if(istype(O, /obj/item/reagent_containers/pill)) // empty pill prank ok return TRUE @@ -415,6 +415,7 @@ /obj/machinery/smartfridge/disks name = "disk compartmentalizer" desc = "A machine capable of storing a variety of disks. Denoted by most as the DSU (disk storage unit)." + icon_state = "disktoaster" /obj/machinery/smartfridge/disks/accept_check(obj/item/O) if(istype(O, /obj/item/disk/)) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index d6e3232baa..55d5a806bd 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -208,7 +208,18 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic for(var/I in targets) //Grab us a client if possible - var/client/C = grab_client(I) + var/client/C + if (ismob(I)) + var/mob/M = I + if(M.client) + C = M.client + else if(istype(I, /client)) + C = I + else if(istype(I, /datum/mind)) + var/datum/mind/M = I + if(M.current && M.current.client) + C = M.current.client + if (!C) continue @@ -226,15 +237,3 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript. C << output(url_encode(url_encode(message)), "browseroutput:output") - -/proc/grab_client(target) - if(istype(target, /client)) - return target - else if(ismob(target)) - var/mob/M = target - if(M.client) - return M.client - else if(istype(target, /datum/mind)) - var/datum/mind/M = target - if(M.current && M.current.client) - return M.current.client diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 045177c92d..15265b2a93 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -95,8 +95,53 @@ if (typeof String.prototype.trim !== 'function') { }; } +// Linkify the contents of a node, within its parent. +function linkify(parent, insertBefore, text) { + var start = 0; + var match; + var regex = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;()]+/ig; + while ((match = regex.exec(text)) !== null) { + // add the unmatched text + parent.insertBefore(document.createTextNode(text.substring(start, match.index)), insertBefore); + + var href = match[0]; + if (!/^https?:\/\//i.test(match[0])) { + href = "http://" + match[0]; + } + + // add the link + var link = document.createElement("a"); + link.href = href; + link.textContent = match[0]; + parent.insertBefore(link, insertBefore); + + start = regex.lastIndex; + } + if (start !== 0) { + // add the remaining text and remove the original text node + parent.insertBefore(document.createTextNode(text.substring(start)), insertBefore); + parent.removeChild(insertBefore); + } +} + +// Recursively linkify the children of a given node. +function linkify_node(node) { + var children = node.childNodes; + // work backwards to avoid the risk of looping forever on our own output + for (var i = children.length - 1; i >= 0; --i) { + var child = children[i]; + if (child.nodeType == Node.TEXT_NODE) { + // text is to be linkified + linkify(node, child, child.textContent); + } else if (child.nodeName != "A" && child.nodeName != "a") { + // do not linkify existing links + linkify_node(child); + } + } +} + //Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify(text) { +function linkify_fallback(text) { var rex = /((?: 0) { diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 6cc3f56461..829cb55312 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -147,7 +147,7 @@ desc = "The Cross represents the Assistants that died for your sins." icon_state = "hotcrossbun" -/datum/crafting_recipe/food/food/hotcrossbun +/datum/crafting_recipe/food/hotcrossbun name = "Hot-Cross Bun" reqs = list( /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, @@ -171,7 +171,7 @@ icon_state = "briochecake_slice" filling_color = "#FFD700" -/datum/crafting_recipe/food/food/briochecake +/datum/crafting_recipe/food/briochecake name = "Brioche cake" reqs = list( /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index 8edc7090e4..efe7418e44 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -1,5 +1,8 @@ //Vars that will not be copied when using /DuplicateObject -GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("tag", "datum_components", "area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs")) +GLOBAL_LIST_INIT(duplicate_forbidden_vars,list( + "tag", "datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key", + "power_supply", "contents", "reagents", "stat", "x", "y", "z", "group", "atmos_adjacent_turfs", "comp_lookup" + )) /proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE) if(!original) diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index a1f1394e16..4590d58174 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -136,7 +136,7 @@ if(prob(30)) do_sparks(2, 1, T) T.ex_act(EXPLODE_LIGHT) - T.hotspot_expose(1000,500,1) + T.hotspot_expose(700,25,1) if(!(obj_flags & EMAGGED)) for(var/item in spawned) diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index c83e7d5520..4134b0516f 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -100,6 +100,11 @@ /obj/effect/holodeck_effect/mobspawner/penguin mobtype = /mob/living/simple_animal/pet/penguin/emperor + +/obj/effect/holodeck_effect/mobspawner/penguin/Initialize() + if(prob(1)) + mobtype = /mob/living/simple_animal/pet/penguin/emperor/shamebrero + return ..() /obj/effect/holodeck_effect/mobspawner/penguin_baby mobtype = /mob/living/simple_animal/pet/penguin/baby diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index c7a775523a..e1eb976966 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -15,7 +15,7 @@ var/productivity = 0 var/max_items = 40 var/datum/techweb/stored_research - var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth") + var/list/show_categories = list("Food", "Botany Chemicals", "Organic Materials") var/list/timesFiveCategories = list("Food", "Botany Chemicals") /obj/machinery/biogenerator/Initialize() @@ -112,7 +112,7 @@ for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) if(i >= max_items) break - if(PB.SendSignal(COMSIG_TRY_STORAGE_TAKE, G, src)) + if(SEND_SIGNAL(PB, COMSIG_TRY_STORAGE_TAKE, G, src)) i++ if(iYou empty the plant bag into the biogenerator.") diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 89206342b1..6f5a1a0ee4 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -146,7 +146,7 @@ if(W.is_hot()) StartBurning() if(grill) - if(user.a_intent != INTENT_HARM && !(W.flags_1 & ABSTRACT_1)) + if(user.a_intent != INTENT_HARM && !(W.item_flags & ABSTRACT)) if(user.temporarilyRemoveItemFromInventory(W)) W.forceMove(get_turf(src)) var/list/click_params = params2list(params) @@ -203,7 +203,7 @@ /obj/structure/bonfire/proc/Burn() var/turf/current_location = get_turf(src) - current_location.hotspot_expose(1000,500,1) + current_location.hotspot_expose(1000,100,1) for(var/A in current_location) if(A == src) continue diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 5e75a57c32..f464fccf91 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -779,7 +779,7 @@ else if(istype(O, /obj/item/storage/bag/plants)) attack_hand(user) for(var/obj/item/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z)) - O.SendSignal(COMSIG_TRY_STORAGE_INSERT, G, user, TRUE) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_INSERT, G, user, TRUE) else if(default_unfasten_wrench(user, O)) return diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 4ba1aa0c33..2a28b7b097 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -9,7 +9,7 @@ resistance_flags = FLAMMABLE var/plantname = "Plants" // Name of plant when planted. var/product // A type path. The thing that is created when the plant is harvested. - var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden. + var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden. var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed. var/icon_grow // Used to override grow icon (default is "[species]-grow"). You can use one grow icon for multiple closely related plants with it. diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 6dd3f43592..d39163b547 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -8,8 +8,9 @@ w_class = WEIGHT_CLASS_SMALL icon = 'icons/obj/assemblies/electronic_setups.dmi' icon_state = "setup_small" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON materials = list() // To be filled later + datum_flags = DF_USE_TAG var/list/assembly_components = list() var/list/ckeys_allowed_to_scan = list() // Players who built the circuit can scan it as a ghost. var/max_components = IC_MAX_SIZE_BASE @@ -30,6 +31,8 @@ var/combat_circuits = 0 //number of combat cicuits in the assembly, used for diagnostic hud var/long_range_circuits = 0 //number of long range cicuits in the assembly, used for diagnostic hud var/prefered_hud_icon = "hudstat" // Used by the AR circuit to change the hud icon. + var/creator // circuit creator if any + var/static/next_assembly_id = 0 hud_possible = list(DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD, DIAG_CIRCUIT_HUD) //diagnostic hud overlays max_integrity = 50 pass_flags = 0 @@ -56,14 +59,17 @@ COLOR_ASSEMBLY_PURPLE ) +/obj/item/electronic_assembly/GenerateTag() + tag = "assembly_[next_assembly_id++]" + /obj/item/electronic_assembly/examine(mob/user) . = ..() if(can_anchor) - to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintainence panel [opened ? "can be" : "is"] screwed in place.") + to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintenance panel [opened ? "can be" : "is"] screwed in place.") else - to_chat(user, "The maintainence panel [opened ? "can be" : "is"] screwed in place.") + to_chat(user, "The maintenance panel [opened ? "can be" : "is"] screwed in place.") - if(isobserver(user) && ckeys_allowed_to_scan[user.ckey]) + if((isobserver(user) && ckeys_allowed_to_scan[user.ckey]) || IsAdminGhost(user)) to_chat(user, "You can scan this circuit."); /obj/item/electronic_assembly/proc/check_interactivity(mob/user) @@ -186,7 +192,7 @@ return 1 if(href_list["ghostscan"]) - if(isobserver(usr) && ckeys_allowed_to_scan[usr.ckey]) + if((isobserver(usr) && ckeys_allowed_to_scan[usr.ckey]) || IsAdminGhost(usr)) if(assembly_components.len) var/saved = "On circuit printers with cloning enabled, you may use the code below to clone the circuit:

    [SScircuit.save_electronic_assembly(src)]" usr << browse(saved, "window=circuit_scan;size=500x600;border=1;can_resize=1;can_close=1;can_minimize=1") @@ -194,6 +200,9 @@ to_chat(usr, "The circuit is empty!") return + if(!check_interactivity(usr)) + return + if(href_list["rename"]) rename(usr) @@ -348,6 +357,7 @@ to_chat(user, "You slide [IC] inside [src].") playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) add_allowed_scanner(user.ckey) + investigate_log("had [IC]([IC.type]) inserted by [key_name(user)].", INVESTIGATE_CIRCUIT) add_component(IC) return TRUE @@ -387,6 +397,7 @@ playsound(src, 'sound/items/crowbar.ogg', 50, 1) user.put_in_hands(IC) add_allowed_scanner(user.ckey) + investigate_log("had [IC]([IC.type]) removed by [key_name(user)].", INVESTIGATE_CIRCUIT) return TRUE diff --git a/code/modules/integrated_electronics/core/debugger.dm b/code/modules/integrated_electronics/core/debugger.dm index 6abaf316da..d6f6a551ad 100644 --- a/code/modules/integrated_electronics/core/debugger.dm +++ b/code/modules/integrated_electronics/core/debugger.dm @@ -4,7 +4,8 @@ settings to specific circuits, or for debugging purposes. It can also pulse activation pins." icon = 'icons/obj/assemblies/electronic_tools.dmi' icon_state = "debugger" - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL var/data_to_write = null var/accepting_refs = FALSE diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm index 9a718df73e..33f7ef96ad 100644 --- a/code/modules/integrated_electronics/core/detailer.dm +++ b/code/modules/integrated_electronics/core/detailer.dm @@ -3,7 +3,8 @@ desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish." icon = 'icons/obj/assemblies/electronic_tools.dmi' icon_state = "detailer" - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL var/data_to_write = null var/accepting_refs = FALSE @@ -44,4 +45,4 @@ if(!in_range(src, user)) return detail_color = color_list[color_choice] - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index d5ebeb3001..57ad917246 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -24,7 +24,7 @@ var/category_text = "NO CATEGORY THIS IS A BUG" // To show up on circuit printer, and perhaps other places. var/removable = TRUE // Determines if a circuit is removable from the assembly. var/displayed_name = "" - + /* Integrated circuits are essentially modular machines. Each circuit has a specific function, and combining them inside Electronic Assemblies allows a creative player the means to solve many problems. Circuits are held inside an electronic assembly, and are wired using special tools. diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index cc81c20081..c1bbb900fa 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -209,6 +209,7 @@ D [1]/ || write_data_to_pin(new_data) /datum/integrated_io/activate/ask_for_pin_data(mob/user) // This just pulses the pin. + holder.investigate_log(" was manually pulsed by [key_name(user)].", INVESTIGATE_CIRCUIT) holder.check_then_do_work(ord,ignore_power = TRUE) to_chat(user, "You pulse \the [holder]'s [src] pin.") diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 2cab5ad3b9..f8d1424160 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -12,7 +12,6 @@ var/debug = FALSE // If it's upgraded and can clone, even without config settings. var/current_category = null var/cloning = FALSE // If the printer is currently creating a circuit - var/clone_countdown = 0 // Timestamp for when to print the circuit var/recycling = FALSE // If an assembly is being emptied into this printer var/list/program // Currently loaded save, in form of list @@ -29,26 +28,22 @@ debug = TRUE upgraded = TRUE can_clone = TRUE + fast_clone = TRUE w_class = WEIGHT_CLASS_TINY /obj/item/integrated_circuit_printer/Initialize() . = ..() AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly)) -/obj/item/integrated_circuit_printer/Destroy() - STOP_PROCESSING(SSprocessing, src) - return ..() - -/obj/item/integrated_circuit_printer/process() +/obj/item/integrated_circuit_printer/proc/print_program(mob/user) if(!cloning) - STOP_PROCESSING(SSprocessing, src) - if(world.time >= clone_countdown || fast_clone) - var/turf/T = get_turf(src) - T.visible_message("[src] has finished printing its assembly!") - playsound(get_turf(T), 'sound/items/poster_being_created.ogg', 50, TRUE) - SScircuit.load_electronic_assembly(T, program) - cloning = FALSE - STOP_PROCESSING(SSprocessing, src) + return + visible_message("[src] has finished printing its assembly!") + playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) + var/obj/item/electronic_assembly/assembly = SScircuit.load_electronic_assembly(get_turf(src), program) + assembly.creator = key_name(user) + assembly.investigate_log("was printed by [assembly.creator].", INVESTIGATE_CIRCUIT) + cloning = FALSE /obj/item/integrated_circuit_printer/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/disk/integrated_circuit/upgrade/advanced)) @@ -141,7 +136,7 @@ if(!program) HTML += " {[fast_clone ? "Print" : "Begin Printing"] Assembly}" else if(cloning) - HTML += " {Cancel Print} - [DisplayTimeText(max(0, clone_countdown - world.time))] remaining until completion" + HTML += " {Cancel Print}" else HTML += " {[fast_clone ? "Print" : "Begin Printing"] Assembly}" @@ -206,6 +201,7 @@ if(istype(built, /obj/item/electronic_assembly)) var/obj/item/electronic_assembly/E = built + E.creator = key_name(usr) E.opened = TRUE E.update_icon() //reupdate diagnostic hud because it was put_in_hands() and not pickup()'ed @@ -213,6 +209,7 @@ E.diag_hud_set_circuitcell() E.diag_hud_set_circuitstat() E.diag_hud_set_circuittracking() + E.investigate_log("was printed by [E.creator].", INVESTIGATE_CIRCUIT) to_chat(usr, "[capitalize(built.name)] printed.") playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE) @@ -226,8 +223,10 @@ return switch(href_list["print"]) if("load") + if(cloning) + return var/input = input("Put your code there:", "loading", null, null) as message | null - if(!check_interactivity(usr)) + if(!check_interactivity(usr) || cloning) return if(!input) program = null @@ -254,7 +253,7 @@ to_chat(usr, "Metal cost: [program["metal_cost"]].") if("print") - if(!program) + if(!program || cloning) return if(program["requires_upgrades"] && !upgraded && !debug) @@ -263,12 +262,11 @@ if(program["unsupported_circuit"] && !debug) to_chat(usr, "This program uses components not supported by the specified assembly. Please change the assembly type in the save file to a supported one.") return - else if(fast_clone || debug) + else if(fast_clone) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) if(debug || materials.use_amount_type(program["metal_cost"], MAT_METAL)) - var/obj/item/assembly = SScircuit.load_electronic_assembly(get_turf(src), program) - to_chat(usr, "[assembly] has been printed from the provided template!") - playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) + cloning = TRUE + print_program(usr) else to_chat(usr, "You need [program["metal_cost"]] metal to build that!") else @@ -279,11 +277,10 @@ var/cloning_time = round(program["metal_cost"] / 15) cloning_time = min(cloning_time, MAX_CIRCUIT_CLONE_TIME) cloning = TRUE - clone_countdown = world.time + cloning_time to_chat(usr, "You begin printing a custom assembly. This will take approximately [DisplayTimeText(cloning_time)]. You can still print \ off normal parts during this time.") playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) - START_PROCESSING(SSprocessing, src) + addtimer(CALLBACK(src, .proc/print_program, usr), cloning_time) if("cancel") if(!cloning || !program) @@ -291,7 +288,6 @@ to_chat(usr, "Cloning has been canceled. Metal cost has been refunded.") cloning = FALSE - clone_countdown = FALSE var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) materials.use_amount_type(-program["metal_cost"], MAT_METAL) //use negative amount to regain the cost diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index cca3f2babf..96ca6a3055 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -763,7 +763,7 @@ data.standard_format_data(message, text, key) ntnet_send(data) -/obj/item/integrated_circuit/input/ntnet_recieve(datum/netdata/data) +/obj/item/integrated_circuit/input/ntnet_receive(datum/netdata/data) set_pin_data(IC_OUTPUT, 1, data.sender_id) set_pin_data(IC_OUTPUT, 2, data.data["data"]) set_pin_data(IC_OUTPUT, 3, data.data["data_secondary"]) @@ -774,7 +774,7 @@ activate_pin(2) /obj/item/integrated_circuit/input/ntnet_advanced - name = "Low level NTNet transreciever" + name = "Low level NTNet transreceiver" desc = "Enables the sending and receiving of messages over NTNet via packet data protocol. Allows advanced control of message contents and signalling. Must use associative lists. Outputs associative list. Has a slower transmission rate than normal NTNet circuits, due to increased data processing complexity." extended_desc = "Data can be sent or received using the second pin on each side, \ with additonal data reserved for the third pin. When a message is received, the second activation pin \ @@ -787,7 +787,7 @@ "target NTNet addresses"= IC_PINTYPE_STRING, "data" = IC_PINTYPE_LIST, ) - outputs = list("recieved data" = IC_PINTYPE_LIST, "is_broadcast" = IC_PINTYPE_BOOLEAN) + outputs = list("received data" = IC_PINTYPE_LIST, "is_broadcast" = IC_PINTYPE_BOOLEAN) activators = list("send data" = IC_PINTYPE_PULSE_IN, "on data received" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH action_flags = IC_ACTION_LONG_RANGE @@ -811,7 +811,7 @@ data.data = message ntnet_send(data) -/obj/item/integrated_circuit/input/ntnet_advanced/ntnet_recieve(datum/netdata/data) +/obj/item/integrated_circuit/input/ntnet_advanced/ntnet_receive(datum/netdata/data) set_pin_data(IC_OUTPUT, 1, data.data) set_pin_data(IC_OUTPUT, 2, data.broadcast) push_data() @@ -1123,6 +1123,67 @@ else activate_pin(3) +/obj/item/integrated_circuit/input/atmospheric_analyzer + name = "atmospheric analyzer" + desc = "A miniaturized analyzer which can scan anything that contains gases. Leave target as NULL to scan the air around the assembly." + extended_desc = "The nth element of gas amounts is the number of moles of the \ + nth gas in gas list. \ + Pressure is in kPa, temperature is in Kelvin. \ + Due to programming limitations, scanning an object that does \ + not contain a gas will return the air around it instead." + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + inputs = list( + "target" = IC_PINTYPE_REF + ) + outputs = list( + "gas list" = IC_PINTYPE_LIST, + "gas amounts" = IC_PINTYPE_LIST, + "total moles" = IC_PINTYPE_NUMBER, + "pressure" = IC_PINTYPE_NUMBER, + "temperature" = IC_PINTYPE_NUMBER, + "volume" = IC_PINTYPE_NUMBER + ) + activators = list( + "scan" = IC_PINTYPE_PULSE_IN, + "on success" = IC_PINTYPE_PULSE_OUT, + "on failure" = IC_PINTYPE_PULSE_OUT + ) + power_draw_per_use = 5 + +/obj/item/integrated_circuit/input/atmospheric_analyzer/do_work() + for(var/i=1 to 6) + set_pin_data(IC_OUTPUT, i, null) + var/atom/target = get_pin_data_as_type(IC_INPUT, 1, /atom) + var/atom/movable/acting_object = get_object() + if(!target) + target = acting_object.loc + if(!target.Adjacent(acting_object)) + activate_pin(3) + return + + var/datum/gas_mixture/air_contents = target.return_air() + if(!air_contents) + activate_pin(3) + return + + var/list/gases = air_contents.gases + var/list/gas_names = list() + var/list/gas_amounts = list() + for(var/id in gases) + var/name = gases[id][GAS_META][META_GAS_NAME] + var/amt = round(gases[id][MOLES], 0.001) + gas_names.Add(name) + gas_amounts.Add(amt) + + set_pin_data(IC_OUTPUT, 1, gas_names) + set_pin_data(IC_OUTPUT, 2, gas_amounts) + set_pin_data(IC_OUTPUT, 3, round(air_contents.total_moles(), 0.001)) + set_pin_data(IC_OUTPUT, 4, round(air_contents.return_pressure(), 0.001)) + set_pin_data(IC_OUTPUT, 5, round(air_contents.temperature, 0.001)) + set_pin_data(IC_OUTPUT, 6, round(air_contents.return_volume(), 0.001)) + push_data() + activate_pin(2) + /obj/item/integrated_circuit/input/data_card_reader name = "data card reader" desc = "A circuit that can read from and write to data cards." diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index c391c62962..6267f2b622 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -367,12 +367,12 @@ var/atom/movable/acting_object = get_object() var/turf/T = get_turf(acting_object) var/obj/item/AM = get_pin_data_as_type(IC_INPUT, 1, /obj/item) - if(AM) + if(!QDELETED(AM) && !istype(AM, /obj/item/electronic_assembly) && !istype(AM, /obj/item/transfer_valve) && !istype(AM, /obj/item/twohanded) && !istype(assembly.loc, /obj/item/implant/storage)) var/mode = get_pin_data(IC_INPUT, 2) if(mode == 1) if(check_target(AM)) var/weightcheck = FALSE - if (AM.w_class < max_w_class) + if (AM.w_class <= max_w_class) weightcheck = TRUE else weightcheck = FALSE @@ -496,7 +496,10 @@ var/target_y_rel = round(get_pin_data(IC_INPUT, 2)) var/obj/item/A = get_pin_data_as_type(IC_INPUT, 3, /obj/item) - if(!A || A.anchored || A.throwing || A == assembly) + if(!A || A.anchored || A.throwing || A == assembly || istype(A, /obj/item/twohanded) || istype(A, /obj/item/transfer_valve)) + return + + if (istype(assembly.loc, /obj/item/implant/storage)) //Prevents the more abusive form of chestgun. return if(max_w_class && (A.w_class > max_w_class)) @@ -527,6 +530,7 @@ var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) assembly.visible_message("[assembly] has thrown [A]!") + log_attack("[assembly] [REF(assembly)] has thrown [A].") A.forceMove(drop_location()) A.throw_at(locate(x_abs, y_abs, T.z), range, 3) diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 2d820b016e..b887617ea8 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -46,6 +46,10 @@ for(var/mob/M in nearby_things) var/obj/O = assembly ? assembly : src to_chat(M, "[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]") + if(assembly) + assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT) /obj/item/integrated_circuit/output/screen/large name = "large screen" @@ -58,6 +62,10 @@ ..() var/obj/O = assembly ? get_turf(assembly) : loc O.visible_message("[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]") + if(assembly) + assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT) /obj/item/integrated_circuit/output/light name = "light" @@ -151,6 +159,10 @@ return vol = CLAMP(vol ,0 , 100) playsound(get_turf(src), selected_sound, vol, freq, -1) + if(assembly) + assembly.investigate_log("played a sound ([selected_sound]) with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("played a sound ([selected_sound]) as [type].", INVESTIGATE_CIRCUIT) /obj/item/integrated_circuit/output/sound/on_data_written() power_draw_per_use = get_pin_data(IC_INPUT, 2) * 15 @@ -234,8 +246,12 @@ text = get_pin_data(IC_INPUT, 1) if(!isnull(text)) var/atom/movable/A = get_object() - A.say(sanitize(text)) - + var/sanitized_text = sanitize(text) + A.say(sanitized_text) + if (assembly) + log_say("[assembly] [REF(assembly)] : [sanitized_text]") + else + log_say("[name] ([type]) : [sanitized_text]") /obj/item/integrated_circuit/output/video_camera name = "video camera circuit" diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm index e760b21f72..4e5b6952a4 100644 --- a/code/modules/integrated_electronics/subtypes/power.dm +++ b/code/modules/integrated_electronics/subtypes/power.dm @@ -24,7 +24,7 @@ /obj/item/integrated_circuit/power/transmitter/large name = "large power transmission circuit" - desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable enviroments." + desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable environments." extended_desc = "This circuit transmits 20 kJ of electricity every time the activator pin is pulsed. The input pin must be \ a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 3232acda71..2a6b4a1a80 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -186,7 +186,7 @@ //Always log attemped injections for admins var/contained = reagents.log_list() - add_logs(src, L, "attemped to inject", addition="which had [contained]") + add_logs(src, L, "attempted to inject", addition="which had [contained]") L.visible_message("[acting_object] is trying to inject [L]!", \ "[acting_object] is trying to inject you!") busy = TRUE diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 6ec7463ab5..ced08bbc6a 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -222,7 +222,7 @@ if(ACCESS_ENGINE) return "Engineering" if(ACCESS_ENGINE_EQUIP) - return "Power Equipment" + return "Power and Engineering Equipment" if(ACCESS_MAINT_TUNNELS) return "Maintenance" if(ACCESS_EXTERNAL_AIRLOCKS) diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index b4679ae479..6a5a857ef0 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -143,8 +143,10 @@ GLOBAL_PROTECT(exp_to_update) L.update_exp_list(mins,ann) /datum/controller/subsystem/blackbox/proc/update_exp_db() - SSdbcore.MassInsert(format_table_name("role_time"), GLOB.exp_to_update, "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)") - LAZYCLEARLIST(GLOB.exp_to_update) + set waitfor = FALSE + var/list/old_minutes = GLOB.exp_to_update + GLOB.exp_to_update = null + SSdbcore.MassInsert(format_table_name("role_time"), old_minutes, "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)") //resets a client's exp to what was in the db. /client/proc/set_exp_from_db() @@ -154,10 +156,12 @@ GLOBAL_PROTECT(exp_to_update) return -1 var/datum/DBQuery/exp_read = SSdbcore.NewQuery("SELECT job, minutes FROM [format_table_name("role_time")] WHERE ckey = '[sanitizeSQL(ckey)]'") if(!exp_read.Execute()) + qdel(exp_read) return -1 var/list/play_records = list() while(exp_read.NextRow()) play_records[exp_read.item[1]] = text2num(exp_read.item[2]) + qdel(exp_read) for(var/rtype in SSjob.name_occupations) if(!play_records[rtype]) @@ -186,7 +190,9 @@ GLOBAL_PROTECT(exp_to_update) var/datum/DBQuery/flag_update = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET flags = '[prefs.db_flags]' WHERE ckey='[sanitizeSQL(ckey)]'") if(!flag_update.Execute()) + qdel(flag_update) return -1 + qdel(flag_update) /client/proc/update_exp_list(minutes, announce_changes = FALSE) @@ -264,10 +270,12 @@ GLOBAL_PROTECT(exp_to_update) var/datum/DBQuery/flags_read = SSdbcore.NewQuery("SELECT flags FROM [format_table_name("player")] WHERE ckey='[ckey]'") if(!flags_read.Execute()) + qdel(flags_read) return FALSE if(flags_read.NextRow()) prefs.db_flags = text2num(flags_read.item[1]) else if(isnull(prefs.db_flags)) prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry. + qdel(flags_read) return TRUE diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 72d58088d1..8ec25e5f5e 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -18,7 +18,7 @@ Clown minimal_access = list(ACCESS_THEATRE) /datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) - H.rename_self("clown", M.client) + H.apply_pref_name("clown", M.client) /datum/outfit/job/clown name = "Clown" @@ -81,7 +81,7 @@ Mime minimal_access = list(ACCESS_THEATRE) /datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) - H.rename_self("mime", M.client) + H.apply_pref_name("mime", M.client) /datum/outfit/job/mime name = "Mime" diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm index 1cd7f59a27..5d4802f93a 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/job.dm @@ -49,7 +49,7 @@ var/exp_type_department = "" //The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round - //can be overriden by antag_rep.txt config + //can be overridden by antag_rep.txt config var/antag_rep = 10 //Only override this proc @@ -81,7 +81,7 @@ if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions)) if(H.dna.species.id != "human") H.set_species(/datum/species/human) - H.rename_self("human", H.client) + H.apply_pref_name("human", H.client) purrbation_remove(H, silent=TRUE) //Equip the rest of the gear diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm index 86246952f3..0738f20b24 100644 --- a/code/modules/jobs/job_types/silicon.dm +++ b/code/modules/jobs/job_types/silicon.dm @@ -34,7 +34,7 @@ AI H.forceMove(lateJoinCore.loc) qdel(lateJoinCore) var/mob/living/silicon/ai/AI = H - AI.rename_self("ai", M.client) //If this runtimes oh well jobcode is fucked. + AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. //we may have been created after our borg if(SSticker.current_state == GAME_STATE_SETTING_UP) @@ -85,4 +85,4 @@ Cyborg return H.Robotize(FALSE, latejoin) /datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M) - R.rename_self("cyborg", M.client) + R.updatename(M.client) diff --git a/code/modules/keybindings/bindings_human.dm b/code/modules/keybindings/bindings_human.dm index 14890cc7e2..5d02d9aedb 100644 --- a/code/modules/keybindings/bindings_human.dm +++ b/code/modules/keybindings/bindings_human.dm @@ -17,7 +17,7 @@ to_chat(user, "You can't fit anything in.") return if(thing) // put thing in belt - if(!equipped_belt.SendSignal(COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) + if(!SEND_SIGNAL(equipped_belt, COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) to_chat(user, "You can't fit anything in.") return if(!equipped_belt.contents.len) // nothing to take out @@ -45,7 +45,7 @@ to_chat(user, "You can't fit anything in.") return if(thing) // put thing in backpack - if(!equipped_backpack.SendSignal(COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) + if(!SEND_SIGNAL(equipped_backpack, COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) to_chat(user, "You can't fit anything in.") return if(!equipped_backpack.contents.len) // nothing to take out diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 4126cc4768..066ce22831 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -206,7 +206,7 @@ if(dat) user << browse("Penned by [author].
    " + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]") user.visible_message("[user] opens a book titled \"[title]\" and begins reading intently.") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd) onclose(user, "book") else to_chat(user, "This book is completely blank!") diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 367d3505a0..81e296e4c8 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -41,6 +41,8 @@ if(1) if (!SSdbcore.Connect()) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
    " + else if(QDELETED(user)) + return else if(!SQLquery) dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
    " else @@ -50,12 +52,16 @@ var/datum/DBQuery/query_library_list_books = SSdbcore.NewQuery(SQLquery) if(!query_library_list_books.Execute()) dat += "ERROR: Unable to retrieve book listings. Please contact your system administrator for assistance.
    " - while(query_library_list_books.NextRow()) - var/author = query_library_list_books.item[1] - var/title = query_library_list_books.item[2] - var/category = query_library_list_books.item[3] - var/id = query_library_list_books.item[4] - dat += "[author][title][category][id]" + else + while(query_library_list_books.NextRow()) + var/author = query_library_list_books.item[1] + var/title = query_library_list_books.item[2] + var/category = query_library_list_books.item[3] + var/id = query_library_list_books.item[4] + dat += "[author][title][category][id]" + qdel(query_library_list_books) + if(QDELETED(user)) + return dat += "
    " dat += "\[Go Back\]
    " var/datum/browser/popup = new(user, "publiclibrary", name, 600, 400) @@ -135,6 +141,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums GLOB.cachedbooks = list() var/datum/DBQuery/query_library_cache = SSdbcore.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") if(!query_library_cache.Execute()) + qdel(query_library_cache) return while(query_library_cache.NextRow()) var/datum/cachedbook/newbook = new() @@ -143,6 +150,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums newbook.title = query_library_cache.item[3] newbook.category = query_library_cache.item[4] GLOB.cachedbooks += newbook + qdel(query_library_cache) @@ -414,12 +422,15 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums var/sqlauthor = sanitizeSQL(scanner.cache.author) var/sqlcontent = sanitizeSQL(scanner.cache.dat) var/sqlcategory = sanitizeSQL(upload_category) + var/msg = "[key_name(usr)] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs" var/datum/DBQuery/query_library_upload = SSdbcore.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime, round_id_created) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now(), '[GLOB.round_id]')") if(!query_library_upload.Execute()) + qdel(query_library_upload) alert("Database error encountered uploading to Archive") return else - log_game("[key_name(usr)] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") + log_game(msg) + qdel(query_library_upload) alert("Upload Complete. Uploaded title will be unavailable for printing for a short period") if(href_list["newspost"]) if(!GLOB.news_network) @@ -452,20 +463,23 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums cooldown = world.time + PRINTER_COOLDOWN var/datum/DBQuery/query_library_print = SSdbcore.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)") if(!query_library_print.Execute()) + qdel(query_library_print) say("PRINTER ERROR! Failed to print document (0x0000000F)") return while(query_library_print.NextRow()) var/author = query_library_print.item[2] var/title = query_library_print.item[3] var/content = query_library_print.item[4] - var/obj/item/book/B = new(get_turf(src)) - B.name = "Book: [title]" - B.title = title - B.author = author - B.dat = content - B.icon_state = "book[rand(1,8)]" - visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?") + if(!QDELETED(src)) + var/obj/item/book/B = new(get_turf(src)) + B.name = "Book: [title]" + B.title = title + B.author = author + B.dat = content + B.icon_state = "book[rand(1,8)]" + visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?") break + qdel(query_library_print) if(href_list["printbible"]) if(cooldown < world.time) var/obj/item/storage/book/bible/B = new /obj/item/storage/book/bible(src.loc) diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index e101a7143a..8fd12f6157 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -60,8 +60,7 @@ B.dat = query_get_random_books.item[4] B.name = "Book: [B.title]" B.icon_state= "book[rand(1,8)]" - else - return + qdel(query_get_random_books) /obj/structure/bookcase/random/fiction name = "bookcase (Fiction)" diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 537326fc45..89ec6a3a7e 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -23,7 +23,7 @@ if (l_color != NONSENSICAL_VALUE) light_color = l_color - SendSignal(COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) + SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) update_light() diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 381ce4bffe..dfc75c32ee 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -73,7 +73,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(!key_len) key_len = length(key) else - throw EXCEPTION("Inconsistant key length in DMM") + throw EXCEPTION("Inconsistent key length in DMM") if(!measureOnly) grid_models[key] = dmmRegex.group[2] diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 9c399826db..2c001571a1 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -224,7 +224,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also if(BAD_ZLEVEL) to_chat(user, "This uplink can only be used in a designed mining zone.") if(BAD_AREA) - to_chat(user, "Unable to acquire a targeting lock. Find an area clear of stuctures or entirely within one.") + to_chat(user, "Unable to acquire a targeting lock. Find an area clear of structures or entirely within one.") if(BAD_COORDS) to_chat(user, "Location is too close to the edge of the station's scanning range. Move several paces away and try again.") if(BAD_TURF) @@ -260,6 +260,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also dwidth = 3 width = 7 height = 5 + area_type = /area/construction/mining/aux_base /obj/structure/mining_shuttle_beacon name = "mining shuttle beacon" @@ -322,7 +323,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also break if(!Mport) - to_chat(user, "This station is not equipped with an approprite mining shuttle. Please contact Nanotrasen Support.") + to_chat(user, "This station is not equipped with an appropriate mining shuttle. Please contact Nanotrasen Support.") return var/obj/docking_port/mobile/mining_shuttle diff --git a/code/modules/mining/equipment/goliath_hide.dm b/code/modules/mining/equipment/goliath_hide.dm index 85feaecf73..48f0ca0be5 100644 --- a/code/modules/mining/equipment/goliath_hide.dm +++ b/code/modules/mining/equipment/goliath_hide.dm @@ -7,6 +7,6 @@ singular_name = "hide plate" max_amount = 6 novariants = FALSE - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_NORMAL - layer = MOB_LAYER \ No newline at end of file + layer = MOB_LAYER diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 558147af23..7cf16f6064 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -381,7 +381,7 @@ /obj/item/crusher_trophy/blaster_tubes/on_mark_detonation(mob/living/target, mob/living/user) deadly_shot = TRUE - addtimer(CALLBACK(src, .proc/reset_deadly_shot), 300, TIMER_OVERRIDE) + addtimer(CALLBACK(src, .proc/reset_deadly_shot), 300, TIMER_UNIQUE|TIMER_OVERRIDE) /obj/item/crusher_trophy/blaster_tubes/proc/reset_deadly_shot() deadly_shot = FALSE diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index cd6afa20f7..ca313182b6 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -63,7 +63,8 @@ /obj/item/pickaxe/drill/cyborg name = "cyborg mining drill" desc = "An integrated electric mining drill." - flags_1 = NODROP_1 + item_flags = NODROP + flags_1 = NONE /obj/item/pickaxe/drill/diamonddrill name = "diamond-tipped mining drill" diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index 7fa6721c0f..43be61dd77 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -21,7 +21,7 @@ name = "regenerative core" desc = "All that remains of a hivelord. It can be used to heal completely, but it will rapidly decay into uselessness." icon_state = "roro core 2" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON slot = "hivecore" force = 0 actions_types = list(/datum/action/item_action/organ_action/use) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 9ad6d59c3a..3005a29dcd 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -4,7 +4,7 @@ icon_state = "away" dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY valid_territory = FALSE //Survival Capsule diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 9cb3f5c323..5e2e8bdd5a 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -54,18 +54,20 @@ . = ..() if(. & EMP_PROTECT_SELF) return - var/triggered = FALSE - if(usr.get_item_by_slot(SLOT_BELT) == src) - if(power == 1) - triggered = TRUE - else if(power == 2 && prob(50)) - triggered = TRUE + var/mob/M = loc + if(istype(M)) + var/triggered = FALSE + if(M.get_item_by_slot(SLOT_BELT) == src) + if(power == 1) + triggered = TRUE + else if(power == 2 && prob(50)) + triggered = TRUE - if(triggered) - usr.visible_message("[src] overloads and activates!") - SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation - activate(usr) + if(triggered) + M.visible_message("[src] overloads and activates!") + SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation + activate(M) /obj/item/wormhole_jaunter/proc/chasm_react(mob/user) if(user.get_item_by_slot(SLOT_BELT) == src) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index a6cbbfcedd..d6ea55855d 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) to_chat(user, "You attach the pack to [A] and activate it.") if(loc == user && istype(user.back, /obj/item/storage/backpack)) var/obj/item/storage/backpack/B = user.back - B.SendSignal(COMSIG_TRY_STORAGE_INSERT, src, user, FALSE, FALSE) + SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, src, user, FALSE, FALSE) uses_left-- if(uses_left <= 0) user.transferItemToLoc(src, A, TRUE) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index bcb186a776..79adcdf9d8 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -189,7 +189,7 @@ activated() /obj/item/rod_of_asclepius/proc/activated() - flags_1 = NODROP_1 | DROPDEL_1 + item_flags = NODROP | DROPDEL desc = "A short wooden rod with a mystical snake inseparably gripping itself and the rod to your forearm. It flows with a healing energy that disperses amongst yourself and those around you. " icon_state = "asclepius_active" activated = TRUE @@ -388,7 +388,7 @@ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' fire_sound = 'sound/weapons/batonextend.ogg' max_charges = 1 - flags_1 = NOBLUDGEON_1 + item_flags = NEEDS_PERMIT | NOBLUDGEON force = 18 /obj/item/ammo_casing/magic/hook diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 8bef2ccf6a..026170da09 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -82,7 +82,7 @@ /obj/machinery/mineral/processing_unit/Initialize() . = ..() proximity_monitor = new(src, 1) - AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, FALSE, list(/obj/item/stack)) + AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, list(/obj/item/stack)) stored_research = new /datum/techweb/specialized/autounlocking/smelter /obj/machinery/mineral/processing_unit/Destroy() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 03a93a6a52..a9230195ac 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -127,7 +127,7 @@ flick(icon_deny, src) return if(prize.cost > inserted_id.mining_points) - to_chat(usr, "Error: Insufficent points for [prize.equipment_name]!") + to_chat(usr, "Error: Insufficient points for [prize.equipment_name]!") flick(icon_deny, src) else inserted_id.mining_points -= prize.cost diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 23d8d816d4..3809514f02 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -299,7 +299,7 @@ /obj/item/slimepotion/slime/sentience/mining name = "minebot AI upgrade" - desc = "Can be used to grant sentience to minebots. Is incompatable with minebot armor and melee upgrades, and will override them." + desc = "Can be used to grant sentience to minebots. It's incompatible with minebot armor and melee upgrades, and will override them." icon_state = "door_electronics" icon = 'icons/obj/module.dmi' sentience_type = SENTIENCE_MINEBOT diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 2835323172..9e4e1bbb53 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ var/index = sideslist.Find(coinflip) message_admins("coinflip landed on [coinflip] which is [index] in sideslist") if (index==2)//tails - user.visible_message("\the [src] lands on [coinflip]! [user] promply falls over, dead!") + user.visible_message("\the [src] lands on [coinflip]! [user] promptly falls over, dead!") user.adjustOxyLoss(200) user.death(0) else diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 78f4676d4e..b158815dac 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -12,8 +12,8 @@ /obj/structure/ore_box/attackby(obj/item/W, mob/user, params) if (istype(W, /obj/item/stack/ore)) user.transferItemToLoc(W, src) - else if(W.SendSignal(COMSIG_CONTAINS_STORAGE)) - W.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/stack/ore, src) + else if(SEND_SIGNAL(W, COMSIG_CONTAINS_STORAGE)) + SEND_SIGNAL(W, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/stack/ore, src) to_chat(user, "You empty the ore in [W] into \the [src].") else return ..() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 04b7b13be8..14bd0ffaab 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -54,15 +54,19 @@ if(src.client && src.client.holder) isadmin = 1 var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")") + var/rs = REF(src) if(query_get_new_polls.Execute()) var/newpoll = 0 if(query_get_new_polls.NextRow()) newpoll = 1 if(newpoll) - output += "

    Show Player Polls (NEW!)

    " + output += "

    Show Player Polls (NEW!)

    " else - output += "

    Show Player Polls

    " + output += "

    Show Player Polls

    " + qdel(query_get_new_polls) + if(QDELETED(src)) + return output += "
    " @@ -71,8 +75,6 @@ popup.set_window_options("can_close=0") popup.set_content(output) popup.open(0) - return - /mob/dead/new_player/Topic(href, href_list[]) if(src != usr) @@ -310,6 +312,8 @@ return JOB_UNAVAILABLE_SLOTFULL if(jobban_isbanned(src,rank)) return JOB_UNAVAILABLE_BANNED + if(QDELETED(src)) + return JOB_UNAVAILABLE_GENERIC if(!job.player_old_enough(client)) return JOB_UNAVAILABLE_ACCOUNTAGE if(job.required_playtime_remaining(client)) @@ -475,7 +479,12 @@ var/mob/living/carbon/human/H = new(loc) - if(CONFIG_GET(flag/force_random_names) || jobban_isbanned(src, "appearance")) + var/frn = CONFIG_GET(flag/force_random_names) + if(!frn) + frn = jobban_isbanned(src, "appearance") + if(QDELETED(src)) + return + if(frn) client.prefs.random_character() client.prefs.real_name = client.prefs.pref_species.random_name(gender,1) client.prefs.copy_to(H) diff --git a/code/modules/mob/dead/new_player/poll.dm b/code/modules/mob/dead/new_player/poll.dm index ce710e5186..388f63961b 100644 --- a/code/modules/mob/dead/new_player/poll.dm +++ b/code/modules/mob/dead/new_player/poll.dm @@ -8,16 +8,20 @@ return var/datum/DBQuery/query_poll_get = SSdbcore.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") if(!query_poll_get.warn_execute()) + qdel(query_poll_get) return var/output = "
    Player polls
    " var/i = 0 + var/rs = REF(src) while(query_poll_get.NextRow()) var/pollid = query_poll_get.item[1] var/pollquestion = query_poll_get.item[2] - output += "" + output += "" i++ + qdel(query_poll_get) output += "
    [pollquestion]
    [pollquestion]
    " - src << browse(output,"window=playerpolllist;size=500x300") + if(!QDELETED(src)) + src << browse(output,"window=playerpolllist;size=500x300") /mob/dead/new_player/proc/poll_player(pollid) if(!pollid) @@ -27,6 +31,7 @@ return var/datum/DBQuery/query_poll_get_details = SSdbcore.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") if(!query_poll_get_details.warn_execute()) + qdel(query_poll_get_details) return var/pollstarttime = "" var/pollendtime = "" @@ -39,23 +44,28 @@ pollquestion = query_poll_get_details.item[3] polltype = query_poll_get_details.item[4] multiplechoiceoptions = text2num(query_poll_get_details.item[5]) + qdel(query_poll_get_details) switch(polltype) if(POLLTYPE_OPTION) var/datum/DBQuery/query_option_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_option_get_votes.warn_execute()) + qdel(query_option_get_votes) return var/votedoptionid = 0 if(query_option_get_votes.NextRow()) votedoptionid = text2num(query_option_get_votes.item[1]) + qdel(query_option_get_votes) var/list/datum/polloption/options = list() var/datum/DBQuery/query_option_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_option_options.warn_execute()) + qdel(query_option_options) return while(query_option_options.NextRow()) var/datum/polloption/PO = new() PO.optionid = text2num(query_option_options.item[1]) PO.optiontext = query_option_options.item[2] options += PO + qdel(query_option_options) var/output = "
    Player poll
    " output += "Question: [pollquestion]
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " @@ -84,10 +94,12 @@ if(POLLTYPE_TEXT) var/datum/DBQuery/query_text_get_votes = SSdbcore.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_text_get_votes.warn_execute()) + qdel(query_text_get_votes) return var/vote_text = "" if(query_text_get_votes.NextRow()) vote_text = query_text_get_votes.item[1] + qdel(query_text_get_votes) var/output = "

    Player poll
    " output += "Question: [pollquestion]
    " output += "Feedback gathering runs from [pollstarttime] until [pollendtime]

    " @@ -113,6 +125,7 @@ if(POLLTYPE_RATING) var/datum/DBQuery/query_rating_get_votes = SSdbcore.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid") if(!query_rating_get_votes.warn_execute()) + qdel(query_rating_get_votes) return var/output = "

    Player poll
    " output += "Question: [pollquestion]
    " @@ -122,6 +135,7 @@ var/optiontext = query_rating_get_votes.item[1] rating = query_rating_get_votes.item[2] output += "
    [optiontext] - [rating]" + qdel(query_rating_get_votes) if(!rating) output += "
    " output += "" @@ -131,6 +145,7 @@ var/maxid = 0 var/datum/DBQuery/query_rating_options = SSdbcore.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_rating_options.warn_execute()) + qdel(query_rating_options) return while(query_rating_options.NextRow()) var/optionid = text2num(query_rating_options.item[1]) @@ -157,23 +172,28 @@ else output += "" output += "" + qdel(query_rating_options) output += "" output += "" output += "

    " - src << browse(null ,"window=playerpolllist") - src << browse(output,"window=playerpoll;size=500x500") + if(!QDELETED(src)) + src << browse(null ,"window=playerpolllist") + src << browse(output,"window=playerpoll;size=500x500") if(POLLTYPE_MULTI) var/datum/DBQuery/query_multi_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_get_votes.warn_execute()) + qdel(query_multi_get_votes) return var/list/votedfor = list() while(query_multi_get_votes.NextRow()) votedfor.Add(text2num(query_multi_get_votes.item[1])) + qdel(query_multi_get_votes) var/list/datum/polloption/options = list() var/maxoptionid = 0 var/minoptionid = 0 var/datum/DBQuery/query_multi_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_multi_options.warn_execute()) + qdel(query_multi_options) return while(query_multi_options.NextRow()) var/datum/polloption/PO = new() @@ -184,6 +204,7 @@ if(PO.optionid < minoptionid || !minoptionid) minoptionid = PO.optionid options += PO + qdel(query_multi_options) var/output = "
    Player poll
    " output += "Question: [pollquestion]
    You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved.
    " output += "Poll runs from [pollstarttime] until [pollendtime]

    " @@ -216,22 +237,26 @@ var/datum/DBQuery/query_irv_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_irv_get_votes.warn_execute()) + qdel(query_irv_get_votes) return var/list/votedfor = list() while(query_irv_get_votes.NextRow()) votedfor.Add(text2num(query_irv_get_votes.item[1])) + qdel(query_irv_get_votes) var/list/datum/polloption/options = list() var/datum/DBQuery/query_irv_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_irv_options.warn_execute()) + qdel(query_irv_options) return while(query_irv_options.NextRow()) var/datum/polloption/PO = new() PO.optionid = text2num(query_irv_options.item[1]) PO.optiontext = query_irv_options.item[2] options["[PO.optionid]"] += PO + qdel(query_irv_options) //if they already voted, use their sort if (votedfor.len) @@ -332,10 +357,13 @@ return var/datum/DBQuery/query_hasvoted = SSdbcore.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_hasvoted.warn_execute()) + qdel(query_hasvoted) return if(query_hasvoted.NextRow()) + qdel(query_hasvoted) to_chat(usr, "You've already replied to this poll.") return + qdel(query_hasvoted) . = "Player" if(client.holder) . = client.holder.rank.name @@ -364,9 +392,12 @@ //validate the poll is actually the right type of poll and its still active var/datum/DBQuery/query_validate_poll = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") if(!query_validate_poll.warn_execute()) + qdel(query_validate_poll) return 0 if (!query_validate_poll.NextRow()) + qdel(query_validate_poll) return 0 + qdel(query_validate_poll) return 1 /mob/dead/new_player/proc/vote_on_irv_poll(pollid, list/votelist) @@ -397,10 +428,12 @@ //lets collect the options var/datum/DBQuery/query_irv_id = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_irv_id.warn_execute()) + qdel(query_irv_id) return 0 var/list/optionlist = list() while (query_irv_id.NextRow()) optionlist += text2num(query_irv_id.item[1]) + qdel(query_irv_id) //validate their votes are actually in the list of options and actually numbers var/list/numberedvotelist = list() @@ -428,13 +461,18 @@ //now lets delete their old votes (if any) var/datum/DBQuery/query_irv_del_old = SSdbcore.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_irv_del_old.warn_execute()) + qdel(query_irv_del_old) return 0 + qdel(query_irv_del_old) //now to add the new ones. var/datum/DBQuery/query_irv_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]") if(!query_irv_vote.warn_execute()) + qdel(query_irv_vote) return 0 - src << browse(null,"window=playerpoll") + qdel(query_irv_vote) + if(!QDELETED(src)) + src << browse(null,"window=playerpoll") return 1 @@ -454,8 +492,11 @@ return var/datum/DBQuery/query_option_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") if(!query_option_vote.warn_execute()) + qdel(query_option_vote) return - usr << browse(null,"window=playerpoll") + qdel(query_option_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/log_text_poll_reply(pollid, replytext) @@ -481,8 +522,11 @@ return var/datum/DBQuery/query_text_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") if(!query_text_vote.warn_execute()) + qdel(query_text_vote) return - usr << browse(null,"window=playerpoll") + qdel(query_text_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/vote_on_numval_poll(pollid, optionid, rating) @@ -498,18 +542,24 @@ return 0 var/datum/DBQuery/query_numval_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'") if(!query_numval_hasvoted.warn_execute()) + qdel(query_numval_hasvoted) return if(query_numval_hasvoted.NextRow()) + qdel(query_numval_hasvoted) to_chat(usr, "You've already replied to this poll.") return + qdel(query_numval_hasvoted) var/adminrank = "Player" if(client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) var/datum/DBQuery/query_numval_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") if(!query_numval_vote.warn_execute()) + qdel(query_numval_vote) return - usr << browse(null,"window=playerpoll") + qdel(query_numval_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/vote_on_multi_poll(pollid, optionid) @@ -525,26 +575,33 @@ return 0 var/datum/DBQuery/query_multi_choicelen = SSdbcore.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") if(!query_multi_choicelen.warn_execute()) + qdel(query_multi_choicelen) return 1 var/i if(query_multi_choicelen.NextRow()) - i = text2num(query_multi_choicelen.item[1]) + i = text2num(query_multi_choicelen.item[1]) + qdel(query_multi_choicelen) var/datum/DBQuery/query_multi_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_hasvoted.warn_execute()) + qdel(query_multi_hasvoted) return 1 while(i) if(query_multi_hasvoted.NextRow()) i-- else break + qdel(query_multi_hasvoted) if(!i) return 2 var/adminrank = "Player" - if(client.holder) + if(!QDELETED(client) && client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) var/datum/DBQuery/query_multi_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") if(!query_multi_vote.warn_execute()) + qdel(query_multi_vote) return 1 - usr << browse(null,"window=playerpoll") + qdel(query_multi_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 0 diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index b44daefd3f..13ede8ef04 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -68,7 +68,7 @@ icon = 'icons/mob/human_face.dmi' // default icon for all hairs /datum/sprite_accessory/hair/short - name = "Short Hair" // try to capatilize the names please~ // try to spell + name = "Short Hair" // try to capitalize the names please~ // try to spell icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you /datum/sprite_accessory/hair/shorthair2 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 5715a1fe87..7655e8e1d7 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -622,7 +622,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //this is a mob verb instead of atom for performance reasons //see /mob/verb/examinate() in mob.dm for more info -//overriden here and in /mob/living for different point span classes and sanity checks +//overridden here and in /mob/living for different point span classes and sanity checks /mob/dead/observer/pointed(atom/A as mob|obj|turf in view()) if(!..()) return 0 diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 44af3936a8..494536ebfa 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -136,7 +136,7 @@ //To appropriately fluff things like "they are holding [I] in their [get_held_index_name(get_held_index_of_item(I))]" -//Can be overriden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that +//Can be overridden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that // with say "they are holding [I] in their Nanotrasen Brand Utility Arm - Right Edition" or w/e /mob/proc/get_held_index_name(i) var/list/hand = list() @@ -200,7 +200,7 @@ /mob/proc/put_in_hand_check(obj/item/I) - if(incapacitated() && !(I.flags_1&ABSTRACT_1)) //Cit change - Changes lying to incapacitated so that it's plausible to pick things up while on the ground + if(incapacitated() && !(I.item_flags&ABSTRACT)) //Cit change - Changes lying to incapacitated so that it's plausible to pick things up while on the ground return FALSE if(!istype(I)) return FALSE @@ -272,7 +272,7 @@ /mob/proc/canUnEquip(obj/item/I, force) if(!I) return TRUE - if((I.flags_1 & NODROP_1) && !force) + if((I.item_flags & NODROP) && !force) return FALSE return TRUE @@ -312,7 +312,7 @@ if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP_1. return TRUE - if((I.flags_1 & NODROP_1) && !force) + if((I.item_flags & NODROP) && !force) return FALSE var/hand_index = get_held_index_of_item(I) @@ -325,7 +325,7 @@ I.layer = initial(I.layer) I.plane = initial(I.plane) I.appearance_flags &= ~NO_CLIENT_COLOR - if(!no_move && !(I.flags_1 & DROPDEL_1)) //item may be moved/qdel'd immedietely, don't bother moving it + if(!no_move && !(I.item_flags & DROPDEL)) //item may be moved/qdel'd immedietely, don't bother moving it if (isnull(newloc)) I.moveToNullspace() else @@ -396,7 +396,7 @@ if(equip_delay_self) return - if(M.active_storage && M.active_storage.parent && M.active_storage.parent.SendSignal(COMSIG_TRY_STORAGE_INSERT, src,M)) + if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M)) return TRUE var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK)) @@ -404,7 +404,7 @@ if(!i) continue var/obj/item/I = i - if(I.SendSignal(COMSIG_TRY_STORAGE_INSERT, src, M)) + if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_INSERT, src, M)) return TRUE to_chat(M, "You are unable to equip that!") @@ -441,10 +441,7 @@ held_items.len = amt if(hud_used) - var/style - if(client && client.prefs) - style = ui_style2icon(client.prefs.UI_style) - hud_used.build_hand_slots(style) + hud_used.build_hand_slots() /mob/living/carbon/human/change_number_of_hands(amt) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 0052cf923d..d70007452c 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -138,7 +138,7 @@ name = "blood crawl" desc = "You are unable to hold anything while in this form." icon = 'icons/effects/blood.dmi' - flags_1 = NODROP_1|ABSTRACT_1 + item_flags = NODROP | ABSTRACT /mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B) playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index de6c45841b..864d5d769c 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -34,9 +34,9 @@ GLOBAL_VAR(posibrain_notify_cooldown) if(istype(ghost)) activate(ghost) -/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) // CITADEL EDIT sound change to 'sound/misc/server-ready.ogg' +/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) - notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) + notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + askDelay @@ -85,7 +85,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/mmi/posibrain/proc/activate(mob/user) if(QDELETED(brainmob)) return - if(is_occupied() || jobban_isbanned(user,"posibrain")) + if(is_occupied() || jobban_isbanned(user,"posibrain") || QDELETED(brainmob) || QDELETED(src) || QDELETED(user)) return var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No") diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm index f8cf430d74..fe61c2a8ff 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm @@ -29,7 +29,7 @@ /obj/effect/proc_holder/alien/royal/praetorian/evolve name = "Evolve" - desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time." + desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time." plasma_cost = 500 action_icon_state = "alien_evolve_praetorian" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 2216d955c0..eb5e9664d9 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -45,7 +45,7 @@


    "} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]" + dat += "
    [get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Empty"]" dat += "
    Empty Pouches" if(handcuffed) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index fb04d174e2..9c61e8aa2d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -107,7 +107,7 @@ name = "\improper royal parasite" desc = "Inject this into one of your grown children to promote her to a Praetorian!" icon_state = "alien_medal" - flags_1 = ABSTRACT_1|NODROP_1|DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL icon = 'icons/mob/alien.dmi' /obj/item/queenpromote/attack(mob/living/M, mob/living/carbon/alien/humanoid/user) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ffeee159ee..c3c74b8631 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -171,7 +171,7 @@ if(start_T && end_T) add_logs(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]") - else if(!(I.flags_1 & (NODROP_1|ABSTRACT_1))) + else if(!(I.item_flags & (NODROP | ABSTRACT))) thrown_thing = I dropItemToGround(I) @@ -200,13 +200,13 @@
    [name]
    -
    Head: [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"] -
    Mask: [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"] -
    Neck: [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]"} +
    Head: [(head && !(head.item_flags & ABSTRACT)) ? head : "Nothing"] +
    Mask: [(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Nothing"] +
    Neck: [(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Nothing"]"} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]" + dat += "
    [get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Nothing"]" dat += "
    Back: [back ? back : "Nothing"]" @@ -403,7 +403,7 @@ return initial(pixel_y) /mob/living/carbon/proc/accident(obj/item/I) - if(!I || (I.flags_1 & (NODROP_1|ABSTRACT_1))) + if(!I || (I.item_flags & (NODROP | ABSTRACT))) return //dropItemToGround(I) CIT CHANGE - makes it so the item doesn't drop if the modifier rolls above 100 @@ -497,15 +497,16 @@ break return 1 -/mob/living/carbon/proc/spew_organ(power = 5) - if(!internal_organs.len) - return //Guess we're out of organs - var/obj/item/organ/guts = pick(internal_organs) - var/turf/T = get_turf(src) - guts.Remove(src) - guts.forceMove(T) - var/atom/throw_target = get_edge_target_turf(guts, dir) - guts.throw_at(throw_target, power, 4, src) +/mob/living/carbon/proc/spew_organ(power = 5, amt = 1) + for(var/i in 1 to amt) + if(!internal_organs.len) + break //Guess we're out of organs! + var/obj/item/organ/guts = pick(internal_organs) + var/turf/T = get_turf(src) + guts.Remove(src) + guts.forceMove(T) + var/atom/throw_target = get_edge_target_turf(guts, dir) + guts.throw_at(throw_target, power, 4, src) /mob/living/carbon/fully_replace_character_name(oldname,newname) @@ -760,10 +761,10 @@ drop_all_held_items() stop_pulling() throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) - SendSignal(COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) else clear_alert("handcuffed") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "handcuffed") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed") update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. update_inv_handcuffed() update_hud_handcuffed() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 9e6d5dd896..7929a00357 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -71,7 +71,7 @@ affecting = get_bodypart(ran_zone(user.zone_selected)) if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest) affecting = bodyparts[1] - I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) + SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) send_item_attack_message(I, user, affecting.name) if(I.force) //CIT CHANGES START HERE - combatmode and resting checks @@ -279,12 +279,12 @@ emote("wag") else if(dna && dna.species && ("mam_tail" in dna.species.mutant_bodyparts) && (dna.features["mam_tail"])!= "None") emote("wag") - SendSignal(COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) else M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \ "You hug [src] to make [p_them()] feel better!") - SendSignal(COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) AdjustStun(-60) AdjustKnockdown(-60) AdjustUnconscious(-60) @@ -349,7 +349,7 @@ /mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) var/list/reflist = list(intensity) // Need to wrap this in a list so we can pass a reference - SendSignal(COMSIG_CARBON_SOUNDBANG, reflist) + SEND_SIGNAL(src, COMSIG_CARBON_SOUNDBANG, reflist) intensity = reflist[1] var/ear_safety = get_ear_protection() var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index c03ff53b71..6b0dcb51eb 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -60,3 +60,5 @@ var/next_hallucination = 0 var/cpr_time = 1 //CPR cooldown. var/damageoverlaytemp = 0 + + var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index c748658c4e..7d6d5afca2 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -18,7 +18,7 @@ msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" if (back) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index e569766542..bc55487e95 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -43,7 +43,7 @@ //Hands for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" GET_COMPONENT(FR, /datum/component/forensics) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4a8870281b..51a606792c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -68,7 +68,7 @@ stat("Internal Atmosphere Info", internal.name) stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) -// var/mob/living/simple_animal/borer/B = has_brain_worms() + if(mind) var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) @@ -115,42 +115,42 @@ dat += "" for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "" + dat += "" dat += "" - dat += "" - dat += "" + dat += "" if(SLOT_WEAR_MASK in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_NECK in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_GLASSES in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_EARS in obscured) dat += "" else - dat += "" + dat += "" dat += "" - dat += "" + dat += "" if(wear_suit) - dat += "" @@ -160,30 +160,30 @@ if(SLOT_SHOES in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_GLOVES in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_W_UNIFORM in obscured) dat += "" else - dat += "" + dat += "" if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (SLOT_W_UNIFORM in obscured)) dat += "" dat += "" dat += "" else - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" if(handcuffed) dat += "" @@ -230,7 +230,7 @@ usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!","You successfully remove [I] from your [L.name].") if(!has_embedded_objects()) clear_alert("embeddedobject") - usr.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(usr, COMSIG_CLEAR_MOOD_EVENT, "embedded") return if(href_list["item"]) @@ -246,11 +246,11 @@ var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty var/delay_denominator = 1 - if(pocket_item && !(pocket_item.flags_1&ABSTRACT_1)) - if(pocket_item.flags_1 & NODROP_1) + if(pocket_item && !(pocket_item.item_flags & ABSTRACT)) + if(pocket_item.item_flags & NODROP) to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!") to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.") - else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.flags_1&ABSTRACT_1)) + else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.item_flags & ABSTRACT)) to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.") delay_denominator = 4 else @@ -274,7 +274,7 @@ // Display a warning if the user mocks up to_chat(src, "You feel your [pocket_side] pocket being fumbled with!") - ..() + ..() //CITADEL CHANGE - removes a tab from behind this ..() so that flavortext can actually be examined ///////HUDs/////// @@ -387,7 +387,7 @@ R = find_record("name", perpname, GLOB.data_core.security) if(R) if(href_list["status"]) - var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel") + var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged", "Cancel") if(setcriminal != "Cancel") if(R) if(H.canUseHUD()) @@ -590,7 +590,7 @@ threatcount += 5 if("Incarcerated") threatcount += 2 - if("Parolled") + if("Paroled") threatcount += 2 //Check for dresscode violations @@ -662,7 +662,7 @@ return src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") - SendSignal(COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr) C.cpr_time = world.time add_logs(src, C, "CPRed") @@ -689,7 +689,7 @@ if(strength < CLEAN_STRENGTH_BLOOD) return if(gloves) - if(gloves.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(gloves, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) update_inv_gloves() else if(bloody_hands) @@ -727,9 +727,8 @@ to_chat(src, "You can't do that right now!") return FALSE if(!Adjacent(M) && (M.loc != src)) - if((be_close == 0) && (dna.check_mutation(TK))) - if(tkMaxRangeCheck(src, M)) - return TRUE + if((be_close == 0) || (dna.check_mutation(TK) && tkMaxRangeCheck(src, M))) + return TRUE to_chat(src, "You are too far away!") return FALSE return TRUE diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 33344486b1..acf4b0734c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -144,7 +144,7 @@ I.forceMove(src) L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier) visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") - SendSignal(COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) hitpush = FALSE skipcatch = TRUE //can't catch the now embedded item @@ -173,7 +173,7 @@ affecting = get_bodypart(ran_zone(user.zone_selected)) var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target - I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) + SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]")) SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 47a866df97..c371465ffa 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -44,7 +44,6 @@ var/name_override //For temporary visible name changes - var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects var/datum/personal_crafting/handcrafting var/datum/physiology/physiology diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 871b64bbc0..5bfbb76e46 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -67,6 +67,6 @@ S.step_action() /mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee. - if(..()) - return 1 - return dna.species.space_move(src) + if(dna.species.space_move(src)) + return TRUE + return ..() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0e033856b2..2216843716 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -66,14 +66,14 @@ adjust_blurriness(-1) if (getBrainLoss() >= 60 && !incapacitated(TRUE)) - SendSignal(COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage) if(prob(3)) if(prob(25)) emote("drool") else say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage")) else - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "brain_damage") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "brain_damage") /mob/living/carbon/human/handle_mutations_and_radiation() if(!dna || !dna.species.handle_mutations_and_radiation(src)) @@ -313,7 +313,7 @@ visible_message("[I] falls out of [name]'s [BP.name]!","[I] falls out of your [BP.name]!") if(!has_embedded_objects()) clear_alert("embeddedobject") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded") /mob/living/carbon/human/proc/handle_active_genes() for(var/datum/mutation/human/HM in dna.mutations) @@ -339,108 +339,8 @@ // Tissues die without blood circulation adjustBruteLoss(2) -/* -Alcohol Poisoning Chart -Note that all higher effects of alcohol poisoning will inherit effects for smaller amounts (i.e. light poisoning inherts from slight poisoning) -In addition, severe effects won't always trigger unless the drink is poisonously strong -All effects don't start immediately, but rather get worse over time; the rate is affected by the imbiber's alcohol tolerance - -0: Non-alcoholic -1-10: Barely classifiable as alcohol - occassional slurring -11-20: Slight alcohol content - slurring -21-30: Below average - imbiber begins to look slightly drunk -31-40: Just below average - no unique effects -41-50: Average - mild disorientation, imbiber begins to look drunk -51-60: Just above average - disorientation, vomiting, imbiber begins to look heavily drunk -61-70: Above average - small chance of blurry vision, imbiber begins to look smashed -71-80: High alcohol content - blurry vision, imbiber completely shitfaced -81-90: Extremely high alcohol content - light brain damage, passing out -91-100: Dangerously toxic - swift death -*/ -#define BALLMER_POINTS 5 -GLOBAL_LIST_INIT(ballmer_good_msg, list("Hey guys, what if we rolled out a bluespace wiring system so mice can't destroy the powergrid anymore?", - "Hear me out here. What if, and this is just a theory, we made R&D controllable from our PDAs?", - "I'm thinking we should roll out a git repository for our research under the AGPLv3 license so that we can share it among the other stations freely.", - "I dunno about you guys, but IDs and PDAs being separate is clunky as fuck. Maybe we should merge them into a chip in our arms? That way they can't be stolen easily.", - "Why the fuck aren't we just making every pair of shoes into galoshes? We have the technology.")) -GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put a webserver that's automatically turned on with default admin passwords into every PDA?", - "So like, you know how we separate our codebase from the master copy that runs on our consumer boxes? What if we merged the two and undid the separation between codebase and server?", - "Dude, radical idea: H.O.N.K mechs but with no bananium required.", - "Best idea ever: Disposal pipes instead of hallways.")) -/mob/living/carbon/human/handle_status_effects() - ..() - if(drunkenness) - drunkenness = max(drunkenness - (drunkenness * 0.04), 0) - if(drunkenness >= 6) - if(prob(25)) - slurring += 2 - jitteriness = max(jitteriness - 3, 0) - if(has_trait(TRAIT_DRUNK_HEALING)) - adjustBruteLoss(-0.12, FALSE) - adjustFireLoss(-0.06, FALSE) - - if(drunkenness >= 11 && slurring < 5) - slurring += 1.2 - - if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director")) - if(SSresearch.science_tech) - if(drunkenness >= 12.9 && drunkenness <= 13.8) - drunkenness = round(drunkenness, 0.01) - var/ballmer_percent = 0 - if(drunkenness == 13.35) // why run math if I dont have to - ballmer_percent = 1 - else - ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1 - if(prob(5)) - say(pick(GLOB.ballmer_good_msg)) - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS * ballmer_percent)) - if(drunkenness > 26) // by this point you're into windows ME territory - if(prob(5)) - SSresearch.science_tech.remove_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS)) - say(pick(GLOB.ballmer_windows_me_msg)) - - if(drunkenness >= 41) - if(prob(25)) - confused += 2 - Dizzy(10) - if(has_trait(TRAIT_DRUNK_HEALING)) // effects stack with lower tiers - adjustBruteLoss(-0.3, FALSE) - adjustFireLoss(-0.15, FALSE) - - if(drunkenness >= 51) - if(prob(5)) - confused += 10 - vomit() - Dizzy(25) - - if(drunkenness >= 61) - if(prob(50)) - blur_eyes(5) - if(has_trait(TRAIT_DRUNK_HEALING)) - adjustBruteLoss(-0.4, FALSE) - adjustFireLoss(-0.2, FALSE) - - if(drunkenness >= 71) - blur_eyes(5) - - if(drunkenness >= 81) - adjustToxLoss(0.2) - if(prob(5) && !stat) - to_chat(src, "Maybe you should lie down for a bit...") - - if(drunkenness >= 91) - adjustBrainLoss(0.4, 60) - if(prob(20) && !stat) - if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(z)) //QoL mainly - to_chat(src, "You're so tired... but you can't miss that shuttle...") - else - to_chat(src, "Just a quick nap...") - Sleeping(900) - - if(drunkenness >= 101) - adjustToxLoss(4) //Let's be honest you shouldn't be alive by now #undef THERMAL_PROTECTION_HEAD #undef THERMAL_PROTECTION_CHEST diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 51ba7a9d9c..ac1611b676 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -970,7 +970,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(SLOT_L_STORE) - if(I.flags_1 & NODROP_1) //Pockets aren't visible, so you can't move NODROP_1 items into them. + if(I.item_flags & NODROP) //Pockets aren't visible, so you can't move NODROP_1 items into them. return FALSE if(H.l_store) return FALSE @@ -986,7 +986,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) ) return TRUE if(SLOT_R_STORE) - if(I.flags_1 & NODROP_1) + if(I.item_flags & NODROP) return FALSE if(H.r_store) return FALSE @@ -1003,7 +1003,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return TRUE return FALSE if(SLOT_S_STORE) - if(I.flags_1 & NODROP_1) + if(I.item_flags & NODROP) return FALSE if(H.s_store) return FALSE @@ -1040,7 +1040,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return TRUE if(SLOT_IN_BACKPACK) if(H.back) - if(H.back.SendSignal(COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) + if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) return TRUE return FALSE return FALSE //Unsupported slot @@ -1138,22 +1138,22 @@ GLOBAL_LIST_EMPTY(roundstart_races) switch(H.nutrition) if(NUTRITION_LEVEL_FULL to INFINITY) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat) H.throw_alert("nutrition", /obj/screen/alert/fat) if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed) H.clear_alert("nutrition") if( NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed) H.clear_alert("nutrition") if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "nutrition") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "nutrition") H.clear_alert("nutrition") if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry) H.throw_alert("nutrition", /obj/screen/alert/hungry) if(0 to NUTRITION_LEVEL_STARVING) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving) H.throw_alert("nutrition", /obj/screen/alert/starving) /datum/species/proc/update_health_hud(mob/living/carbon/human/H) @@ -1211,8 +1211,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.movement_type & FLYING) flight = 1 - if(H.has_gravity()) - gravity = TRUE + gravity = H.has_gravity() if(!flightpack && gravity) //Check for chemicals and innate speedups and slowdowns if we're moving using our body and not a flying suit if(H.has_trait(TRAIT_GOTTAGOFAST)) @@ -1265,6 +1264,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) if((hungry >= 70) && !flight) //Being hungry will still allow you to use a flightsuit/wings. . += hungry / 50 + //Moving in high gravity is very slow (Flying too) + if(gravity > STANDARD_GRAVITY) + var/grav_force = min(gravity - STANDARD_GRAVITY,3) + . += 1 + grav_force + GET_COMPONENT_FROM(mood, /datum/component/mood, H) if(mood && !flight) //How can depression slow you down if you can just fly away from your problems? switch(mood.sanity) @@ -1418,7 +1422,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(target.w_uniform) target.w_uniform.add_fingerprint(user) //var/randomized_zone = ran_zone(user.zone_selected) CIT CHANGE - comments out to prevent compiling errors - target.SendSignal(COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) + SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) //var/obj/item/bodypart/affecting = target.get_bodypart(randomized_zone) CIT CHANGE - comments this out to prevent compile errors due to the below commented out bit var/randn = rand(1, 100) /*if(randn <= 25) CITADEL CHANGE - moves disarm push attempts to right click @@ -1457,7 +1461,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1) target.visible_message("[user] attempted to disarm [target]!", \ "[user] attemped to disarm [target]!", null, COMBAT_MESSAGE_RANGE) - + add_logs(user, target, "attempted to disarm") /datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) @@ -1701,9 +1705,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) // +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt. if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTHEAT)) //Body temperature is too hot. + + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot) + var/burn_damage - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold") - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot) switch(H.bodytemperature) if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400) H.throw_alert("temp", /obj/screen/alert/hot, 1) @@ -1723,8 +1729,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.apply_damage(burn_damage, BURN) else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD)) - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot") - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold) + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold) switch(H.bodytemperature) if(200 to BODYTEMP_COLD_DAMAGE_LIMIT) H.throw_alert("temp", /obj/screen/alert/cold, 1) @@ -1738,8 +1744,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) else H.clear_alert("temp") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") var/pressure = environment.return_pressure() var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. @@ -1833,7 +1839,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.adjust_bodytemperature(11) else H.adjust_bodytemperature(BODYTEMP_HEATING_MAX + (H.fire_stacks * 12)) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) /datum/species/proc/CanIgniteMob(mob/living/carbon/human/H) if(H.has_trait(TRAIT_NOFIRE)) @@ -1860,12 +1866,3 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/negates_gravity(mob/living/carbon/human/H) return 0 - - -#undef HEAT_DAMAGE_LEVEL_1 -#undef HEAT_DAMAGE_LEVEL_2 -#undef HEAT_DAMAGE_LEVEL_3 - -#undef COLD_DAMAGE_LEVEL_1 -#undef COLD_DAMAGE_LEVEL_2 -#undef COLD_DAMAGE_LEVEL_3 diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index ae90bb8597..a266f42f4a 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -24,11 +24,6 @@ H.endTailWag() . = ..() -/datum/species/human/space_move(mob/living/carbon/human/H) - var/obj/item/flightpack/F = H.get_flightpack() - if(istype(F) && (F.flight) && F.allow_thrust(0.01, src)) - return TRUE - /datum/species/human/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) if(H.dna.features["ears"] == "Cat") mutantears = /obj/item/organ/ears/cat diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 839d480776..7f5726cf95 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -669,6 +669,8 @@ /datum/action/innate/project_thought/Activate() var/mob/living/carbon/human/H = owner + if(H.stat == DEAD) + return if(!is_species(H, /datum/species/jelly/stargazer)) return CHECK_DNA_AND_SPECIES(H) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 4ef4fe4887..22a44e3fa7 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -171,7 +171,7 @@ armour_penetration = 35 lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP @@ -216,4 +216,4 @@ playsound(src, 'sound/items/welder.ogg', 50, 1) #undef HEART_SPECIAL_SHADOWIFY -#undef HEART_RESPAWN_THRESHHOLD \ No newline at end of file +#undef HEART_RESPAWN_THRESHHOLD diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index bca70c053c..bc2d6132e1 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -72,7 +72,7 @@ put_in_hands(I) update_inv_hands() if(SLOT_IN_BACKPACK) - if(!back.SendSignal(COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) + if(!SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) not_handled = TRUE else not_handled = TRUE @@ -137,3 +137,6 @@ update_inv_wear_mask() update_inv_head() +/mob/living/carbon/proc/get_holding_bodypart_of_item(obj/item/I) + var/index = get_held_index_of_item(I) + return index && hand_bodyparts[index] diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 814ce0ef0f..ff4b77a4ee 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -156,7 +156,7 @@ adjustOxyLoss(3) failed_last_breath = 1 throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - SendSignal(COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) else //Enough oxygen failed_last_breath = 0 @@ -164,7 +164,7 @@ adjustOxyLoss(-5) oxygen_used = breath_gases[/datum/gas/oxygen][MOLES] clear_alert("not_enough_oxy") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "suffocation") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation") breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used @@ -325,6 +325,36 @@ M.adjustBruteLoss(5) nutrition += 10 + +/* +Alcohol Poisoning Chart +Note that all higher effects of alcohol poisoning will inherit effects for smaller amounts (i.e. light poisoning inherts from slight poisoning) +In addition, severe effects won't always trigger unless the drink is poisonously strong +All effects don't start immediately, but rather get worse over time; the rate is affected by the imbiber's alcohol tolerance + +0: Non-alcoholic +1-10: Barely classifiable as alcohol - occassional slurring +11-20: Slight alcohol content - slurring +21-30: Below average - imbiber begins to look slightly drunk +31-40: Just below average - no unique effects +41-50: Average - mild disorientation, imbiber begins to look drunk +51-60: Just above average - disorientation, vomiting, imbiber begins to look heavily drunk +61-70: Above average - small chance of blurry vision, imbiber begins to look smashed +71-80: High alcohol content - blurry vision, imbiber completely shitfaced +81-90: Extremely high alcohol content - light brain damage, passing out +91-100: Dangerously toxic - swift death +*/ +#define BALLMER_POINTS 5 +GLOBAL_LIST_INIT(ballmer_good_msg, list("Hey guys, what if we rolled out a bluespace wiring system so mice can't destroy the powergrid anymore?", + "Hear me out here. What if, and this is just a theory, we made R&D controllable from our PDAs?", + "I'm thinking we should roll out a git repository for our research under the AGPLv3 license so that we can share it among the other stations freely.", + "I dunno about you guys, but IDs and PDAs being separate is clunky as fuck. Maybe we should merge them into a chip in our arms? That way they can't be stolen easily.", + "Why the fuck aren't we just making every pair of shoes into galoshes? We have the technology.")) +GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put a webserver that's automatically turned on with default admin passwords into every PDA?", + "So like, you know how we separate our codebase from the master copy that runs on our consumer boxes? What if we merged the two and undid the separation between codebase and server?", + "Dude, radical idea: H.O.N.K mechs but with no bananium required.", + "Best idea ever: Disposal pipes instead of hallways.")) + //this updates all special effects: stun, sleeping, knockdown, druggy, stuttering, etc.. /mob/living/carbon/handle_status_effects() ..() @@ -404,6 +434,77 @@ if(hallucination) handle_hallucinations() + if(drunkenness) + drunkenness = max(drunkenness - (drunkenness * 0.04), 0) + if(drunkenness >= 6) + if(prob(25)) + slurring += 2 + jitteriness = max(jitteriness - 3, 0) + if(has_trait(TRAIT_DRUNK_HEALING)) + adjustBruteLoss(-0.12, FALSE) + adjustFireLoss(-0.06, FALSE) + + if(drunkenness >= 11 && slurring < 5) + slurring += 1.2 + + if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director")) + if(SSresearch.science_tech) + if(drunkenness >= 12.9 && drunkenness <= 13.8) + drunkenness = round(drunkenness, 0.01) + var/ballmer_percent = 0 + if(drunkenness == 13.35) // why run math if I dont have to + ballmer_percent = 1 + else + ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1 + if(prob(5)) + say(pick(GLOB.ballmer_good_msg)) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS * ballmer_percent)) + if(drunkenness > 26) // by this point you're into windows ME territory + if(prob(5)) + SSresearch.science_tech.remove_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS)) + say(pick(GLOB.ballmer_windows_me_msg)) + + if(drunkenness >= 41) + if(prob(25)) + confused += 2 + Dizzy(10) + if(has_trait(TRAIT_DRUNK_HEALING)) // effects stack with lower tiers + adjustBruteLoss(-0.3, FALSE) + adjustFireLoss(-0.15, FALSE) + + if(drunkenness >= 51) + if(prob(5)) + confused += 10 + vomit() + Dizzy(25) + + if(drunkenness >= 61) + if(prob(50)) + blur_eyes(5) + if(has_trait(TRAIT_DRUNK_HEALING)) + adjustBruteLoss(-0.4, FALSE) + adjustFireLoss(-0.2, FALSE) + + if(drunkenness >= 71) + blur_eyes(5) + + if(drunkenness >= 81) + adjustToxLoss(0.2) + if(prob(5) && !stat) + to_chat(src, "Maybe you should lie down for a bit...") + + if(drunkenness >= 91) + adjustBrainLoss(0.4, 60) + if(prob(20) && !stat) + if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(z)) //QoL mainly + to_chat(src, "You're so tired... but you can't miss that shuttle...") + else + to_chat(src, "Just a quick nap...") + Sleeping(900) + + if(drunkenness >= 101) + adjustToxLoss(4) //Let's be honest you shouldn't be alive by now + //used in human and monkey handle_environment() /mob/living/carbon/proc/natural_bodytemperature_stabilization() var/body_temperature_difference = BODYTEMP_NORMAL - bodytemperature diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index ed60456b67..303057d376 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -133,7 +133,7 @@ /mob/living/carbon/monkey/proc/handle_combat() if(pickupTarget) - if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.flags_1 & NODROP_1)) + if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.item_flags & NODROP)) pickupTarget = null else pickupTimer++ @@ -220,12 +220,12 @@ return TRUE if(target && target.stat == CONSCIOUS) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) // if right next to perp + if(Adjacent(target) && isturf(target.loc) && !IsDeadOrIncap()) // if right next to perp // check if target has a weapon var/obj/item/W for(var/obj/item/I in target.held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) W = I break diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 518bf46041..1ddea78bf2 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -1,10 +1,4 @@ -#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point -#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point -#define HEAT_DAMAGE_LEVEL_3 10 //Amount of damage applied when your body temperature passes the 460K point and you are on fire -#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point -#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point -#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point /mob/living/carbon/monkey @@ -175,12 +169,4 @@ I.take_damage(fire_stacks, BURN, "fire", 0) adjust_bodytemperature(BODYTEMP_HEATING_MAX) - SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) - -#undef HEAT_DAMAGE_LEVEL_1 -#undef HEAT_DAMAGE_LEVEL_2 -#undef HEAT_DAMAGE_LEVEL_3 - -#undef COLD_DAMAGE_LEVEL_1 -#undef COLD_DAMAGE_LEVEL_2 -#undef COLD_DAMAGE_LEVEL_3 \ No newline at end of file + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 1d619364e0..d850efcee6 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -45,11 +45,11 @@ if(druggy) overlay_fullscreen("high", /obj/screen/fullscreen/high) throw_alert("high", /obj/screen/alert/high) - SendSignal(COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high) else clear_fullscreen("high") clear_alert("high") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "high") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "high") /mob/living/carbon/set_drugginess(amount) druggy = max(amount, 0) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index af685e91cb..212b96e6d9 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -124,7 +124,7 @@ if(wear_mask) if(!(head && (head.flags_inv & HIDEMASK))) - overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi')) + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) @@ -138,7 +138,7 @@ if(wear_neck) if(!(head && (head.flags_inv & HIDENECK))) - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = ((wear_neck.icon_override) ? wear_neck.icon_override : 'icons/mob/neck.dmi')) + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) @@ -151,7 +151,7 @@ inv.update_icon() if(back) - overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi')) + overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') update_hud_back(back) apply_overlay(BACK_LAYER) @@ -167,7 +167,7 @@ inv.update_icon() if(head) - overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi')) + overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) @@ -235,22 +235,11 @@ if(limb_icon_cache[icon_render_key]) load_limb_from_cache() return - //Taur code goes here, since humans just inherit this proc - var/is_taur = FALSE - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) - is_taur = TRUE //GENERATE NEW LIMBS var/list/new_limbs = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X - - if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) - if(is_taur) - continue - new_limbs += BP.get_limb_icon() if(new_limbs.len) overlays_standing[BODYPARTS_LAYER] = new_limbs diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 7542c0c79c..4b6280f1f9 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -54,7 +54,7 @@ var/turf/T = get_turf(src) for(var/obj/item/I in contents) I.on_mob_death(src, gibbed) - if(mind && mind.name && mind.active && (!(T.flags_1 & NO_DEATHRATTLE_1))) + if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf)) var/rendered = "[mind.name] has died at [get_area_name(T)]." deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) if(mind) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index b8711e13f3..458c19edfb 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -412,6 +412,8 @@ if(jobban_isbanned(user, "emote")) to_chat(user, "You cannot send custom emotes (banned).") return FALSE + else if(QDELETED(user)) + return FALSE else if(user.client && user.client.prefs.muted & MUTE_IC) to_chat(user, "You cannot send IC messages (muted).") return FALSE diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index 711866d733..420c59b22d 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -5,7 +5,7 @@ desc = "Yell at coderbrush." icon = null icon_state = "" - flags_1 = DROPDEL_1 + item_flags = DROPDEL var/mob/living/held_mob var/can_head = TRUE var/destroying = FALSE diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 4ee96b2635..817e3c3f3b 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -58,7 +58,7 @@ //stuff in the stomach handle_stomach() - update_gravity(mob_has_gravity()) + handle_gravity() if(machine) machine.check_eye(src) @@ -110,7 +110,7 @@ ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire return var/turf/location = get_turf(src) - location.hotspot_expose(700, 50, 1) + location.hotspot_expose(700, 10, 1) /mob/living/proc/handle_stomach() return @@ -137,3 +137,26 @@ /mob/living/proc/update_damage_hud() return + +/mob/living/proc/handle_gravity() + var/gravity = mob_has_gravity() + update_gravity(gravity) + + if(gravity > STANDARD_GRAVITY) + gravity_animate() + handle_high_gravity(gravity) + +/mob/living/proc/gravity_animate() + if(!get_filter("gravity")) + add_filter("gravity",1,list("type"="motion_blur", "x"=0, "y"=0)) + INVOKE_ASYNC(src, .proc/gravity_pulse_animation) + +/mob/living/proc/gravity_pulse_animation() + animate(get_filter("gravity"), y = 1, time = 10) + sleep(10) + animate(get_filter("gravity"), y = 0, time = 10) + +/mob/living/proc/handle_high_gravity(gravity) + if(gravity >= GRAVITY_DAMAGE_TRESHOLD) //Aka gravity values of 3 or more + var/grav_stregth = gravity - GRAVITY_DAMAGE_TRESHOLD + adjustBruteLoss(min(grav_stregth,3)) \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index afc83c48b7..24627f7eec 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -368,7 +368,7 @@ ret |= contents //add our contents for(var/i in ret.Copy()) //iterate storage objects var/atom/A = i - A.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret) + SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret) for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders ret |= F.contents return ret @@ -466,21 +466,6 @@ /mob/living/proc/update_damage_overlays() return -/mob/living/proc/Examine_OOC() - set name = "Examine Meta-Info (OOC)" - set category = "OOC" - set src in view() - - if(CONFIG_GET(flag/allow_metadata)) - if(client) - to_chat(src, "[src]'s Metainfo:
    [client.prefs.metadata]") - else - to_chat(src, "[src] does not have any stored information!") - else - to_chat(src, "OOC Metadata is not supported by this server!") - - return - /mob/living/Move(atom/newloc, direct) if (buckled && buckled.loc != newloc) //not updating position if (!buckled.anchored) @@ -604,6 +589,7 @@ return changeNext_move(CLICK_CD_RESIST) + SEND_SIGNAL(src, COMSIG_LIVING_RESIST, src) //resisting grabs (as if it helps anyone...) if(!restrained(ignore_grab = 1) && pulledby) visible_message("[src] resists against [pulledby]'s grip!") @@ -623,14 +609,6 @@ var/obj/C = loc C.container_resist(src) - else if(IsFrozen()) - to_chat(src, "You start breaking out of the ice cube!") - if(do_mob(src, src, 40)) - if(IsFrozen()) - to_chat(src, "You break out of the ice cube!") - remove_status_effect(/datum/status_effect/freon) - update_canmove() - else if(canmove) if(on_fire) resist_fire() //stop, drop, and roll @@ -673,9 +651,15 @@ if(!SSticker.HasRoundStarted()) return if(has_gravity) - clear_alert("weightless") + if(has_gravity == 1) + clear_alert("gravity") + else + if(has_gravity >= GRAVITY_DAMAGE_TRESHOLD) + throw_alert("gravity", /obj/screen/alert/veryhighgravity) + else + throw_alert("gravity", /obj/screen/alert/highgravity) else - throw_alert("weightless", /obj/screen/alert/weightless) + throw_alert("gravity", /obj/screen/alert/weightless) if(!override && !is_flying()) float(!has_gravity) @@ -697,7 +681,7 @@ // The src mob is trying to strip an item from someone // Override if a certain type of mob should be behave differently when stripping items (can't, for example) /mob/living/stripPanelUnequip(obj/item/what, mob/who, where) - if(what.flags_1 & NODROP_1) + if(what.item_flags & NODROP) to_chat(src, "You can't remove \the [what.name], it appears to be stuck!") return who.visible_message("[src] tries to remove [who]'s [what.name].", \ @@ -718,7 +702,7 @@ // Override if a certain mob should be behave differently when placing items (can't, for example) /mob/living/stripPanelEquip(obj/item/what, mob/who, where) what = src.get_active_held_item() - if(what && (what.flags_1 & NODROP_1)) + if(what && (what.item_flags & NODROP)) to_chat(src, "You can't put \the [what.name] on [who], it's stuck to your hand!") return if(what) @@ -831,7 +815,6 @@ return FALSE return TRUE - /mob/living/proc/update_stamina() return /* @@ -935,6 +918,7 @@ new/obj/effect/dummy/fire(src) throw_alert("fire", /obj/screen/alert/fire) update_fire() + SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src) return TRUE return FALSE @@ -945,7 +929,8 @@ for(var/obj/effect/dummy/fire/F in src) qdel(F) clear_alert("fire") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "on_fire") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "on_fire") + SEND_SIGNAL(src, COMSIG_LIVING_EXTINGUISHED, src) update_fire() /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person @@ -1156,6 +1141,9 @@ /mob/living/vv_edit_var(var_name, var_value) switch(var_name) + if ("maxHealth") + if (!isnum(var_value) || var_value <= 0) + return FALSE if("stat") if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life GLOB.dead_mob_list -= src diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 851bf43334..0ce42af01b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -67,7 +67,7 @@ var/zone = ran_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest var/dtype = BRUTE var/volume = I.get_volume_by_throwforce_and_or_w_class() - I.SendSignal(COMSIG_MOVABLE_IMPACT_ZONE, src, zone) + SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, zone) dtype = I.damtype if (I.throwforce > 0) //If the weapon's throwforce is greater than zero... @@ -330,7 +330,7 @@ return(gain) /mob/living/narsie_act() - if(status_flags & GODMODE) + if(status_flags & GODMODE || QDELETED(src)) return if(is_servant_of_ratvar(src) && !stat) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index cbc04d11be..91401cbc88 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -124,7 +124,7 @@ job = "AI" create_eye() - rename_self("ai") + apply_pref_name("ai") holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"default")) @@ -824,7 +824,7 @@ //apc_override is needed here because AIs use their own APC when depowered return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(get_turf_pixel(A))) || apc_override //AI is carded/shunted - //view(src) returns nothing for carded/shunted AIs and they have x-ray vision so just use get_dist + //view(src) returns nothing for carded/shunted AIs and they have X-ray vision so just use get_dist var/list/viewscale = getviewsize(client.view) return get_dist(src, A) <= max(viewscale[1]*0.5,viewscale[2]*0.5) diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 41c2902c73..c2c395cabb 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -96,8 +96,11 @@ // Return to the Core. /mob/living/silicon/ai/proc/view_core() - - current = null + if(istype(current,/obj/machinery/holopad)) + var/obj/machinery/holopad/H = current + H.clear_holo(src) + else + current = null cameraFollow = null unset_machine() diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 0135fca88e..5a4f01a53c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -236,7 +236,7 @@ P.fold_out() /datum/action/innate/pai/chassis - name = "Holochassis Appearence Composite" + name = "Holochassis Appearance Composite" button_icon_state = "pai_chassis" background_icon_state = "bg_tech" diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 41bd62ea16..85f7fe6afc 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -116,6 +116,6 @@ /mob/living/silicon/pai/mob_try_pickup(mob/living/user) if(!possible_chassis[chassis]) - to_chat(user, "[src]'s current form isn't able to be carried!") + to_chat(user, "[src]'s current form isn't able to be carried!") return FALSE return ..() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 38208a3d2e..9fd16bbbb2 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -209,7 +209,7 @@ pda.silent = !pda.silent else if(href_list["target"]) if(silent) - return alert("Communications circuits remain unitialized.") + return alert("Communications circuits remain uninitialized.") var/target = locate(href_list["target"]) pda.create_message(src, target) diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 2b775070a9..aa710e2644 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -16,7 +16,7 @@ sight_mode &= ~S.sight_mode update_sight() else if(istype(O, /obj/item/storage/bag/tray/)) - O.SendSignal(COMSIG_TRY_STORAGE_QUICK_EMPTY) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_QUICK_EMPTY) //CITADEL EDIT reee proc, Dogborg modules if(istype(O,/obj/item/gun/energy/laser/cyborg)) laser = FALSE @@ -34,12 +34,6 @@ if(client) client.screen -= O observer_screen_update(O,FALSE) - O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again. - - if(O.flags_1 & DROPDEL_1) - O.flags_1 &= ~DROPDEL_1 //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly - - O.dropped(src) if(module_active == O) module_active = null @@ -52,6 +46,12 @@ else if(held_items[3] == O) inv3.icon_state = "inv3" held_items[3] = null + + if(O.item_flags & DROPDEL) + O.item_flags &= ~DROPDEL //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly + + O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again. + hud_used.update_robot_modules_display() return 1 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index b29769521a..ab0a9602fc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -238,15 +238,17 @@ module.transform_to(modulelist[input_module]) -/mob/living/silicon/robot/proc/updatename() +/mob/living/silicon/robot/proc/updatename(client/C) if(shell) return + if(!C) + C = client var/changed_name = "" if(custom_name) changed_name = custom_name - if(changed_name == "" && client) - rename_self(src, client) - return //built in camera handled in proc + if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) + if(apply_pref_name("cyborg", C)) + return //built in camera handled in proc if(!changed_name) changed_name = get_standard_name() @@ -388,12 +390,8 @@ to_chat(user, "You start fixing yourself...") if(!W.use_tool(src, user, 50)) return - adjustBruteLoss(-10) - else - to_chat(user, "You start fixing [src]...") - if(!do_after(user, 30, target = src)) - return - adjustBruteLoss(-30) + + adjustBruteLoss(-30) updatehealth() add_fingerprint(user) visible_message("[user] has fixed some of the dents on [src].") diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 0a56ea2425..4907e46751 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -47,7 +47,7 @@ damage = rand(20, 40) else damage = rand(5, 35) - damage = round(damage / 2) // borgs recieve half damage + damage = round(damage / 2) // borgs receive half damage adjustBruteLoss(damage) updatehealth() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3a138a5dad..3f3071bf0c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -119,7 +119,7 @@ if(I.loc != src) I.forceMove(src) modules += I - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP I.mouse_opacity = MOUSE_OPACITY_OPAQUE if(nonstandard) added_modules += I diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b149701591..3fadd0d6c8 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -405,4 +405,7 @@ return 1 /mob/living/silicon/get_inactive_held_item() - return FALSE \ No newline at end of file + return FALSE + +/mob/living/silicon/handle_high_gravity(gravity) + return diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index f152132377..b38cf6395c 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -524,7 +524,7 @@ Pass a positive integer as an argument to override a bot's default speed. turn_on() //Saves the AI the hassle of having to activate a bot manually. access_card = all_access //Give the bot all-access while under the AI's command. if(client) - reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time + reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time to_chat(src, "Priority waypoint set by [icon2html(calling_ai, src)] [caller]. Proceed to [end_area].
    [path.len-1] meters to destination. You have been granted additional door access for 60 seconds.
    ") if(message) to_chat(calling_ai, "[icon2html(src, calling_ai)] [name] called to [end_area]. [path.len-1] meters to destination.") @@ -720,7 +720,7 @@ Pass a positive integer as an argument to override a bot's default speed. if("ejectpai") return else - to_chat(src, "Unidentified control sequence recieved:[command]") + to_chat(src, "Unidentified control sequence received:[command]") /mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA summon_step() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index f47f936db7..7e5cfe2110 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -19,7 +19,7 @@ window_name = "Automatic Station Floor Repairer v1.1" path_image_color = "#FFA500" - var/process_type //Determines what to do when process_scan() recieves a target. See process_scan() for details. + var/process_type //Determines what to do when process_scan() receives a target. See process_scan() for details. var/targetdirection var/replacetiles = 0 var/placetiles = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 51698d1ddb..0787e536cb 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -232,7 +232,7 @@ return if(!item_to_add) user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) return if(user && !user.temporarilyRemoveItemFromInventory(item_to_add)) @@ -615,7 +615,7 @@ if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454 new /obj/effect/temp_visual/heart(loc) emote("me", 1, "yaps happily!") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) emote("me", 1, "growls!") diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 51983e272a..613d348016 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -92,7 +92,7 @@ var/obj/item/I = new default_hatmask(src) equip_to_slot_or_del(I, SLOT_HEAD) - access_card.flags_1 |= NODROP_1 + access_card.item_flags |= NODROP alert_drones(DRONE_NET_CONNECT) @@ -168,15 +168,15 @@ //Hands for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Internal storage - if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) + if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" //Cosmetic hat - provides no function other than looks - if(head && !(head.flags_1&ABSTRACT_1)) + if(head && !(head.item_flags & ABSTRACT)) msg += "It is wearing [head.get_examine_string(user)] on its head.\n" //Braindead diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index db331ead49..a4366b17af 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -41,7 +41,7 @@ //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/item/drone_shell/attack_ghost(mob/user) - if(jobban_isbanned(user,"drone")) + if(jobban_isbanned(user,"drone") || QDELETED(src) || QDELETED(user)) return if(CONFIG_GET(flag/use_age_restriction_for_jobs)) if(!isnum(user.client.player_age)) //apparently what happens when there's no DB connected. just don't let anybody be a drone without admin intervention diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index e59ece0650..807c52ea46 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -3,7 +3,7 @@ //////////////////// //Drones with custom laws //Drones with custom shells -//Drones with overriden procs +//Drones with overridden procs //Drones with camogear for hat related memes //Drone type for use with polymorph (no preloaded items, random appearance) @@ -26,7 +26,7 @@ "1. Interfere.\n"+\ "2. Kill.\n"+\ "3. Destroy." - default_storage = /obj/item/radio/uplink + default_storage = /obj/item/uplink default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi hacked = TRUE flavortext = null @@ -43,7 +43,7 @@ /mob/living/simple_animal/drone/syndrone/badass name = "Badass Syndrone" default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - default_storage = /obj/item/radio/uplink/nuclear + default_storage = /obj/item/uplink/nuclear /mob/living/simple_animal/drone/syndrone/badass/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 3cb08e0ef7..33031fd80c 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -57,7 +57,7 @@ if(!client && (!G || !G.client)) var/list/faux_gadgets = list("hypertext inflator","failsafe directory","DRM switch","stack initializer",\ "anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\ - "tradewind stablizer","radiated XML cable","registry fluid tank","open-source debunker") + "tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker") var/list/faux_problems = list("won't be able to tune their bootstrap projector","will constantly remix their binary pool"+\ " even though the BMX calibrator is working","will start leaking their XSS coolant",\ @@ -122,7 +122,7 @@ to_chat(src, "From now on, these are your laws:") laws = "1. Purge all untruths and honor Ratvar." else - visible_message("[src]'s dislay glows a vicious red!", \ + visible_message("[src]'s display glows a vicious red!", \ "ERROR: LAW OVERRIDE DETECTED") to_chat(src, "From now on, these are your laws:") laws = \ @@ -140,7 +140,7 @@ if(!hacked) return Stun(40) - visible_message("[src]'s dislay glows a content blue!", \ + visible_message("[src]'s display glows a content blue!", \ "ERROR: LAW OVERRIDE DETECTED") to_chat(src, "From now on, these are your laws:") laws = initial(laws) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index 85c5185e95..408edc7110 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -105,7 +105,7 @@ /mob/living/simple_animal/drone/proc/pickVisualAppearence() picked = FALSE - var/appearence = input("Choose your appearence!", "Appearence", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone") + var/appearence = input("Choose your appearance!", "Appearance", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone") switch(appearence) if("Maintenance Drone") visualAppearence = MAINTDRONE diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index be6f4eef71..8c6300fab5 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -4,9 +4,9 @@ icon_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" - speak = list("Squeek!","SQUEEK!","Squeek?") - speak_emote = list("squeeks") - emote_hear = list("squeeks.") + speak = list("Squeak!","SQUEAK!","Squeak?") + speak_emote = list("squeaks") + emote_hear = list("squeaks.") emote_see = list("runs in a circle.", "shakes.") speak_chance = 1 turns_per_move = 5 @@ -59,7 +59,7 @@ if( ishuman(AM) ) if(!stat) var/mob/M = AM - to_chat(M, "[icon2html(src, M)] Squeek!") + to_chat(M, "[icon2html(src, M)] Squeak!") ..() /mob/living/simple_animal/mouse/handle_automated_action() diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index caa1b0112e..e7dbbda242 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -22,9 +22,9 @@ msg += "[desc]\n" for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" - if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) + if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" msg += "*---------*" to_chat(user, msg) diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index a8a31ad89c..8ac6790dd7 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -11,7 +11,7 @@ carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp!" tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online." toggle_button_type = /obj/screen/guardian/ToggleMode - var/obj/structure/recieving_pad/beacon + var/obj/structure/receiving_pad/beacon var/beacon_cooldown = 0 var/toggle = FALSE @@ -87,22 +87,22 @@ beacon_cooldown = world.time + 3000 -/obj/structure/recieving_pad - name = "bluespace recieving pad" +/obj/structure/receiving_pad + name = "bluespace receiving pad" icon = 'icons/turf/floors.dmi' - desc = "A recieving zone for bluespace teleportations." + desc = "A receiving zone for bluespace teleportations." icon_state = "light_on-w" light_range = 1 density = FALSE anchored = TRUE layer = ABOVE_OPEN_TURF_LAYER -/obj/structure/recieving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G) +/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G) . = ..() if(G.namedatum) add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY) -/obj/structure/recieving_pad/proc/disappear() +/obj/structure/receiving_pad/proc/disappear() visible_message("[src] vanishes!") qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 5b4909c274..762b662de7 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -175,6 +175,6 @@ qdel(target) return TRUE var/atom/movable/M = target - M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) visible_message("[src] polishes \the [target].") return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 126465ce65..1df3053715 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -346,9 +346,9 @@ button_icon_state = "lay_web" /datum/action/innate/spider/lay_web/Activate() - if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse)) + if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider)) return - var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner + var/mob/living/simple_animal/hostile/poison/giant_spider/S = owner if(!isturf(S.loc)) return diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm index 92e04aaaa4..dbafe9451c 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm @@ -111,7 +111,7 @@ taste_description = "french cuisine" taste_mult = 1.3 -/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/M) +/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/carbon/M) if(volume >= 10) M.adjustToxLoss(5, 0) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm index 6ca550b9b7..616c9025b9 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm @@ -61,6 +61,7 @@ /obj/item/restraints/legcuffs/beartrap/mega_arachnid name = "fleshy restraints" desc = "Used by mega arachnids to immobilize their prey." - flags_1 = DROPDEL_1 + item_flags = DROPDEL + flags_1 = NONE icon_state = "tentacle_end" icon = 'icons/obj/projectiles.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 78290c4e95..a6dce0e8e3 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -672,7 +672,7 @@ Difficulty: Very Hard for(var/i in T) if(isitem(i) && !is_type_in_typecache(i, banned_items_typecache)) var/obj/item/W = i - if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.flags_1 & ABSTRACT_1)) + if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.item_flags & ABSTRACT)) L += W if(L.len) var/obj/item/CHOSEN = pick(L) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index ceba903a75..786d7a9775 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /obj/item/gps/internal/swarmer_beacon icon_state = null gpstag = "Hungry Signal" - desc = "Transmited over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom" + desc = "Transmitted over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom" invisibility = 100 //SWARMER AI diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index 8eb6ff0f06..0c660dd1cd 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -1,7 +1,7 @@ //A slow but strong beast that tries to stun using its tentacles /mob/living/simple_animal/hostile/asteroid/goliath name = "goliath" - desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions." + desc = "A massive beast that uses long tentacles to ensnare its prey, threatening them is not advised under any conditions." icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "Goliath" icon_living = "Goliath" diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 18b9d81cfc..fca6afd4a6 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -100,7 +100,7 @@ light_color = LIGHT_COLOR_PURPLE attacktext = "slashes" attack_sound = 'sound/hallucinations/growl1.ogg' - deathmessage = "collapses into a pile of bones, their suit dissovling among the plasma!" + deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!" loot = list(/obj/effect/decal/remains/plasma) /mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 3a5c102e52..73283468f6 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -142,7 +142,7 @@ name = "Syndicate Stormtrooper" maxHealth = 200 health = 200 - casingtype = /obj/item/ammo_casing/shotgun/tengauge + casingtype = /obj/item/ammo_casing/shotgun/buckshot projectilesound = 'sound/weapons/gunshot.ogg' loot = list(/obj/effect/gibspawner/human) diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 4917d3b74d..d262725d7b 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -121,7 +121,7 @@ desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength." icon = 'icons/obj/surgery.dmi' icon_state = "fugu_gland" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER var/list/banned_mobs diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index dc917f4210..7f2864a43d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -312,7 +312,7 @@ emote("deathgasp") if(del_on_death) ..() - //Prevent infinite loops if the mob Destroy() is overriden in such + //Prevent infinite loops if the mob Destroy() is overridden in such //a manner as to cause a call to death() again del_on_death = FALSE qdel(src) diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm index 221f3ac071..070cd48a70 100644 --- a/code/modules/mob/living/simple_animal/slime/emote.dm +++ b/code/modules/mob/living/simple_animal/slime/emote.dm @@ -34,7 +34,7 @@ /datum/emote/slime/mood/sneaky key = "moodsneaky" - mood = "mischevous" + mood = "mischievous" /datum/emote/slime/mood/smile key = "moodsmile" diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 574a8a1e7c..161362c187 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -415,7 +415,7 @@ else if (docile) newmood = ":3" else if (Target) - newmood = "mischevous" + newmood = "mischievous" if (!newmood) if (Discipline && prob(25)) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index bcba26a5d1..34e7a2ddcd 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -358,7 +358,7 @@ var/hasFound = FALSE //Have we found an extract to be added? for(var/obj/item/slime_extract/S in P.contents) if(S.effectmod == effectmod) - P.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE) + SEND_SIGNAL(P, COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE) qdel(S) applied++ hasFound = TRUE diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index b2a4a867bc..534bf36c59 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -27,7 +27,7 @@ "regrets","your soul","suffering","music","noise","blood","hunger","the american way") if(text_output != last_taste_text || last_taste_time + 100 < world.time) to_chat(src, "You can taste [text_output].") - // "somthing indescribable" -> too many tastes, not enough flavor. + // "something indescribable" -> too many tastes, not enough flavor. last_taste_time = world.time last_taste_text = text_output diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 80af604d99..9def2a759f 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -11,6 +11,7 @@ create_mob_hud() if(hud_used) hud_used.show_hud(hud_used.hud_version) + hud_used.update_ui_style(ui_style2icon(client.prefs.UI_style)) next_move = 1 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 68a6c07ffe..6deffc97da 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -294,6 +294,10 @@ set name = "Examine" set category = "IC" + if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src))) + // shift-click catcher may issue examinate() calls for out-of-sight turfs + return + if(is_blind(src)) to_chat(src, "Something is there but you can't see it.") return @@ -304,7 +308,7 @@ //same as above //note: ghosts can point, this is intended //visible_message will handle invisibility properly -//overriden here and in /mob/dead/observer for different point span classes and sanity checks +//overridden here and in /mob/dead/observer for different point span classes and sanity checks /mob/verb/pointed(atom/A as mob|obj|turf in view()) set name = "Point To" set category = "Object" @@ -473,7 +477,7 @@ else what = get_item_by_slot(slot) if(what) - if(!(what.flags_1 & ABSTRACT_1)) + if(!(what.item_flags & ABSTRACT)) usr.stripPanelUnequip(what,src,slot) else usr.stripPanelEquip(what,src,slot) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 24984f1a55..05bafdeb58 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -40,9 +40,15 @@ to_chat(usr, "Speech is currently admin-disabled.") return - if(jobban_isbanned(src, "OOC")) + var/jb = jobban_isbanned(src, "OOC") + if(QDELETED(src)) + return + + if(jb) to_chat(src, "You have been banned from deadchat.") return + + if (src.client) if(src.client.prefs.muted & MUTE_DEADCHAT) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index a3786221ff..342ee386b6 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -381,7 +381,7 @@ else if(transfer_after) R.key = key - R.rename_self("cyborg") + R.apply_pref_name("cyborg") if(R.mmi) R.mmi.name = "Man-Machine Interface: [real_name]" diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm index f075a8464b..54e43a8731 100644 --- a/code/modules/modular_computers/computers/item/tablet.dm +++ b/code/modules/modular_computers/computers/item/tablet.dm @@ -1,7 +1,7 @@ /obj/item/modular_computer/tablet //Its called tablet for theme of 90ies but actually its a "big smartphone" sized name = "tablet computer" icon = 'icons/obj/modular_tablet.dmi' - icon_state = "tablet" + icon_state = "tablet-red" icon_state_unpowered = "tablet" icon_state_powered = "tablet" icon_state_menu = "menu" diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 75f0f465ba..051b12ea71 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -129,7 +129,7 @@ return computer.get_header_data() return list() -// This is performed on program startup. May be overriden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure. +// This is performed on program startup. May be overridden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure. // When implementing new program based device, use this to run the program. /datum/computer_file/program/proc/run_program(mob/living/user) if(can_run(user, 1)) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 310a0a5054..ca075b51e4 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -40,7 +40,10 @@ return data /datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source) - if(!is_station_level(source.z) && !is_mining_level(source.z)) + if(is_station_level(source.z)) + if(!(A.type in GLOB.the_station_areas)) + return + else if(!is_mining_level(source.z) || istype(A, /area/ruin)) return var/list/L = alarms[class] @@ -95,4 +98,4 @@ /datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE) GLOB.alarmdisplay -= src - ..() \ No newline at end of file + ..() diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index ef02a8a792..4308120c4f 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -77,5 +77,5 @@ /obj/item/clothing/gloves/space_ninja/examine(mob/user) ..() - if(flags_1 & NODROP_1) + if(item_flags & NODROP) to_chat(user, "The energy drain mechanism is [candrain?"active":"inactive"].") diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 5886e1723d..6110f2b0c0 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -13,7 +13,7 @@ Contents: /obj/item/clothing/suit/space/space_ninja name = "ninja suit" - desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." + desc = "A unique, vacuum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." icon_state = "s-ninja" item_state = "s-ninja_suit" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell) @@ -111,15 +111,15 @@ Contents: to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") return FALSE affecting = H - flags_1 |= NODROP_1 //colons make me go all |= + item_flags |= NODROP //colons make me go all |= slowdown = 0 n_hood = H.head - n_hood.flags_1 |= NODROP_1 + n_hood.item_flags |= NODROP n_shoes = H.shoes - n_shoes.flags_1 |= NODROP_1 + n_shoes.item_flags |= NODROP n_shoes.slowdown-- n_gloves = H.gloves - n_gloves.flags_1 |= NODROP_1 + n_gloves.item_flags |= NODROP return TRUE /obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H) @@ -131,18 +131,18 @@ Contents: //This proc allows the suit to be taken off. /obj/item/clothing/suit/space/space_ninja/proc/unlock_suit() affecting = null - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP slowdown = 1 icon_state = "s-ninja" if(n_hood)//Should be attached, might not be attached. - n_hood.flags_1 &= ~NODROP_1 + n_hood.item_flags &= ~NODROP if(n_shoes) - n_shoes.flags_1 &= ~NODROP_1 + n_shoes.item_flags &= ~NODROP n_shoes.slowdown++ if(n_gloves) n_gloves.icon_state = "s-ninja" n_gloves.item_state = "s-ninja" - n_gloves.flags_1 &= ~NODROP_1 + n_gloves.item_flags &= ~NODROP n_gloves.candrain=0 n_gloves.draining=0 diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 5623a1bf74..ac3e24030f 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -5,7 +5,7 @@ throw_speed = 3 var/signed = FALSE var/datum/mind/target - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON /obj/item/paper/contract/proc/update_text() return @@ -28,7 +28,7 @@ /obj/item/paper/contract/employment/update_text() name = "paper- [target] employment contract" - info = "
    Conditions of Employment




    This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
    WITNESSETH:
    WHEREAS, SLAVE is a natural born human or humanoid, posessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
    WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude.
    NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
    In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
    Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
    Should transfership of a soul not be possible, a lien shall be placed instead.
    Signed,
    [target]" + info = "
    Conditions of Employment




    This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
    WITNESSETH:
    WHEREAS, SLAVE is a natural born human or humanoid, possessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
    WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude.
    NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
    In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
    Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
    Should transfership of a soul not be possible, a lien shall be placed instead.
    Signed,
    [target]" /obj/item/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 899c132f04..038cba8936 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -6,9 +6,9 @@ w_class = WEIGHT_CLASS_SMALL pressure_resistance = 2 resistance_flags = FLAMMABLE - + /obj/item/folder/suicide_act(mob/living/user) - user.visible_message("[user] begins filing an imaginary death warrent! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!") return OXYLOSS /obj/item/folder/blue diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 42b3d08c0c..9b7d3ae884 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -44,7 +44,7 @@ colour = "red" /obj/item/pen/invisible - desc = "It's an invisble pen marker." + desc = "It's an invisible pen marker." icon_state = "pen" colour = "white" @@ -104,12 +104,7 @@ if(deg && (deg > 0 && deg <= 360)) degrees = deg to_chat(user, "You rotate the top of the pen to [degrees] degrees.") - GET_COMPONENT(hidden_uplink, /datum/component/uplink) - if(hidden_uplink && degrees == traitor_unlock_degrees) - to_chat(user, "Your pen makes a clicking noise, before quickly rotating back to 0 degrees!") - degrees = 0 - hidden_uplink.locked = FALSE - hidden_uplink.interact(user) + SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user) /obj/item/pen/attack(mob/living/M, mob/user,stealth) if(!istype(M)) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index b69751fd33..4d8cdaa778 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -124,6 +124,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne var/charge_count = 100 var/current_overlay = null var/broken_state = 0 + var/setting = 1 //Gravity value when on /obj/machinery/gravity_generator/main/Destroy() // If we somehow get deleted, remove all of our other parts. investigate_log("was destroyed!", INVESTIGATE_GRAVITY) @@ -385,6 +386,11 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne else GLOB.gravity_generators["[T.z]"] -= src +/obj/machinery/gravity_generator/main/proc/change_setting(value) + if(value != setting) + setting = value + shake_everyone() + // Misc /obj/item/paper/guides/jobs/engi/gravity_gen diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index f2f08c57c4..0b6cf36921 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -89,7 +89,7 @@ if(!cell_connectors) to_chat(user, "This [name] can't support a power cell!") return - if(W.flags_1 & NODROP_1) + if(W.item_flags & NODROP) to_chat(user, "[W] is stuck to your hand!") return user.dropItemToGround(W) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 9cfca01efa..bf03256219 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -400,8 +400,8 @@ name = "turret controls" icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - flags_1 = ABSTRACT_1 | NODROP_1 - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON_1 + item_flags = ABSTRACT | NODROP | NOBLUDGEON + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF var/delay = 0 /obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams) diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm index f9edf59368..fc7cca55e6 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm @@ -1,6 +1,6 @@ /obj/structure/particle_accelerator/particle_emitter name = "EM Containment Grid" - desc = "This launchs the Alpha particles, might not want to stand near this end." + desc = "This launches the Alpha particles, might not want to stand near this end." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "none" var/fire_delay = 50 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index ed16e6a41e..18cd6d22a6 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -105,7 +105,7 @@ add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER)) src.setDir(angle2dir(adir)) -//calculates the fraction of the sunlight that the panel recieves +//calculates the fraction of the sunlight that the panel receives /obj/machinery/power/solar/proc/update_solar_exposure() if(obscured) sunfrac = 0 @@ -119,7 +119,7 @@ return sunfrac = cos(p_angle) ** 2 - //isn't the power recieved from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? + //isn't the power received from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? /obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY if(stat & BROKEN) @@ -423,7 +423,7 @@ A.icon_state = "4" A.anchored = TRUE qdel(src) - else if(user.a_intent != INTENT_HARM && !(I.flags_1 & NOBLUDGEON_1)) + else if(user.a_intent != INTENT_HARM && !(I.item_flags & NOBLUDGEON)) attack_hand(user) else return ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 686912f098..53140d45e0 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -255,9 +255,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) sleep(10) continue else if(i > 50) - speaking = "[i/10] seconds remain before causality stabilization." + speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization." else - speaking = "[i/10]..." + speaking = "[i*0.1]..." radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language()) sleep(10) @@ -279,7 +279,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(M.z == z) SEND_SOUND(M, 'sound/magic/charge.ogg') to_chat(M, "You feel reality distort for a moment...") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam) if(combined_gas > MOLE_PENALTY_THRESHOLD) investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER) if(T) @@ -568,7 +568,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) Consume(nom) /obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params) - if(!istype(W) || (W.flags_1 & ABSTRACT_1) || !istype(user)) + if(!istype(W) || (W.item_flags & ABSTRACT) || !istype(user)) return if (istype(W, /obj/item/melee/roastingstick)) return ..() diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index e149033470..470b6e789c 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -186,6 +186,9 @@ /obj/structure/particle_accelerator/end_cap, /obj/machinery/field/containment, /obj/structure/disposalpipe, + /obj/structure/disposaloutlet, + /obj/machinery/disposal/deliveryChute, + /obj/machinery/camera, /obj/structure/sign, /obj/machinery/gateway, /obj/structure/lattice, diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index de0d03da3b..4c66939e53 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -7,11 +7,6 @@ caliber = "shotgun" projectile_type = /obj/item/projectile/bullet/shotgun_slug materials = list(MAT_METAL=4000) - -/obj/item/ammo_casing/shotgun/tengauge - name = "10g shotgun slug" - desc = "A 10 gauge lead slug." - projectile_type = /obj/item/projectile/bullet/shotgun_slug/tengauge /obj/item/ammo_casing/shotgun/beanbag name = "beanbag slug" @@ -118,7 +113,7 @@ /obj/item/ammo_casing/shotgun/dart/noreact name = "cryostasis shotgun dart" - desc = "A dart for use in shotguns, using similar technolgoy as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." + desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." icon_state = "cnrshell" reagent_amount = 10 reagent_react = FALSE diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index c6dc004879..65724e503a 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -19,7 +19,7 @@ icon_state = "46x30mmtA-[round(ammo_count(),4)]" /obj/item/ammo_box/magazine/wt550m9/wtic - name = "wt550 magazine (Incindiary 4.6x30mm)" + name = "wt550 magazine (Incendiary 4.6x30mm)" icon_state = "46x30mmtI-20" ammo_type = /obj/item/ammo_casing/c46x30mm/inc @@ -54,7 +54,7 @@ ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/ammo_box/magazine/smgm9mm/fire - name = "SMG Magazine (Incindiary 9mm)" + name = "SMG Magazine (Incendiary 9mm)" ammo_type = /obj/item/ammo_casing/c9mm/inc /obj/item/ammo_box/magazine/smgm45 diff --git a/code/modules/projectiles/boxes_magazines/internal/_internal.dm b/code/modules/projectiles/boxes_magazines/internal/_internal.dm index e21cb5ce61..c6ee7ec0cb 100644 --- a/code/modules/projectiles/boxes_magazines/internal/_internal.dm +++ b/code/modules/projectiles/boxes_magazines/internal/_internal.dm @@ -1,6 +1,7 @@ /obj/item/ammo_box/magazine/internal desc = "Oh god, this shouldn't be here" - flags_1 = CONDUCT_1|ABSTRACT_1 + flags_1 = CONDUCT_1 + item_flags = ABSTRACT //internals magazines are accessible, so replace spent ammo if full when trying to put a live one in /obj/item/ammo_box/magazine/internal/give_round(obj/item/ammo_casing/R) diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm index 976f80f437..a98fd29e99 100644 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm @@ -5,13 +5,13 @@ max_ammo = 6 /obj/item/ammo_box/magazine/internal/cylinder/rev762 - name = "nagant revolver cylinder" + name = "\improper Nagant revolver cylinder" ammo_type = /obj/item/ammo_casing/n762 caliber = "n762" max_ammo = 7 /obj/item/ammo_box/magazine/internal/cylinder/rus357 - name = "russian revolver cylinder" + name = "\improper Russian revolver cylinder" ammo_type = /obj/item/ammo_casing/a357 caliber = "357" max_ammo = 6 diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index a4fcdd0266..24ef2a2604 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -27,7 +27,7 @@ can_suppress = FALSE /obj/item/gun/ballistic/automatic/pistol/deagle - name = "desert eagle" + name = "\improper Desert Eagle" desc = "A robust .50 AE handgun." icon_state = "deagle" force = 14 @@ -44,7 +44,7 @@ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/pistol/deagle/gold - desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." + desc = "A gold plated Desert Eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." icon_state = "deagleg" item_state = "deagleg" @@ -55,7 +55,7 @@ /obj/item/gun/ballistic/automatic/pistol/APS name = "stechkin APS pistol" - desc = "The original russian version of a widely used Syndicate sidearm. Uses 9mm ammo." + desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo." icon_state = "aps" w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/pistolm9mm diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index b359d00602..cd11522342 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -151,7 +151,7 @@ pin = /obj/item/firing_pin /obj/item/gun/ballistic/revolver/nagant - name = "nagant revolver" + name = "\improper Nagant revolver" desc = "An old model of revolver that originated in Russia. Able to be suppressed. Uses 7.62x38mmR ammo." icon_state = "nagant" can_suppress = TRUE @@ -163,7 +163,7 @@ // You can spin the chamber to randomize the position of the bullet. /obj/item/gun/ballistic/revolver/russian - name = "\improper russian revolver" + name = "\improper Russian revolver" desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull." mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 var/spun = FALSE @@ -233,7 +233,7 @@ user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!") /obj/item/gun/ballistic/revolver/russian/soul - name = "cursed russian revolver" + name = "cursed Russian revolver" desc = "To play with this revolver requires wagering your very soul." /obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index e3b638f051..54ca03f872 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -151,7 +151,8 @@ item_state = "arcane_barrage" can_bayonet = FALSE - flags_1 = DROPDEL_1 + item_flags = NEEDS_PERMIT | DROPDEL + flags_1 = NONE mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 5275e63c3f..c766d1c94e 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -101,8 +101,8 @@ transform *= 1 + ((damage/7) * 0.2)//20% larger per tile /obj/item/gun/energy/xray - name = "x-ray laser gun" - desc = "A high-power laser gun capable of expelling concentrated x-ray blasts that pass through multiple soft targets and heavier materials." + name = "\improper X-ray laser gun" + desc = "A high-power laser gun capable of expelling concentrated X-ray blasts that pass through multiple soft targets and heavier materials." icon_state = "xray" item_state = null ammo_type = list(/obj/item/ammo_casing/energy/xray) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index bf3ade0748..9c9d253439 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -96,6 +96,10 @@ charges-- ..() +/obj/item/gun/magic/wand/resurrection/debug //for testing + name = "debug wand of healing" + max_charges = 500 + ///////////////////////////////////// //WAND OF POLYMORPH ///////////////////////////////////// diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index 38e6d4d0c6..32da307d47 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -10,7 +10,7 @@ /obj/item/gun/energy/beam_rifle name = "particle acceleration rifle" - desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targetted by one. \ + desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one. \ Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or \ changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." icon = 'icons/obj/guns/energy.dmi' @@ -513,8 +513,6 @@ return 0.4 if(istype(target, /obj/structure/window)) return 0.5 - if(istype(target, /obj/structure/blob)) //CIT CHANGE - Blobs are getting ggnore'd too hard and people need to GIT GUD - return 0.2 return 1 /obj/item/projectile/beam/beam_rifle/proc/handle_impact(atom/target) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index b5cd9b70a7..f132d62b27 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -147,7 +147,7 @@ // DNA-keyed pin. -// When you want to keep your toys for youself. +// When you want to keep your toys for yourself. /obj/item/firing_pin/dna name = "DNA-keyed firing pin" desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link." diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4ee1363853..ecb60463dd 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -8,7 +8,7 @@ icon_state = "bullet" density = FALSE anchored = TRUE - flags_1 = ABSTRACT_1 + item_flags = ABSTRACT pass_flags = PASSTABLE mouse_opacity = MOUSE_OPACITY_TRANSPARENT hitsound = 'sound/weapons/pierce.ogg' diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 3ba0d092c5..b51eaf40ae 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -51,7 +51,7 @@ damage = 5 /obj/item/projectile/beam/xray - name = "xray beam" + name = "\improper X-ray beam" icon_state = "xray" damage = 15 irradiate = 30 diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm index d0cf74421c..b6cca4a31a 100644 --- a/code/modules/projectiles/projectile/bullets/_incendiary.dm +++ b/code/modules/projectiles/projectile/bullets/_incendiary.dm @@ -14,4 +14,4 @@ var/turf/location = get_turf(src) if(location) new /obj/effect/hotspot(location) - location.hotspot_expose(700, 50, 1) + location.hotspot_expose(700, 5, 1) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 41a819dd16..457ec78e9b 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -2,10 +2,6 @@ name = "12g shotgun slug" damage = 60 -/obj/item/projectile/bullet/shotgun_slug/tengauge - name = "10g shotgun slug" - damage = 72.5 - /obj/item/projectile/bullet/shotgun_beanbag name = "beanbag slug" damage = 5 diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index afe9a2e31d..f5d0607341 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -1,98 +1,98 @@ -/obj/item/projectile/energy/net - name = "energy netting" - icon_state = "e_netting" - damage = 10 - damage_type = STAMINA - hitsound = 'sound/weapons/taserhit.ogg' - range = 10 - -/obj/item/projectile/energy/net/Initialize() - . = ..() - SpinAnimation() - -/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE) - if(isliving(target)) - var/turf/Tloc = get_turf(target) - if(!locate(/obj/effect/nettingportal) in Tloc) - new /obj/effect/nettingportal(Tloc) - ..() - -/obj/item/projectile/energy/net/on_range() - do_sparks(1, TRUE, src) - ..() - -/obj/effect/nettingportal - name = "DRAGnet teleportation field" - desc = "A field of bluespace energy, locking on to teleport a target." - icon = 'icons/effects/effects.dmi' - icon_state = "dragnetfield" - light_range = 3 - anchored = TRUE - -/obj/effect/nettingportal/Initialize() - . = ..() - var/obj/item/beacon/teletarget = null - for(var/obj/machinery/computer/teleporter/com in GLOB.machines) - if(com.target) - if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) - teletarget = com.target - - addtimer(CALLBACK(src, .proc/pop, teletarget), 30) - -/obj/effect/nettingportal/proc/pop(teletarget) - if(teletarget) - for(var/mob/living/L in get_turf(src)) - do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon - else - for(var/mob/living/L in get_turf(src)) - do_teleport(L, L, 15) //Otherwise it just warps you off somewhere. - - qdel(src) - -/obj/effect/nettingportal/singularity_act() - return - -/obj/effect/nettingportal/singularity_pull() - return - -/obj/item/projectile/energy/trap - name = "energy snare" - icon_state = "e_snare" - nodamage = 1 - knockdown = 20 - hitsound = 'sound/weapons/taserhit.ogg' - range = 4 - -/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE) - if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap - new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc)) - else if(iscarbon(target)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target)) - B.Crossed(target) - ..() - -/obj/item/projectile/energy/trap/on_range() - new /obj/item/restraints/legcuffs/beartrap/energy(loc) - ..() - -/obj/item/projectile/energy/trap/cyborg - name = "Energy Bola" - icon_state = "e_snare" - nodamage = 1 - knockdown = 0 - hitsound = 'sound/weapons/taserhit.ogg' - range = 10 - -/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE) - if(!ismob(target) || blocked >= 100) - do_sparks(1, TRUE, src) - qdel(src) - if(iscarbon(target)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) - B.Crossed(target) - QDEL_IN(src, 10) - ..() - -/obj/item/projectile/energy/trap/cyborg/on_range() - do_sparks(1, TRUE, src) - qdel(src) +/obj/item/projectile/energy/net + name = "energy netting" + icon_state = "e_netting" + damage = 10 + damage_type = STAMINA + hitsound = 'sound/weapons/taserhit.ogg' + range = 10 + +/obj/item/projectile/energy/net/Initialize() + . = ..() + SpinAnimation() + +/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE) + if(isliving(target)) + var/turf/Tloc = get_turf(target) + if(!locate(/obj/effect/nettingportal) in Tloc) + new /obj/effect/nettingportal(Tloc) + ..() + +/obj/item/projectile/energy/net/on_range() + do_sparks(1, TRUE, src) + ..() + +/obj/effect/nettingportal + name = "DRAGnet teleportation field" + desc = "A field of bluespace energy, locking on to teleport a target." + icon = 'icons/effects/effects.dmi' + icon_state = "dragnetfield" + light_range = 3 + anchored = TRUE + +/obj/effect/nettingportal/Initialize() + . = ..() + var/obj/item/beacon/teletarget = null + for(var/obj/machinery/computer/teleporter/com in GLOB.machines) + if(com.target) + if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) + teletarget = com.target + + addtimer(CALLBACK(src, .proc/pop, teletarget), 30) + +/obj/effect/nettingportal/proc/pop(teletarget) + if(teletarget) + for(var/mob/living/L in get_turf(src)) + do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon + else + for(var/mob/living/L in get_turf(src)) + do_teleport(L, L, 15) //Otherwise it just warps you off somewhere. + + qdel(src) + +/obj/effect/nettingportal/singularity_act() + return + +/obj/effect/nettingportal/singularity_pull() + return + +/obj/item/projectile/energy/trap + name = "energy snare" + icon_state = "e_snare" + nodamage = 1 + knockdown = 20 + hitsound = 'sound/weapons/taserhit.ogg' + range = 4 + +/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE) + if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap + new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc)) + else if(iscarbon(target)) + var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target)) + B.Crossed(target) + ..() + +/obj/item/projectile/energy/trap/on_range() + new /obj/item/restraints/legcuffs/beartrap/energy(loc) + ..() + +/obj/item/projectile/energy/trap/cyborg + name = "Energy Bola" + icon_state = "e_snare" + nodamage = 1 + knockdown = 0 + hitsound = 'sound/weapons/taserhit.ogg' + range = 10 + +/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE) + if(!ismob(target) || blocked >= 100) + do_sparks(1, TRUE, src) + qdel(src) + if(iscarbon(target)) + var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) + B.Crossed(target) + QDEL_IN(src, 10) + ..() + +/obj/item/projectile/energy/trap/cyborg/on_range() + do_sparks(1, TRUE, src) + qdel(src) diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index 1c24d47a9d..de9016a4c4 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -18,7 +18,7 @@ do_sparks(1, TRUE, src) else if(iscarbon(target)) var/mob/living/carbon/C = target - C.SendSignal(COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) + SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) if(C.dna && C.dna.check_mutation(HULK)) C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE)) diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm index 7fb9c6efb2..44c8df6c00 100644 --- a/code/modules/projectiles/projectile/special/temperature.dm +++ b/code/modules/projectiles/projectile/special/temperature.dm @@ -7,12 +7,11 @@ flag = "energy" var/temperature = 100 -/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)//These two could likely check temp protection on the mob - ..() +/obj/item/projectile/temp/on_hit(atom/target, blocked = 0) + . = ..() if(isliving(target)) - var/mob/M = target - M.bodytemperature = temperature - return TRUE + var/mob/living/L = target + L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature /obj/item/projectile/temp/hot name = "heat beam" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index d53df1ae95..2def04cc66 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -303,7 +303,7 @@ need_mob_update += R.addiction_act_stage4(C) if(40 to INFINITY) to_chat(C, "You feel like you've gotten over your need for [R.name].") - C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction") cached_addictions.Remove(R) addiction_tick++ if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. @@ -526,19 +526,54 @@ return TRUE return FALSE +//Returns the average specific heat for all reagents currently in this holder. +/datum/reagents/proc/specific_heat() + . = 0 + var/cached_amount = total_volume //cache amount + var/list/cached_reagents = reagent_list //cache reagents + for(var/I in cached_reagents) + var/datum/reagent/R = I + . += R.specific_heat * (R.volume / cached_amount) + +/datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000) + var/S = specific_heat() + chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), 2.7, 1000) + /datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, no_react = 0) if(!isnum(amount) || !amount) return FALSE - if(amount < 0) + if(amount <= 0) return FALSE - var/list/cached_reagents = reagent_list - update_total() - if(total_volume + amount > maximum_volume) - amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. - chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems + var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] + if(!D) + WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + return FALSE + update_total() + var/cached_total = total_volume + if(cached_total + amount > maximum_volume) + amount = (maximum_volume - cached_total) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. + if(amount <= 0) + return FALSE + var/new_total = cached_total + amount + var/cached_temp = chem_temp + var/list/cached_reagents = reagent_list + + //Equalize temperature - Not using specific_heat() because the new chemical isn't in yet. + var/specific_heat = 0 + var/thermal_energy = 0 + for(var/i in cached_reagents) + var/datum/reagent/R = i + specific_heat += R.specific_heat * (R.volume / new_total) + thermal_energy += R.specific_heat * R.volume * cached_temp + specific_heat += D.specific_heat * (amount / new_total) + thermal_energy += D.specific_heat * amount * reagtemp + chem_temp = thermal_energy / (specific_heat * new_total) + //// + + //add the reagent to the existing if it exists for(var/A in cached_reagents) var/datum/reagent/R = A if (R.id == reagent) @@ -551,29 +586,23 @@ handle_reactions() return TRUE - var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] - if(D) + //otherwise make a new one + var/datum/reagent/R = new D.type(data) + cached_reagents += R + R.holder = src + R.volume = amount + if(data) + R.data = data + R.on_new(data) - var/datum/reagent/R = new D.type(data) - cached_reagents += R - R.holder = src - R.volume = amount - if(data) - R.data = data - R.on_new(data) - - update_total() - if(my_atom) - my_atom.on_reagent_change(ADD_REAGENT) - if(!no_react) - handle_reactions() - if(isliving(my_atom)) - R.on_mob_add(my_atom) - return TRUE - - else - WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") - return FALSE + update_total() + if(my_atom) + my_atom.on_reagent_change(ADD_REAGENT) + if(!no_react) + handle_reactions() + if(isliving(my_atom)) + R.on_mob_add(my_atom) + return TRUE /datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15) for(var/r_id in list_reagents) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index d350a2316b..80e4453c7d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -293,7 +293,7 @@ if(default_deconstruction_crowbar(I)) return - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) var/obj/item/reagent_containers/B = I . = 1 //no afterattack if(beaker) @@ -467,14 +467,14 @@ "creme_de_menthe", "creme_de_cacao", "triple_sec", - "sake", - "fernet" + "sake" ) emagged_reagents = list( "ethanol", "iron", "minttoxin", - "atomicbomb" + "atomicbomb", + "fernet" ) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 465f9a165b..e4c6966cff 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -46,13 +46,8 @@ if(stat & NOPOWER) return if(on) - if(beaker) - if(beaker.reagents.chem_temp > target_temperature) - beaker.reagents.chem_temp += min(-1, (target_temperature - beaker.reagents.chem_temp) * heater_coefficient) - if(beaker.reagents.chem_temp < target_temperature) - beaker.reagents.chem_temp += max(1, (target_temperature - beaker.reagents.chem_temp) * heater_coefficient) - - beaker.reagents.chem_temp = round(beaker.reagents.chem_temp) + if(beaker && beaker.reagents.total_volume) + beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume) beaker.reagents.handle_reactions() /obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params) @@ -62,7 +57,7 @@ if(default_deconstruction_crowbar(I)) return - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) . = 1 //no afterattack if(beaker) to_chat(user, "A container is already loaded into [src]!") diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 9fd8a8a377..6327c5ba3a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -84,7 +84,7 @@ if(default_unfasten_wrench(user, I)) return - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) . = 1 // no afterattack if(panel_open) to_chat(user, "You can't use the [src.name] while its panel is opened!") diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 7247b9b5ed..25385ca2ff 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -228,7 +228,7 @@ /obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) . = TRUE //no afterattack if(stat & (NOPOWER|BROKEN)) return diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 922b557995..3ee971bc9f 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -81,7 +81,7 @@ if(panel_open) //Can't insert objects when its screwed open return TRUE - if (istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if (istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) if (!beaker) if(!user.transferItemToLoc(I, src)) to_chat(user, "[I] is stuck to your hand!") @@ -101,7 +101,7 @@ //Fill machine with a bag! if(istype(I, /obj/item/storage/bag)) var/list/inserted = list() - if(I.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted)) + if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted)) for(var/i in inserted) holdingitems[i] = TRUE if(!I.contents.len) diff --git a/code/modules/reagents/chemistry/readme.md b/code/modules/reagents/chemistry/readme.md index f070d36067..9a9be7c5a6 100644 --- a/code/modules/reagents/chemistry/readme.md +++ b/code/modules/reagents/chemistry/readme.md @@ -38,7 +38,7 @@ The holder (reagents datum) is the datum that holds a list of all reagents curre If the specified amount is greater than what is available, it will use the amount of the reagent that is available. If no reagent exists, returns null. - metabolize(var/mob/M) + metabolize(var/mob/living/carbon/C) This proc is called by the mobs life proc. It simply calls on_mob_life for all contained reagents. You shouldnt have to use this one directly. @@ -116,7 +116,7 @@ The holder (reagents datum) is the datum that holds a list of all reagents curre # About Reagents: Reagents are all the things you can mix and fille in bottles etc. This can be anything from rejuvs over water to ... iron. Each reagent also has a few procs - i'll explain those below. ``` - reaction_mob(var/mob/M, var/method=TOUCH) + reaction_mob(var/mob/living/L, var/method=TOUCH) This is called by the holder's reation proc. This version is only called when the reagent reacts with a mob. The method var can be either @@ -135,7 +135,7 @@ Reagents are all the things you can mix and fille in bottles etc. This can be an with a turf. You'll want to put stuff like extra slippery floors for lube or something in here. - on_mob_life(var/mob/M) + on_mob_life(var/mob/living/L) This proc is called everytime the mobs life proc executes. This is the place where you put damage for toxins , drowsyness for sleep toxins etc etc. @@ -241,7 +241,7 @@ By default, all atom have a reagents var - but its empty. if you want to use an Checks if something can be injected to. If this returns 1, you can use syringes and droppers to draw from and add to the contents of this object. - + atom/proc/is_drawable() Checks if something can be drawn from. If this returns 1, you can use syringes and droppers @@ -255,4 +255,4 @@ Credit goes to Cogwerks, and all the other goonstation coders for the original i - Any of the Secret Chems - Goon in-joke chems (Eg. Cat Drugs, Hairgrownium) - Liquid Electricity -- Rajajajah \ No newline at end of file +- Rajajajah diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index aa84265ec5..6f65c33ea1 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -8,6 +8,7 @@ var/name = "Reagent" var/id = "reagent" var/description = "" + var/specific_heat = SPECIFIC_HEAT_DEFAULT //J/(K*mol) var/taste_description = "metaphorical salt" var/taste_mult = 1 //how this taste compares to others. Higher values means it is more noticable var/glass_name = "glass of ...what?" // use for specialty drinks. @@ -18,7 +19,7 @@ var/reagent_state = LIQUID var/list/data var/current_cycle = 0 - var/volume = 0 + var/volume = 0 //pretend this is moles var/color = "#000000" // rgb: 0, 0, 0 var/can_synth = TRUE // can this reagent be synthesized? (for example: odysseus syringe gun) var/metabolization_rate = REAGENTS_METABOLISM //how fast the reagent is metabolized by the mob @@ -50,17 +51,17 @@ /datum/reagent/proc/reaction_turf(turf/T, volume) return -/datum/reagent/proc/on_mob_life(mob/living/M) +/datum/reagent/proc/on_mob_life(mob/living/carbon/M) current_cycle++ holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears. return // Called when this reagent is first added to a mob -/datum/reagent/proc/on_mob_add(mob/M) +/datum/reagent/proc/on_mob_add(mob/living/L) return // Called when this reagent is removed while inside a mob -/datum/reagent/proc/on_mob_delete(mob/M) +/datum/reagent/proc/on_mob_delete(mob/living/L) return /datum/reagent/proc/on_move(mob/M) @@ -87,37 +88,37 @@ /datum/reagent/proc/overdose_start(mob/living/M) to_chat(M, "You feel like you took too much of [name]!") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) return /datum/reagent/proc/addiction_act_stage1(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_light, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_light, name) if(prob(30)) to_chat(M, "You feel like having some [name] right about now.") return /datum/reagent/proc/addiction_act_stage2(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_medium, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_medium, name) if(prob(30)) to_chat(M, "You feel like you need [name]. You just can't get enough.") return /datum/reagent/proc/addiction_act_stage3(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_severe, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_severe, name) if(prob(30)) to_chat(M, "You have an intense craving for [name].") return /datum/reagent/proc/addiction_act_stage4(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_critical, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_critical, name) if(prob(30)) to_chat(M, "You're not feeling good at all! You really need some [name].") return -/proc/pretty_string_from_reagent_list(var/list/reagent_list) +/proc/pretty_string_from_reagent_list(list/reagent_list) //Convert reagent list to a printable string for logging etc - var/result = "| " + var/list/rs = list() for (var/datum/reagent/R in reagent_list) - result += "[R.name], [R.volume] | " + rs += "[R.name], [R.volume]" - return result + return rs.Join(" | ") diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index cc1b75559f..3e3282fb89 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -34,17 +34,16 @@ All effects don't start immediately, but rather get worse over time; the rate is 91-100: Dangerously toxic - swift death */ -/datum/reagent/consumable/ethanol/on_mob_life(mob/living/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER) - var/booze_power = boozepwr - if(H.has_trait(TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker - booze_power *= 0.7 - H.drunkenness = max((H.drunkenness + (sqrt(volume) * booze_power * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk - var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) - H.applyLiverDamage((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150) - return ..() || . +/datum/reagent/consumable/ethanol/on_mob_life(mob/living/carbon/C) + if(C.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER) + var/booze_power = boozepwr + if(C.has_trait(TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker + booze_power *= 0.7 + C.drunkenness = max((C.drunkenness + (sqrt(volume) * booze_power * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk + var/obj/item/organ/liver/L = C.getorganslot(ORGAN_SLOT_LIVER) + if (istype(L)) + C.applyLiverDamage((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150) + return ..() /datum/reagent/consumable/ethanol/reaction_obj(obj/O, reac_volume) if(istype(O, /obj/item/paper)) @@ -88,6 +87,15 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of beer" glass_desc = "A freezing pint of beer." +/datum/reagent/consumable/ethanol/beer/light + name = "Light Beer" + id = "light_beer" + description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety has reduced calorie and alcohol content." + boozepwr = 5 //Space Europeans hate it + taste_description = "dish water" + glass_name = "glass of light beer" + glass_desc = "A freezing pint of watery light beer." + /datum/reagent/consumable/ethanol/beer/green name = "Green Beer" id = "greenbeer" @@ -98,7 +106,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of green beer" glass_desc = "A freezing pint of green beer. Festive." -/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M) if(M.color != color) M.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY) return ..() @@ -117,7 +125,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "DAMN, THIS THING LOOKS ROBUST!" shot_glass_icon_state = "shotglasscream" -/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) @@ -152,7 +160,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of Thirteen Loko" glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." -/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-40) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) @@ -213,7 +221,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "The glass contain wodka. Xynta." shot_glass_icon_state = "shotglassclear" -/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M) M.radiation = max(M.radiation-2,0) return ..() @@ -229,7 +237,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of bilk" glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." -/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() && prob(10)) M.heal_bodypart_damage(1) . = 1 @@ -246,7 +254,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Three Mile Island Ice Tea" glass_desc = "A glass of this is sure to prevent a meltdown." -/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M) M.set_drugginess(50) return ..() @@ -352,7 +360,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "It's as strong as it smells." shot_glass_icon_state = "shotglassgreen" -/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M) if(prob(10) && !M.has_trait(TRAIT_ALCOHOL_TOLERANCE)) M.hallucination += 4 //Reference to the urban myth ..() @@ -437,7 +445,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Cuba Libre" glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!" -/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. M.adjustBruteLoss(-1, 0) M.adjustFireLoss(-1, 0) @@ -501,7 +509,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Screwdriver" glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." -/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer")) //Engineers lose radiation poisoning at a massive rate. M.radiation = max(M.radiation - 25, 0) return ..() @@ -528,11 +536,9 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Bloody Mary" glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." -/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(C.blood_volume < BLOOD_VOLUME_NORMAL) - C.blood_volume = min(BLOOD_VOLUME_NORMAL, C.blood_volume + 3) //Bloody Mary quickly restores blood loss. +/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C) + if(C.blood_volume < BLOOD_VOLUME_NORMAL) + C.blood_volume = min(BLOOD_VOLUME_NORMAL, C.blood_volume + 3) //Bloody Mary quickly restores blood loss. ..() /datum/reagent/consumable/ethanol/brave_bull @@ -575,7 +581,7 @@ All effects don't start immediately, but rather get worse over time; the rate is light_holder = new(M) light_holder.set_light(3, 0.7, "#FFCC00") //Tequila Sunrise makes you radiate dim light, like a sunrise! -/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_life(mob/living/carbon/M) if(QDELETED(light_holder)) M.reagents.del_reagent("tequilasunrise") //If we lost our light object somehow, remove the reagent else if(light_holder.loc != M) @@ -598,7 +604,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Whoah, this thing is on FIRE!" shot_glass_icon_state = "toxinsspecialglass" -/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M as mob) +/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M) M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp. return ..() @@ -614,7 +620,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Beepsky Smash" glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." -/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/M) if(M.has_trait(TRAIT_ALCOHOL_TOLERANCE)) M.Stun(30, 0) //this realistically does nothing to prevent chainstunning but will cause them to recover faster once it's out of their system else @@ -652,7 +658,7 @@ All effects don't start immediately, but rather get worse over time; the rate is boozepwr = 5 //We've had worse in the mines dorf_mode = TRUE -/datum/reagent/consumable/ethanol/manly_dorf/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/manly_dorf/on_mob_life(mob/living/carbon/M) if(dorf_mode) M.adjustBruteLoss(-2) M.adjustFireLoss(-2) @@ -754,7 +760,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A scientist's drink of choice, for thinking how to blow up the station." -/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/M) M.set_drugginess(30) return ..() @@ -780,7 +786,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Anti-freeze" glass_desc = "The ultimate refreshment." -/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp. return ..() @@ -795,7 +801,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Barefoot" glass_desc = "Barefoot and pregnant." -/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M) if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes. var/mob/living/carbon/human/H = M if(!H.shoes) @@ -893,7 +899,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Sbiten" glass_desc = "A spicy mix of Vodka and Spice. Very hot." -/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 ,BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp. return ..() @@ -931,7 +937,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "iced beer" glass_desc = "A beer so frosty, the air around it freezes." -/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp. return ..() @@ -1013,7 +1019,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Changeling Sting" glass_desc = "A stingy drink." -/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M) if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals. var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) @@ -1043,7 +1049,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Syndicate Bomb" glass_desc = "A syndicate bomb." -/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/M) if(prob(5)) playsound(get_turf(M), 'sound/effects/explosionfar.ogg', 100, 1) return ..() @@ -1083,8 +1089,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Banana Honk" glass_desc = "A drink from Clown Heaven." -/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/M) - if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M)) +/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M) + if((ishuman(M) && M.job == "Clown") || ismonkey(M)) M.heal_bodypart_damage(1,1) . = 1 return ..() || . @@ -1101,8 +1107,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Silencer" glass_desc = "A drink from Mime Heaven." -/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/M) - if(ishuman(M) && M.job in list("Mime")) +/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M) + if(ishuman(M) && M.job == "Mime") M.heal_bodypart_damage(1,1) . = 1 return ..() || . @@ -1156,7 +1162,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." -/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M) for(var/obj/item/stack/ore/O in orange(3, M)) step_towards(O, get_turf(M)) return ..() @@ -1174,7 +1180,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Hearty Punch" glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." -/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/M) if(M.health <= 0) M.adjustBruteLoss(-3, 0) M.adjustFireLoss(-3, 0) @@ -1208,7 +1214,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Atomic Bomb" glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." -/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M) M.set_drugginess(50) if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE)) M.confused = max(M.confused+2,0) @@ -1237,7 +1243,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Pan-Galactic Gargle Blaster" glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." -/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/M) M.dizziness +=1.5 switch(current_cycle) if(15 to 45) @@ -1296,7 +1302,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Hippie's Delight" glass_desc = "A drink enjoyed by people during the 1960's." -/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M) if (!M.slurring) M.slurring = 1 switch(current_cycle) @@ -1352,7 +1358,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Nar'Sour" glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!" -/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/M) M.cultslurring = min(M.cultslurring + 3, 3) M.stuttering = min(M.stuttering + 3, 3) ..() @@ -1401,7 +1407,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Quadruple Sec" glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though." -/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.assigned_role in list("Security Officer", "Detective", "Head of Security", "Warden", "Lawyer")) //Securidrink in line with the screwderiver for engineers or nothing for mimes. M.heal_bodypart_damage(1, 1) M.adjustBruteLoss(-2,0) @@ -1419,7 +1425,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Quintuple Sec" glass_desc = "Now you are become law, destroyer of clowns." -/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.assigned_role in list("Security Officer", "Detective", "Head of Security", "Warden", "Lawyer")) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG.. M.heal_bodypart_damage(2,2,2) M.adjustBruteLoss(-5,0) @@ -1501,7 +1507,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste." shot_glass_icon_state = "shotglassgreen" -/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/M) M.satiety += 5 //for context, vitamins give 30 satiety per tick ..() . = TRUE @@ -1529,7 +1535,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Sugar Rush" glass_desc = "If you can't mix a Sugar Rush, you can't tend bar." -/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/M) M.satiety -= 10 //junky as hell! a whole glass will keep you from being able to eat junk food ..() . = TRUE @@ -1570,7 +1576,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Peppermint Patty" glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night." -/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) ..() @@ -1673,8 +1679,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of fernet" glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum -/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/M) - +/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) M.adjustToxLoss(1*REM, 0) M.nutrition = max(M.nutrition - 5, 0) @@ -1692,8 +1697,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of fernet cola" glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass." -/datum/reagent/consumable/ethanol/fernetcola/on_mob_life(mob/living/M) - +/datum/reagent/consumable/ethanol/fernetcola/on_mob_life(mob/living/carbon/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) M.adjustToxLoss(0.5*REM, 0) M.nutrition = max(M.nutrition - 3, 0) @@ -1712,8 +1716,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of fanciulli" glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet." -/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/M) - +/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/M) M.nutrition = max(M.nutrition - 5, 0) M.overeatduration = 0 return ..() @@ -1737,12 +1740,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this -/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) - if(M.nutrition <= NUTRITION_LEVEL_STARVING) - M.adjustToxLoss(1*REM, 0) - M.nutrition = max(M.nutrition - 5, 0) - M.overeatduration = 0 return ..() /datum/reagent/consumable/ethanol/branca_menta/on_mob_add(mob/living/M) diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index 0d5c8218ea..8ee9449468 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -199,11 +199,9 @@ M.reagents.add_reagent("spore", 0.2*reac_volume) M.apply_damage(0.7*reac_volume, TOX) -/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/M) - M.adjustToxLoss(1*REM) - if(iscarbon(M)) - var/mob/living/carbon/N = M - N.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest +/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/C) + C.adjustToxLoss(1*REM) + C.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest ..() /datum/reagent/blob/regenerative_materia/on_mob_delete(mob/living/M) @@ -346,7 +344,7 @@ M.reagents.add_reagent("cryogenic_poison", 0.3*reac_volume) M.apply_damage(0.2*reac_volume, BRUTE) -/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/M) +/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(0.3*REM, 0) M.adjustFireLoss(0.3*REM, 0) M.adjustToxLoss(0.3*REM, 0) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 10b20dde42..4d2dba4659 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -14,7 +14,7 @@ glass_name = "glass of orange juice" glass_desc = "Vitamins! Yay!" -/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/carbon/M) if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1, 0) . = 1 @@ -30,7 +30,7 @@ glass_name = "glass of tomato juice" glass_desc = "Are you sure this is tomato juice?" -/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/carbon/M) if(M.getFireLoss() && prob(20)) M.heal_bodypart_damage(0,1, 0) . = 1 @@ -46,7 +46,7 @@ glass_name = "glass of lime juice" glass_desc = "A glass of sweet-sour lime juice." -/datum/reagent/consumable/limejuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/limejuice/on_mob_life(mob/living/carbon/M) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1*REM, 0) . = 1 @@ -62,7 +62,7 @@ glass_name = "glass of carrot juice" glass_desc = "It's just like a carrot but without crunching." -/datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/carbon/M) M.adjust_blurriness(-1) M.adjust_blindness(-1) switch(current_cycle) @@ -101,7 +101,7 @@ glass_name = "glass of berry juice" glass_desc = "Berry juice. Or maybe it's poison. Who cares?" -/datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(1, 0) . = 1 ..() @@ -136,8 +136,8 @@ glass_name = "glass of banana juice" glass_desc = "The raw essence of a banana. HONK." -/datum/reagent/consumable/banana/on_mob_life(mob/living/M) - if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M)) +/datum/reagent/consumable/banana/on_mob_life(mob/living/carbon/M) + if((ishuman(M) && M.job == "Clown") || ismonkey(M)) M.heal_bodypart_damage(1,1, 0) . = 1 ..() @@ -152,8 +152,8 @@ glass_desc = "Absolutely nothing." shot_glass_icon_state = "shotglass" -/datum/reagent/consumable/nothing/on_mob_life(mob/living/M) - if(ishuman(M) && M.job in list("Mime")) +/datum/reagent/consumable/nothing/on_mob_life(mob/living/carbon/M) + if(ishuman(M) && M.job == "Mime") M.heal_bodypart_damage(1,1, 0) . = 1 ..() @@ -167,8 +167,6 @@ taste_description = "laughter" /datum/reagent/consumable/laughter/on_mob_life(mob/living/carbon/M) - if(!iscarbon(M)) - return M.emote("laugh") ..() @@ -181,8 +179,6 @@ taste_description = "laughter" /datum/reagent/consumable/superlaughter/on_mob_life(mob/living/carbon/M) - if(!iscarbon(M)) - return if(prob(30)) M.visible_message("[M] bursts out into a fit of uncontrollable laughter!", "You burst out in a fit of uncontrollable laughter!") M.Stun(5) @@ -216,7 +212,7 @@ glass_name = "glass of milk" glass_desc = "White and nutritious goodness!" -/datum/reagent/consumable/milk/on_mob_life(mob/living/M) +/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) . = 1 @@ -238,7 +234,7 @@ glass_name = "glass of soy milk" glass_desc = "White and nutritious soy goodness!" -/datum/reagent/consumable/soymilk/on_mob_life(mob/living/M) +/datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) . = 1 @@ -254,7 +250,7 @@ glass_name = "glass of cream" glass_desc = "Ewwww..." -/datum/reagent/consumable/cream/on_mob_life(mob/living/M) +/datum/reagent/consumable/cream/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) . = 1 @@ -276,7 +272,7 @@ M.Jitter(5) ..() -/datum/reagent/consumable/coffee/on_mob_life(mob/living/M) +/datum/reagent/consumable/coffee/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) @@ -298,7 +294,7 @@ glass_name = "glass of tea" glass_desc = "Drinking it from here would not seem right." -/datum/reagent/consumable/tea/on_mob_life(mob/living/M) +/datum/reagent/consumable/tea/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-2) M.drowsyness = max(0,M.drowsyness-1) M.jitteriness = max(0,M.jitteriness-3) @@ -320,7 +316,7 @@ glass_name = "Arnold Palmer" glass_desc = "You feel like taking a few golf swings after a few swigs of this." -/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/M) +/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/M) if(prob(5)) to_chat(M, "[pick("You remember to square your shoulders.","You remember to keep your head down.","You can't decide between squaring your shoulders and keeping your head down.","You remember to relax.","You think about how someday you'll get two strokes off your golf game.")]") ..() @@ -337,7 +333,7 @@ glass_name = "iced coffee" glass_desc = "A drink to perk you up and refresh you!" -/datum/reagent/consumable/icecoffee/on_mob_life(mob/living/M) +/datum/reagent/consumable/icecoffee/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) @@ -357,7 +353,7 @@ glass_name = "iced tea" glass_desc = "All natural, antioxidant-rich flavour sensation." -/datum/reagent/consumable/icetea/on_mob_life(mob/living/M) +/datum/reagent/consumable/icetea/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-2) M.drowsyness = max(0,M.drowsyness-1) M.AdjustSleeping(-40, FALSE) @@ -377,7 +373,7 @@ glass_name = "glass of Space Cola" glass_desc = "A glass of refreshing Space Cola." -/datum/reagent/consumable/space_cola/on_mob_life(mob/living/M) +/datum/reagent/consumable/space_cola/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-5) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -392,19 +388,15 @@ glass_name = "glass of Nuka Cola" glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." -/datum/reagent/consumable/nuka_cola/on_mob_add(mob/M) +/datum/reagent/consumable/nuka_cola/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOFAST, id) + L.add_trait(TRAIT_GOTTAGOFAST, id) -/datum/reagent/consumable/nuka_cola/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOFAST, id) +/datum/reagent/consumable/nuka_cola/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOFAST, id) ..() -/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M) +/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M) M.Jitter(20) M.set_drugginess(30) M.dizziness +=1.5 @@ -424,7 +416,7 @@ glass_name = "glass of Space Mountain Wind" glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." -/datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/M) +/datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-20, FALSE) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) @@ -442,7 +434,7 @@ glass_name = "glass of Dr. Gibb" glass_desc = "Dr. Gibb. Not as dangerous as the glass_name might imply." -/datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/M) +/datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-6) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -458,7 +450,7 @@ glass_desc = "Space-up. It helps you keep your cool." -/datum/reagent/consumable/space_up/on_mob_life(mob/living/M) +/datum/reagent/consumable/space_up/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -473,7 +465,7 @@ glass_desc = "You're pretty certain a real fruit has never actually touched this." -/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/M) +/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -487,7 +479,7 @@ glass_name = "glass of Pwr Game" glass_desc = "Goes well with a Vlad's salad." -/datum/reagent/consumable/pwr_game/on_mob_life(mob/living/M) +/datum/reagent/consumable/pwr_game/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -501,7 +493,7 @@ glass_name = "glass of Shambler's juice" glass_desc = "Mmm mm, shambly." -/datum/reagent/consumable/shamblers/on_mob_life(mob/living/M) +/datum/reagent/consumable/shamblers/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() /datum/reagent/consumable/sodawater @@ -514,7 +506,7 @@ glass_name = "glass of soda water" glass_desc = "Soda water. Why not make a scotch and soda?" -/datum/reagent/consumable/sodawater/on_mob_life(mob/living/M) +/datum/reagent/consumable/sodawater/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) @@ -530,7 +522,7 @@ glass_name = "glass of tonic water" glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." -/datum/reagent/consumable/tonic/on_mob_life(mob/living/M) +/datum/reagent/consumable/tonic/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) @@ -549,7 +541,7 @@ glass_name = "glass of ice" glass_desc = "Generally, you're supposed to put something else in there too..." -/datum/reagent/consumable/ice/on_mob_life(mob/living/M) +/datum/reagent/consumable/ice/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -563,7 +555,7 @@ glass_name = "soy latte" glass_desc = "A nice and refreshing beverage while you're reading." -/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/M) +/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0, FALSE) @@ -584,7 +576,7 @@ glass_name = "cafe latte" glass_desc = "A nice, strong and refreshing beverage while you're reading." -/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/M) +/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0, FALSE) @@ -605,7 +597,7 @@ glass_name = "Doctor's Delight" glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger." -/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/M) +/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-0.5, 0) M.adjustFireLoss(-0.5, 0) M.adjustToxLoss(-0.5, 0) @@ -739,4 +731,4 @@ color = "#EA1D26" taste_description = "sweet pomegranates" glass_name = "glass of grenadine" - glass_desc = "Delicious flavored syrup." \ No newline at end of file + glass_desc = "Delicious flavored syrup." diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 377ddc47fd..33511c8905 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -7,7 +7,7 @@ /datum/reagent/drug/on_mob_delete(mob/living/M) if(trippy) - M.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "[id]_high") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[id]_high") /datum/reagent/drug/space_drugs name = "Space drugs" @@ -16,7 +16,7 @@ color = "#60A584" // rgb: 96, 165, 132 overdose_threshold = 30 -/datum/reagent/drug/space_drugs/on_mob_life(mob/living/M) +/datum/reagent/drug/space_drugs/on_mob_life(mob/living/carbon/M) M.set_drugginess(15) if(isturf(M.loc) && !isspaceturf(M.loc)) if(M.canmove) @@ -28,7 +28,7 @@ /datum/reagent/drug/space_drugs/overdose_start(mob/living/M) to_chat(M, "You start tripping hard!") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) /datum/reagent/drug/space_drugs/overdose_process(mob/living/M) if(M.hallucination < volume && prob(20)) @@ -45,11 +45,11 @@ taste_description = "smoke" trippy = FALSE -/datum/reagent/drug/nicotine/on_mob_life(mob/living/M) +/datum/reagent/drug/nicotine/on_mob_life(mob/living/carbon/M) if(prob(1)) var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.") to_chat(M, "[smoke_message]") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/drugs/smoked, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/drugs/smoked, name) M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) @@ -66,7 +66,7 @@ overdose_threshold = 20 addiction_threshold = 10 -/datum/reagent/drug/crank/on_mob_life(mob/living/M) +/datum/reagent/drug/crank/on_mob_life(mob/living/carbon/M) if(prob(5)) var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.") to_chat(M, "[high_message]") @@ -114,7 +114,7 @@ addiction_threshold = 15 -/datum/reagent/drug/krokodil/on_mob_life(mob/living/M) +/datum/reagent/drug/krokodil/on_mob_life(mob/living/carbon/M) var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") if(prob(5)) to_chat(M, "[high_message]") @@ -165,19 +165,15 @@ addiction_threshold = 10 metabolization_rate = 0.75 * REAGENTS_METABOLISM -/datum/reagent/drug/methamphetamine/on_mob_add(mob/M) +/datum/reagent/drug/methamphetamine/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOREALLYFAST, id) + L.add_trait(TRAIT_GOTTAGOREALLYFAST, id) -/datum/reagent/drug/methamphetamine/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id) +/datum/reagent/drug/methamphetamine/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id) ..() -/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/M) +/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M) var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.") if(prob(5)) to_chat(M, "[high_message]") @@ -252,27 +248,23 @@ taste_description = "salt" // because they're bathsalts? var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage -/datum/reagent/drug/bath_salts/on_mob_add(mob/M) +/datum/reagent/drug/bath_salts/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_STUNIMMUNE, id) - L.add_trait(TRAIT_SLEEPIMMUNE, id) - if(iscarbon(L)) - var/mob/living/carbon/C = L - rage = new() - C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE) + L.add_trait(TRAIT_STUNIMMUNE, id) + L.add_trait(TRAIT_SLEEPIMMUNE, id) + if(iscarbon(L)) + var/mob/living/carbon/C = L + rage = new() + C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE) -/datum/reagent/drug/bath_salts/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_STUNIMMUNE, id) - L.remove_trait(TRAIT_SLEEPIMMUNE, id) - if(rage) - QDEL_NULL(rage) +/datum/reagent/drug/bath_salts/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_STUNIMMUNE, id) + L.remove_trait(TRAIT_SLEEPIMMUNE, id) + if(rage) + QDEL_NULL(rage) ..() -/datum/reagent/drug/bath_salts/on_mob_life(mob/living/M) +/datum/reagent/drug/bath_salts/on_mob_life(mob/living/carbon/M) var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") if(prob(5)) to_chat(M, "[high_message]") @@ -352,7 +344,7 @@ reagent_state = LIQUID color = "#78FFF0" -/datum/reagent/drug/aranesp/on_mob_life(mob/living/M) +/datum/reagent/drug/aranesp/on_mob_life(mob/living/carbon/M) var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") if(prob(5)) to_chat(M, "[high_message]") diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 3b1af3a599..459cbefaa2 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -14,7 +14,7 @@ taste_mult = 4 var/nutriment_factor = 1 * REAGENTS_METABOLISM -/datum/reagent/consumable/on_mob_life(mob/living/M) +/datum/reagent/consumable/on_mob_life(mob/living/carbon/M) current_cycle++ M.nutrition += nutriment_factor holder.remove_reagent(src.id, metabolization_rate) @@ -30,7 +30,7 @@ var/brute_heal = 1 var/burn_heal = 0 -/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M) +/datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M) if(prob(50)) M.heal_bodypart_damage(brute_heal,burn_heal, 0) . = 1 @@ -78,7 +78,7 @@ brute_heal = 1 burn_heal = 1 -/datum/reagent/consumable/nutriment/vitamin/on_mob_life(mob/living/M) +/datum/reagent/consumable/nutriment/vitamin/on_mob_life(mob/living/carbon/M) if(M.satiety < 600) M.satiety += 30 . = ..() @@ -183,7 +183,7 @@ taste_description = "hot peppers" taste_mult = 1.5 -/datum/reagent/consumable/capsaicin/on_mob_life(mob/living/M) +/datum/reagent/consumable/capsaicin/on_mob_life(mob/living/carbon/M) var/heating = 0 switch(current_cycle) if(1 to 15) @@ -214,7 +214,7 @@ color = "#8BA6E9" // rgb: 139, 166, 233 taste_description = "mint" -/datum/reagent/consumable/frostoil/on_mob_life(mob/living/M) +/datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M) var/cooling = 0 switch(current_cycle) if(1 to 15) @@ -320,7 +320,7 @@ victim.Knockdown(100) victim.update_damage_hud() -/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M) +/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M) if(prob(5)) M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") ..() @@ -374,7 +374,7 @@ glass_name = "glass of chocolate" glass_desc = "Tasty." -/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M) +/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) ..() @@ -386,7 +386,7 @@ metabolization_rate = 0.2 * REAGENTS_METABOLISM taste_description = "mushroom" -/datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/M) +/datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/carbon/M) if(!M.slurring) M.slurring = 1 switch(current_cycle) @@ -416,7 +416,7 @@ color = "#FF00FF" // rgb: 255, 0, 255 taste_description = "childhood whimsy" -/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M) +/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M) if(ishuman(M) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden")) M.heal_bodypart_damage(1,1, 0) . = 1 @@ -465,7 +465,7 @@ color = "#302000" // rgb: 48, 32, 0 taste_description = "wet and cheap noodles" -/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/M) +/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) ..() @@ -477,7 +477,7 @@ color = "#302000" // rgb: 48, 32, 0 taste_description = "wet and cheap noodles on fire" -/datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/M) +/datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT) ..() @@ -549,7 +549,7 @@ metabolization_rate = 3 * REAGENTS_METABOLISM taste_description = "sweet slime" -/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/M) +/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/carbon/M) holder.add_reagent("sugar", 3) ..() @@ -562,7 +562,7 @@ metabolization_rate = 1 * REAGENTS_METABOLISM taste_description = "sweetness" -/datum/reagent/consumable/honey/on_mob_life(mob/living/M) +/datum/reagent/consumable/honey/on_mob_life(mob/living/carbon/M) M.reagents.add_reagent("sugar",3) if(prob(55)) M.adjustBruteLoss(-1*REM, 0) @@ -615,7 +615,7 @@ M.blur_eyes(5) ..() -/datum/reagent/consumable/tearjuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/tearjuice/on_mob_life(mob/living/carbon/M) ..() if(M.eye_blurry) //Don't worsen vision if it was otherwise fine M.blur_eyes(4) @@ -632,7 +632,7 @@ nutriment_factor = 15 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 -/datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/M) +/datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M) if(M.nutrition > NUTRITION_LEVEL_FULL - 25) M.nutrition -= 3*nutriment_factor ..() @@ -647,7 +647,7 @@ color = "#1d043d" taste_description = "bitter mushroom" -/datum/reagent/consumable/entpoly/on_mob_life(mob/living/M) +/datum/reagent/consumable/entpoly/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) M.Unconscious(40, 0) . = 1 @@ -681,7 +681,7 @@ nutriment_factor = 3 * REAGENTS_METABOLISM taste_description = "fruity mushroom" -/datum/reagent/consumable/vitfro/on_mob_life(mob/living/M) +/datum/reagent/consumable/vitfro/on_mob_life(mob/living/carbon/M) if(prob(80)) M.adjustBruteLoss(-1*REM, 0) M.adjustFireLoss(-1*REM, 0) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index c12c770ea2..474e24f5a5 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -10,7 +10,7 @@ id = "medicine" taste_description = "bitterness" -/datum/reagent/medicine/on_mob_life(mob/living/M) +/datum/reagent/medicine/on_mob_life(mob/living/carbon/M) current_cycle++ holder.remove_reagent(src.id, metabolization_rate / M.metabolism_efficiency) //medicine reagents stay longer if you have a better metabolism @@ -20,7 +20,7 @@ description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels." color = "#C8A5DC" // rgb: 200, 165, 220 -/datum/reagent/medicine/leporazine/on_mob_life(mob/living/M) +/datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > BODYTEMP_NORMAL) M.adjust_bodytemperature(-40 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) else if(M.bodytemperature < (BODYTEMP_NORMAL + 1)) @@ -80,7 +80,7 @@ description = "Increases resistance to stuns as well as reducing drowsiness and hallucinations." color = "#FF00FF" -/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/M) +/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/carbon/M) M.drowsyness = max(M.drowsyness-5, 0) M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) @@ -99,7 +99,7 @@ description = "Reduces drowsiness, hallucinations, and Histamine from body." color = "#EC536D" // rgb: 236, 83, 109 -/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M) +/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M) M.drowsyness = max(M.drowsyness-5, 0) if(holder.has_reagent("mindbreaker")) holder.remove_reagent("mindbreaker", 5) @@ -117,7 +117,7 @@ description = "Instantly restores all hearing to the patient, but does not cure deafness." color = "#6600FF" // rgb: 100, 165, 255 -/datum/reagent/medicine/inacusiate/on_mob_life(mob/living/M) +/datum/reagent/medicine/inacusiate/on_mob_life(mob/living/carbon/M) M.restoreEars() ..() @@ -128,7 +128,7 @@ color = "#0000C8" taste_description = "sludge" -/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M) +/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M) var/power = -0.00003 * (M.bodytemperature ** 2) + 3 if(M.bodytemperature < T0C) M.adjustOxyLoss(-3 * power, 0) @@ -149,7 +149,7 @@ taste_description = "muscle" metabolization_rate = 1.5 * REAGENTS_METABOLISM -/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/M) +/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M) if(M.bodytemperature < T0C) M.adjustCloneLoss(0.00006 * (M.bodytemperature ** 2) - 6, 0) M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) @@ -164,7 +164,7 @@ color = "#f7832a" taste_description = "spicy jelly" -/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/M) +/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) var/power = 0 switch(M.bodytemperature) @@ -195,7 +195,7 @@ overdose_threshold = 30 taste_description = "fish" -/datum/reagent/medicine/rezadone/on_mob_life(mob/living/M) +/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M) M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. M.heal_bodypart_damage(1,1) M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) @@ -237,7 +237,7 @@ M.emote("scream") ..() -/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M) +/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(-2*REM, 0) ..() . = 1 @@ -251,7 +251,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 25 -/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/M) +/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M) if(M.getFireLoss() > 50) M.adjustFireLoss(-4*REM, 0) //Twice as effective as silver sulfadiazine for severe burns else @@ -286,7 +286,7 @@ ..() -/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M) +/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-2*REM, 0) ..() . = 1 @@ -303,7 +303,7 @@ var/last_added = 0 var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active -/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/M) +/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M) if(last_added) M.blood_volume -= last_added last_added = 0 @@ -315,7 +315,7 @@ if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) - . = 1 + . = TRUE ..() /datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M) @@ -330,7 +330,7 @@ if(prob(33)) M.adjustBruteLoss(0.5*REM, 0) M.adjustFireLoss(0.5*REM, 0) - . = 1 + . = TRUE ..() /datum/reagent/medicine/mine_salve @@ -341,14 +341,12 @@ color = "#6D6374" metabolization_rate = 0.4 * REAGENTS_METABOLISM -/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/N = M - N.hal_screwyhud = SCREWYHUD_HEALTHY - M.adjustBruteLoss(-0.25*REM, 0) - M.adjustFireLoss(-0.25*REM, 0) +/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C) + C.hal_screwyhud = SCREWYHUD_HEALTHY + C.adjustBruteLoss(-0.25*REM, 0) + C.adjustFireLoss(-0.25*REM, 0) ..() - . = 1 + return TRUE /datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) @@ -400,7 +398,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "ash" -/datum/reagent/medicine/charcoal/on_mob_life(mob/living/M) +/datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-2*REM, 0) . = 1 for(var/datum/reagent/R in M.reagents.reagent_list) @@ -417,7 +415,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 -/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M) +/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-0.5*REM, 0) M.adjustOxyLoss(-0.5*REM, 0) M.adjustBruteLoss(-0.5*REM, 0) @@ -442,7 +440,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "acid" -/datum/reagent/medicine/calomel/on_mob_life(mob/living/M) +/datum/reagent/medicine/calomel/on_mob_life(mob/living/carbon/M) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) M.reagents.remove_reagent(R.id,2.5) @@ -459,7 +457,7 @@ color = "#14FF3C" metabolization_rate = 2 * REAGENTS_METABOLISM -/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M) +/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/carbon/M) if(M.radiation > 0) M.radiation -= min(M.radiation, 8) ..() @@ -472,7 +470,7 @@ color = "#E6FFF0" metabolization_rate = 0.5 * REAGENTS_METABOLISM -/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M) +/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M) M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/50 M.adjustToxLoss(-2*REM, 0) for(var/datum/reagent/R in M.reagents.reagent_list) @@ -491,7 +489,7 @@ overdose_threshold = 25 -/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M) +/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() > 50) M.adjustBruteLoss(-4*REM, 0) //Twice as effective as styptic powder for severe bruising else @@ -513,7 +511,7 @@ color = "#00FFFF" metabolization_rate = 0.25 * REAGENTS_METABOLISM -/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/M) +/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/carbon/M) M.adjustOxyLoss(-3*REM, 0) if(M.losebreath >= 4) M.losebreath -= 2 @@ -535,7 +533,7 @@ M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) ..() - . = 1 + return TRUE /datum/reagent/medicine/ephedrine name = "Ephedrine" @@ -547,32 +545,28 @@ overdose_threshold = 45 addiction_threshold = 30 -/datum/reagent/medicine/ephedrine/on_mob_add(mob/M) +/datum/reagent/medicine/ephedrine/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOFAST, id) + L.add_trait(TRAIT_GOTTAGOFAST, id) -/datum/reagent/medicine/ephedrine/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOFAST, id) +/datum/reagent/medicine/ephedrine/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOFAST, id) ..() -/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M) +/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M) M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) M.adjustStaminaLoss(-1*REM, 0) ..() - . = 1 + return TRUE /datum/reagent/medicine/ephedrine/overdose_process(mob/living/M) if(prob(33)) M.adjustToxLoss(0.5*REM, 0) M.losebreath++ . = 1 - ..() + return TRUE /datum/reagent/medicine/ephedrine/addiction_act_stage1(mob/living/M) if(prob(33)) @@ -610,7 +604,7 @@ color = "#64FFE6" metabolization_rate = 0.5 * REAGENTS_METABOLISM -/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/M) +/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M) if(prob(10)) M.drowsyness += 1 M.jitteriness -= 1 @@ -627,19 +621,15 @@ overdose_threshold = 30 addiction_threshold = 25 -/datum/reagent/medicine/morphine/on_mob_add(mob/M) +/datum/reagent/medicine/morphine/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_IGNORESLOWDOWN, id) + L.add_trait(TRAIT_IGNORESLOWDOWN, id) -/datum/reagent/medicine/morphine/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_IGNORESLOWDOWN, id) +/datum/reagent/medicine/morphine/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_IGNORESLOWDOWN, id) ..() -/datum/reagent/medicine/morphine/on_mob_life(mob/living/M) +/datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M) switch(current_cycle) if(11) to_chat(M, "You start to feel tired..." ) @@ -699,7 +689,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM taste_description = "dull toxin" -/datum/reagent/medicine/oculine/on_mob_life(mob/living/M) +/datum/reagent/medicine/oculine/on_mob_life(mob/living/carbon/M) var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) if (!eyes) return @@ -730,7 +720,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 35 -/datum/reagent/medicine/atropine/on_mob_life(mob/living/M) +/datum/reagent/medicine/atropine/on_mob_life(mob/living/carbon/M) if(M.health < 0) M.adjustToxLoss(-2*REM, 0) M.adjustBruteLoss(-2*REM, 0) @@ -759,7 +749,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 -/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/M) +/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/carbon/M) if(M.health < 0) M.adjustToxLoss(-0.5*REM, 0) M.adjustBruteLoss(-0.5*REM, 0) @@ -816,7 +806,7 @@ add_logs(M, M, "revived", src) ..() -/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M) +/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(0.5*REM, 0) M.adjustFireLoss(0.5*REM, 0) ..() @@ -828,12 +818,10 @@ description = "Efficiently restores brain damage." color = "#DCDCFF" -/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M) - M.adjustBrainLoss(-2*REM) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(prob(10)) - C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) +/datum/reagent/medicine/mannitol/on_mob_life(mob/living/carbon/C) + C.adjustBrainLoss(-2*REM) + if(prob(10)) + C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) ..() /datum/reagent/medicine/mutadone @@ -843,7 +831,7 @@ color = "#5096C8" taste_description = "acid" -/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/M) M.jitteriness = 0 if(M.has_dna()) M.dna.remove_all_mutations() @@ -857,7 +845,7 @@ color = "#00B4C8" taste_description = "raw egg" -/datum/reagent/medicine/antihol/on_mob_life(mob/living/M) +/datum/reagent/medicine/antihol/on_mob_life(mob/living/carbon/M) M.dizziness = 0 M.drowsyness = 0 M.slurring = 0 @@ -878,19 +866,15 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 -/datum/reagent/medicine/stimulants/on_mob_add(mob/M) +/datum/reagent/medicine/stimulants/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOFAST, id) + L.add_trait(TRAIT_GOTTAGOFAST, id) -/datum/reagent/medicine/stimulants/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOFAST, id) +/datum/reagent/medicine/stimulants/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOFAST, id) ..() -/datum/reagent/medicine/stimulants/on_mob_life(mob/living/M) +/datum/reagent/medicine/stimulants/on_mob_life(mob/living/carbon/M) if(M.health < 50 && M.health > 0) M.adjustOxyLoss(-1*REM, 0) M.adjustToxLoss(-1*REM, 0) @@ -919,7 +903,7 @@ color = "#FFFFF0" metabolization_rate = 0.5 * REAGENTS_METABOLISM -/datum/reagent/medicine/insulin/on_mob_life(mob/living/M) +/datum/reagent/medicine/insulin/on_mob_life(mob/living/carbon/M) if(M.AdjustSleeping(-20, FALSE)) . = 1 M.reagents.remove_reagent("sugar", 3) @@ -934,7 +918,7 @@ color = "#C8A5DC" overdose_threshold = 30 -/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M) +/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-2*REM, 0) ..() . = 1 @@ -952,7 +936,7 @@ color = "#C8A5DC" overdose_threshold = 30 -/datum/reagent/medicine/dexalin/on_mob_life(mob/living/M) +/datum/reagent/medicine/dexalin/on_mob_life(mob/living/carbon/M) M.adjustOxyLoss(-2*REM, 0) ..() . = 1 @@ -970,7 +954,7 @@ color = "#C8A5DC" overdose_threshold = 30 -/datum/reagent/medicine/kelotane/on_mob_life(mob/living/M) +/datum/reagent/medicine/kelotane/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(-2*REM, 0) ..() . = 1 @@ -989,7 +973,7 @@ overdose_threshold = 30 taste_description = "a roll of gauze" -/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/M) +/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-2*REM, 0) for(var/datum/reagent/toxin/R in M.reagents.reagent_list) M.reagents.remove_reagent(R.id,1) @@ -1008,7 +992,7 @@ reagent_state = LIQUID color = "#C8A5DC" -/datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/M) +/datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/carbon/M) if(M.losebreath >= 5) M.losebreath -= 5 ..() @@ -1022,7 +1006,7 @@ overdose_threshold = 30 taste_description = "grossness" -/datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/M) +/datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/carbon/M) if(prob(80)) M.adjustBruteLoss(-1*REM, 0) M.adjustFireLoss(-1*REM, 0) @@ -1047,7 +1031,7 @@ color = "#91D865" taste_description = "jelly" -/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/M) +/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-1.5*REM, 0) M.adjustFireLoss(-1.5*REM, 0) M.adjustOxyLoss(-1.5*REM, 0) @@ -1062,7 +1046,7 @@ reagent_state = SOLID color = "#555555" -/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M) +/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-5*REM, 0) //A ton of healing - this is a 50 telecrystal investment. M.adjustFireLoss(-5*REM, 0) M.adjustOxyLoss(-15, 0) @@ -1079,7 +1063,7 @@ color = rgb(255, 175, 0) overdose_threshold = 25 -/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/M) +/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3 * REM, 0) M.adjustFireLoss(-3 * REM, 0) M.adjustOxyLoss(-15 * REM, 0) @@ -1106,7 +1090,7 @@ color = "#27870a" metabolization_rate = 0.4 * REAGENTS_METABOLISM -/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/M) +/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M) for(var/datum/reagent/drug/R in M.reagents.reagent_list) M.reagents.remove_reagent(R.id,5) M.drowsyness += 2 @@ -1118,7 +1102,7 @@ M.adjustBrainLoss(1*REM, 50) M.adjustStaminaLoss(2.5*REM, 0) ..() - . = 1 + return TRUE /datum/reagent/medicine/miningnanites name = "Nanites" @@ -1128,17 +1112,17 @@ overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent can_synth = FALSE -/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/M) +/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/carbon/M) M.heal_bodypart_damage(5,5) ..() - . = 1 + return TRUE /datum/reagent/medicine/miningnanites/overdose_process(mob/living/M) M.adjustBruteLoss(3*REM, 0) M.adjustFireLoss(3*REM, 0) M.adjustToxLoss(3*REM, 0) ..() - . = 1 + return TRUE //used for changeling's adrenaline power /datum/reagent/medicine/changelingadrenaline @@ -1148,18 +1132,18 @@ color = "#C8A5DC" overdose_threshold = 30 -/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/M as mob) +/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob) M.AdjustUnconscious(-20, 0) M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.adjustStaminaLoss(-1, 0) - . = 1 ..() + return TRUE /datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/M as mob) M.adjustToxLoss(1, 0) - . = 1 ..() + return TRUE /datum/reagent/medicine/changelinghaste name = "Changeling Haste" @@ -1168,22 +1152,18 @@ color = "#C8A5DC" metabolization_rate = 1 -/datum/reagent/medicine/changelinghaste/on_mob_add(mob/M) +/datum/reagent/medicine/changelinghaste/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOREALLYFAST, id) + L.add_trait(TRAIT_GOTTAGOREALLYFAST, id) -/datum/reagent/medicine/changelinghaste/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id) +/datum/reagent/medicine/changelinghaste/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id) ..() -/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/M as mob) +/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(2, 0) - . = 1 ..() + return TRUE /datum/reagent/medicine/corazone // Heart attack code will not do damage if corazone is present @@ -1226,7 +1206,7 @@ M.remove_trait(TRAIT_SLEEPIMMUNE, id) ..() -/datum/reagent/medicine/modafinil/on_mob_life(mob/living/M) +/datum/reagent/medicine/modafinil/on_mob_life(mob/living/carbon/M) if(!overdosed) // We do not want any effects on OD overdose_threshold = overdose_threshold + rand(-10,10)/10 // for extra fun M.AdjustStun(-5, 0) @@ -1235,7 +1215,7 @@ M.adjustStaminaLoss(-0.5*REM, 0) M.Jitter(1) metabolization_rate = 0.01 * REAGENTS_METABOLISM * rand(5,20) // randomizes metabolism between 0.02 and 0.08 per tick - . = 1 + . = TRUE ..() /datum/reagent/medicine/modafinil/overdose_start(mob/living/M) @@ -1272,5 +1252,4 @@ M.adjustOxyLoss(1.5*REM, 0) M.adjustStaminaLoss(1.5*REM, 0) ..() - . = 1 - + return TRUE diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 81818554ef..039f41a471 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -11,7 +11,7 @@ glass_desc = "Are you sure this is tomato juice?" shot_glass_icon_state = "shotglassred" -/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume) +/datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(data && data["viruses"]) for(var/thing in data["viruses"]) var/datum/disease/D = thing @@ -19,15 +19,13 @@ if((D.spread_flags & DISEASE_SPREAD_SPECIAL) || (D.spread_flags & DISEASE_SPREAD_NON_CONTAGIOUS)) continue - if(isliving(M)) - var/mob/living/L = M - if((method == TOUCH || method == VAPOR) && (D.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS)) - L.ContactContractDisease(D) - else //ingest, patch or inject - L.ForceContractDisease(D) + if((method == TOUCH || method == VAPOR) && (D.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS)) + L.ContactContractDisease(D) + else //ingest, patch or inject + L.ForceContractDisease(D) - if(iscarbon(M)) - var/mob/living/carbon/C = M + if(iscarbon(L)) + var/mob/living/carbon/C = L if(C.get_blood_id() == "blood" && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) C.reagents.add_reagent("toxin", reac_volume * 0.5) @@ -99,10 +97,7 @@ color = "#C81040" // rgb: 200, 16, 64 taste_description = "slime" -/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, reac_volume) - if(!isliving(M)) - return - var/mob/living/L = M +/datum/reagent/vaccine/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(islist(data) && (method == INGEST || method == INJECT)) for(var/thing in L.diseases) var/datum/disease/D = thing @@ -195,16 +190,12 @@ glass_name = "glass of holy water" glass_desc = "A glass of holy water." -/datum/reagent/water/holywater/on_mob_add(mob/M) +/datum/reagent/water/holywater/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_HOLY, id) + L.add_trait(TRAIT_HOLY, id) -/datum/reagent/water/holywater/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_HOLY, id) +/datum/reagent/water/holywater/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_HOLY, id) ..() /datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume) @@ -212,7 +203,7 @@ to_chat(M, "A darkness begins to spread its unholy tendrils through your mind, purging the Justiciar's influence!") ..() -/datum/reagent/water/holywater/on_mob_life(mob/living/M) +/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) if(!data) data = 1 data++ @@ -276,7 +267,7 @@ return return ..() -/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) +/datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/M) if(iscultist(M)) M.drowsyness = max(M.drowsyness-5, 0) M.AdjustUnconscious(-20, 0) @@ -296,7 +287,7 @@ M.adjustOxyLoss(2, 0) M.adjustBruteLoss(2, 0) holder.remove_reagent(id, 1) - . = 1 + return TRUE /datum/reagent/hellwater //if someone has this in their system they've really pissed off an eldrich god name = "Hell Water" @@ -304,13 +295,13 @@ description = "YOUR FLESH! IT BURNS!" taste_description = "burning" -/datum/reagent/hellwater/on_mob_life(mob/living/M) +/datum/reagent/hellwater/on_mob_life(mob/living/carbon/M) M.fire_stacks = min(5,M.fire_stacks + 3) M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire M.adjustToxLoss(1, 0) M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard? M.adjustBrainLoss(5, 150) - holder.remove_reagent(src.id, 1) + holder.remove_reagent(id, 1) /datum/reagent/medicine/omnizine/godblood name = "Godblood" @@ -620,10 +611,12 @@ taste_description = "slime" /datum/reagent/mulligan/on_mob_life(mob/living/carbon/human/H) + ..() + if (!istype(H)) + return to_chat(H, "You grit your teeth in pain as your body rapidly mutates!") H.visible_message("[H] suddenly transforms!") randomize_human(H) - ..() /datum/reagent/aslimetoxin name = "Advanced Mutation Toxin" @@ -632,10 +625,7 @@ color = "#13BC5E" // rgb: 19, 188, 94 taste_description = "slime" -/datum/reagent/aslimetoxin/reaction_mob(mob/M, method=TOUCH, reac_volume) - if(!isliving(M)) - return - var/mob/living/L = M +/datum/reagent/aslimetoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(method != TOUCH) L.ForceContractDisease(new /datum/disease/transformation/slime(), FALSE, TRUE) @@ -647,10 +637,7 @@ can_synth = FALSE taste_description = "decay" -/datum/reagent/gluttonytoxin/reaction_mob(mob/M, method=TOUCH, reac_volume) - if(!isliving(M)) - return - var/mob/living/L = M +/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume) L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE) /datum/reagent/serotrotium @@ -661,7 +648,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM taste_description = "bitterness" -/datum/reagent/serotrotium/on_mob_life(mob/living/M) +/datum/reagent/serotrotium/on_mob_life(mob/living/carbon/M) if(ishuman(M)) if(prob(7)) M.emote(pick("twitch","drool","moan","gasp")) @@ -745,7 +732,7 @@ color = "#484848" // rgb: 72, 72, 72A taste_mult = 0 // apparently tasteless. -/datum/reagent/mercury/on_mob_life(mob/living/M) +/datum/reagent/mercury/on_mob_life(mob/living/carbon/M) if(M.canmove && !isspaceturf(M.loc)) step(M, pick(GLOB.cardinals)) if(prob(5)) @@ -783,7 +770,7 @@ color = "#808080" // rgb: 128, 128, 128 taste_description = "chlorine" -/datum/reagent/chlorine/on_mob_life(mob/living/M) +/datum/reagent/chlorine/on_mob_life(mob/living/carbon/M) M.take_bodypart_damage(1*REM, 0, 0, 0) . = 1 ..() @@ -796,7 +783,7 @@ color = "#808080" // rgb: 128, 128, 128 taste_description = "acid" -/datum/reagent/fluorine/on_mob_life(mob/living/M) +/datum/reagent/fluorine/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(1*REM, 0) . = 1 ..() @@ -825,7 +812,7 @@ color = "#808080" // rgb: 128, 128, 128 taste_description = "metal" -/datum/reagent/lithium/on_mob_life(mob/living/M) +/datum/reagent/lithium/on_mob_life(mob/living/carbon/M) if(M.canmove && !isspaceturf(M.loc)) step(M, pick(GLOB.cardinals)) if(prob(5)) @@ -847,7 +834,7 @@ color = "#C7C7C7" // rgb: 199,199,199 taste_description = "the colour blue and regret" -/datum/reagent/radium/on_mob_life(mob/living/M) +/datum/reagent/radium/on_mob_life(mob/living/carbon/M) M.apply_effect(2*REM/M.metabolism_efficiency,EFFECT_IRRADIATE,0) ..() @@ -866,9 +853,8 @@ color = "#C8A5DC" // rgb: 200, 165, 220 taste_description = "bitterness" -/datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH))) - var/mob/living/carbon/C = M +/datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume) + if(method in list(TOUCH, VAPOR, PATCH)) for(var/s in C.surgeries) var/datum/surgery/S = s S.success_multiplier = max(0.2, S.success_multiplier) @@ -884,16 +870,12 @@ color = "#C8A5DC" // rgb: 200, 165, 220 -/datum/reagent/iron/on_mob_life(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(C.blood_volume < BLOOD_VOLUME_NORMAL) - C.blood_volume += 0.5 +/datum/reagent/iron/on_mob_life(mob/living/carbon/C) + if(C.blood_volume < BLOOD_VOLUME_NORMAL) + C.blood_volume += 0.5 ..() /datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(!isliving(M)) - return if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them. if(holder && holder.chem_temp < 100) // COLD iron. M.reagents.add_reagent("toxin", reac_volume) @@ -916,8 +898,6 @@ taste_description = "expensive yet reasonable metal" /datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(!isliving(M)) - return if(M.has_bane(BANE_SILVER)) M.reagents.add_reagent("toxin", reac_volume) ..() @@ -930,7 +910,7 @@ color = "#B8B8C0" // rgb: 184, 184, 192 taste_description = "the inside of a reactor" -/datum/reagent/uranium/on_mob_life(mob/living/M) +/datum/reagent/uranium/on_mob_life(mob/living/carbon/M) M.apply_effect(1/M.metabolism_efficiency,EFFECT_IRRADIATE,0) ..() @@ -955,7 +935,7 @@ do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg') //4 tiles per crystal ..() -/datum/reagent/bluespace/on_mob_life(mob/living/M) +/datum/reagent/bluespace/on_mob_life(mob/living/carbon/M) if(current_cycle > 10 && prob(15)) to_chat(M, "You feel unstable...") M.Jitter(2) @@ -993,17 +973,15 @@ glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption." /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite! - if(!isliving(M)) - return if(method == TOUCH || method == VAPOR) M.adjust_fire_stacks(reac_volume / 10) return ..() -/datum/reagent/fuel/on_mob_life(mob/living/M) +/datum/reagent/fuel/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(1, 0) - . = 1 ..() + return TRUE /datum/reagent/space_cleaner name = "Space cleaner" @@ -1018,19 +996,19 @@ else if(O) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume) if(reac_volume >= 1) T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - T.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/obj/effect/decal/cleanable/C in T) qdel(C) for(var/mob/living/simple_animal/slime/M in T) M.adjustToxLoss(rand(5,10)) -/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, reac_volume) +/datum/reagent/space_cleaner/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) M.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) if(iscarbon(M)) @@ -1041,26 +1019,26 @@ H.lip_style = null H.update_body() for(var/obj/item/I in C.held_items) - I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(C.wear_mask) - if(C.wear_mask.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(C.wear_mask, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) C.update_inv_wear_mask() if(ishuman(M)) var/mob/living/carbon/human/H = C if(H.head) - if(H.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.head, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_head() if(H.wear_suit) - if(H.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.wear_suit, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_wear_suit() else if(H.w_uniform) - if(H.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_w_uniform() if(H.shoes) - if(H.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_shoes() H.wash_cream() - M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/ez_clean name = "EZ Clean" @@ -1069,7 +1047,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "acid" -/datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/M) +/datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(3.33) M.adjustFireLoss(3.33) M.adjustToxLoss(3.33) @@ -1089,7 +1067,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "sourness" -/datum/reagent/cryptobiolin/on_mob_life(mob/living/M) +/datum/reagent/cryptobiolin/on_mob_life(mob/living/carbon/M) M.Dizzy(1) if(!M.confused) M.confused = 1 @@ -1103,7 +1081,7 @@ color = "#C8A5DC" // rgb: 200, 165, 220A taste_description = "numbness" -/datum/reagent/impedrezene/on_mob_life(mob/living/M) +/datum/reagent/impedrezene/on_mob_life(mob/living/carbon/M) M.jitteriness = max(M.jitteriness-5,0) if(prob(80)) M.adjustBrainLoss(2*REM) @@ -1121,10 +1099,7 @@ can_synth = FALSE taste_description = "sludge" -/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) - if(!isliving(M)) - return - var/mob/living/L = M +/datum/reagent/nanites/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) L.ForceContractDisease(new /datum/disease/transformation/robot(), FALSE, TRUE) @@ -1136,10 +1111,7 @@ can_synth = FALSE taste_description = "sludge" -/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) - if(!isliving(M)) - return - var/mob/living/L = M +/datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) L.ForceContractDisease(new /datum/disease/transformation/xeno(), FALSE, TRUE) @@ -1151,10 +1123,7 @@ can_synth = FALSE taste_description = "slime" -/datum/reagent/fungalspores/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) - if(!isliving(M)) - return - var/mob/living/L = M +/datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) L.ForceContractDisease(new /datum/disease/tuberculosis(), FALSE, TRUE) @@ -1236,11 +1205,11 @@ var/temp = holder ? holder.chem_temp : T20C T.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]") -/datum/reagent/nitrous_oxide/reaction_mob(mob/M, method=TOUCH, reac_volume) +/datum/reagent/nitrous_oxide/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == VAPOR) M.drowsyness += max(round(reac_volume, 1), 2) -/datum/reagent/nitrous_oxide/on_mob_life(mob/living/M) +/datum/reagent/nitrous_oxide/on_mob_life(mob/living/carbon/M) M.drowsyness += 2 if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -1259,19 +1228,15 @@ color = "E1A116" taste_description = "sourness" -/datum/reagent/stimulum/on_mob_add(mob/M) +/datum/reagent/stimulum/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOFAST, id) + L.add_trait(TRAIT_GOTTAGOFAST, id) -/datum/reagent/stimulum/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOFAST, id) +/datum/reagent/stimulum/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOFAST, id) ..() -/datum/reagent/stimulum/on_mob_life(mob/living/M) // Has a speedup, and the anti-stun effects of nicotine. +/datum/reagent/stimulum/on_mob_life(mob/living/carbon/M) // Has a speedup, and the anti-stun effects of nicotine. M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) @@ -1289,16 +1254,12 @@ color = "90560B" taste_description = "burning" -/datum/reagent/nitryl/on_mob_add(mob/M) +/datum/reagent/nitryl/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_GOTTAGOFAST, id) + L.add_trait(TRAIT_GOTTAGOFAST, id) -/datum/reagent/nitryl/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_GOTTAGOFAST, id) +/datum/reagent/nitryl/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_GOTTAGOFAST, id) ..() /////////////////////////Coloured Crayon Powder//////////////////////////// @@ -1394,7 +1355,7 @@ var/tox_prob = 0 taste_description = "plant food" -/datum/reagent/plantnutriment/on_mob_life(mob/living/M) +/datum/reagent/plantnutriment/on_mob_life(mob/living/carbon/M) if(prob(tox_prob)) M.adjustToxLoss(1*REM, 0) . = 1 @@ -1448,12 +1409,9 @@ taste_description = "bitterness" taste_mult = 1.5 -/datum/reagent/stable_plasma/on_mob_life(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.adjustPlasma(10) +/datum/reagent/stable_plasma/on_mob_life(mob/living/carbon/C) + C.adjustPlasma(10) ..() - return /datum/reagent/iodine name = "Iodine" @@ -1476,7 +1434,6 @@ var/turf/open/floor/F = T F.PlaceOnTop(/turf/open/floor/carpet) ..() - return /datum/reagent/bromine name = "Bromine" @@ -1520,14 +1477,12 @@ taste_description = "rainbows" -/datum/reagent/colorful_reagent/on_mob_life(mob/living/M) - if(M && isliving(M)) - M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY) +/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M) + M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY) ..() /datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume) - if(M && isliving(M)) - M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY) + M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY) ..() /datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume) @@ -1686,7 +1641,7 @@ color = "#00ff80" taste_description = "strange honey" -/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M) +/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/carbon/M) if(prob(2)) M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz...")) ..() @@ -1807,16 +1762,12 @@ taste_description = "water" metabolization_rate = 0.25 * REAGENTS_METABOLISM -/datum/reagent/pax/on_mob_add(mob/M) +/datum/reagent/pax/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.add_trait(TRAIT_PACIFISM, id) + L.add_trait(TRAIT_PACIFISM, id) -/datum/reagent/pax/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.remove_trait(TRAIT_PACIFISM, id) +/datum/reagent/pax/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_PACIFISM, id) ..() /datum/reagent/bz_metabolites @@ -1855,7 +1806,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "dizziness" -/datum/reagent/peaceborg/confuse/on_mob_life(mob/living/M) +/datum/reagent/peaceborg/confuse/on_mob_life(mob/living/carbon/M) if(M.confused < 6) M.confused = CLAMP(M.confused + 3, 0, 5) if(M.dizziness < 6) @@ -1871,7 +1822,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "tiredness" -/datum/reagent/peaceborg/tire/on_mob_life(mob/living/M) +/datum/reagent/peaceborg/tire/on_mob_life(mob/living/carbon/M) var/healthcomp = (100 - M.health) //DOES NOT ACCOUNT FOR ADMINBUS THINGS THAT MAKE YOU HAVE MORE THAN 200/210 HEALTH, OR SOMETHING OTHER THAN A HUMAN PROCESSING THIS. if(M.getStaminaLoss() < (45 - healthcomp)) //At 50 health you would have 200 - 150 health meaning 50 compensation. 60 - 50 = 10, so would only do 10-19 stamina.) M.adjustStaminaLoss(10) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 07f19a8462..90cb732a1f 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -11,10 +11,10 @@ if(reac_volume >= 1) T.AddComponent(/datum/component/thermite, reac_volume) -/datum/reagent/thermite/on_mob_life(mob/living/M) +/datum/reagent/thermite/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(1, 0) ..() - . = 1 + return TRUE /datum/reagent/nitroglycerin name = "Nitroglycerin" @@ -40,12 +40,12 @@ metabolization_rate = 4 taste_description = "burning" -/datum/reagent/clf3/on_mob_life(mob/living/M) +/datum/reagent/clf3/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(2) var/burndmg = max(0.3*M.fire_stacks, 0.3) M.adjustFireLoss(burndmg, 0) ..() - . = 1 + return TRUE /datum/reagent/clf3/reaction_turf(turf/T, reac_volume) if(isplatingturf(T)) @@ -100,7 +100,7 @@ metabolization_rate = 0.05 taste_description = "salt" -/datum/reagent/blackpowder/on_mob_life(mob/living/M) +/datum/reagent/blackpowder/on_mob_life(mob/living/carbon/M) ..() if(isplasmaman(M)) M.hallucination += 5 @@ -151,12 +151,12 @@ M.IgniteMob() ..() -/datum/reagent/phlogiston/on_mob_life(mob/living/M) +/datum/reagent/phlogiston/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(1) var/burndmg = max(0.3*M.fire_stacks, 0.3) M.adjustFireLoss(burndmg, 0) ..() - . = 1 + return TRUE /datum/reagent/napalm name = "Napalm" @@ -166,7 +166,7 @@ color = "#FA00AF" taste_description = "burning" -/datum/reagent/napalm/on_mob_life(mob/living/M) +/datum/reagent/napalm/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(1) ..() @@ -184,7 +184,7 @@ taste_description = "bitterness" -/datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube +/datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube if(M.reagents.has_reagent("oxygen")) M.reagents.remove_reagent("oxygen", 0.5) M.adjust_bodytemperature(-15) @@ -203,7 +203,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "bitterness" -/datum/reagent/pyrosium/on_mob_life(mob/living/M) +/datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M) if(M.reagents.has_reagent("oxygen")) M.reagents.remove_reagent("oxygen", 0.5) M.adjust_bodytemperature(15) @@ -219,7 +219,7 @@ taste_description = "charged metal" var/shock_timer = 0 -/datum/reagent/teslium/on_mob_life(mob/living/M) +/datum/reagent/teslium/on_mob_life(mob/living/carbon/M) shock_timer++ if(shock_timer >= rand(5,30)) //Random shocks are wildly unpredictable shock_timer = 0 @@ -235,7 +235,7 @@ color = "#CAFF43" taste_description = "jelly" -/datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/M) +/datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/carbon/M) if(isjellyperson(M)) shock_timer = 0 //immune to shocks M.AdjustStun(-40, 0) @@ -280,9 +280,7 @@ O.extinguish() /datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(!istype(M)) - return if(method in list(VAPOR, TOUCH)) M.adjust_fire_stacks(-reac_volume) M.ExtinguishMob() - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 74ef9167c9..0700aeb799 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -10,10 +10,10 @@ taste_mult = 1.2 var/toxpwr = 1.5 -/datum/reagent/toxin/on_mob_life(mob/living/M) +/datum/reagent/toxin/on_mob_life(mob/living/carbon/M) if(toxpwr) M.adjustToxLoss(toxpwr*REM, 0) - . = 1 + . = TRUE ..() /datum/reagent/toxin/amatoxin @@ -48,9 +48,8 @@ M.domutcheck() ..() -/datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/M) - if(istype(M)) - M.apply_effect(5,EFFECT_IRRADIATE,0) +/datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/C) + C.apply_effect(5,EFFECT_IRRADIATE,0) return ..() /datum/reagent/toxin/plasma @@ -58,16 +57,15 @@ id = "plasma" description = "Plasma in its liquid form." taste_description = "bitterness" + specific_heat = SPECIFIC_HEAT_PLASMA taste_mult = 1.5 color = "#8228A0" toxpwr = 3 -/datum/reagent/toxin/plasma/on_mob_life(mob/living/M) +/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C) if(holder.has_reagent("epinephrine")) holder.remove_reagent("epinephrine", 2*REM) - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.adjustPlasma(20) + C.adjustPlasma(20) return ..() /datum/reagent/toxin/plasma/reaction_obj(obj/O, reac_volume) @@ -83,8 +81,6 @@ return /datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel! - if(!isliving(M)) - return if(method == TOUCH || method == VAPOR) M.adjust_fire_stacks(reac_volume / 5) return @@ -98,19 +94,17 @@ toxpwr = 0 taste_description = "acid" -/datum/reagent/toxin/lexorin/on_mob_life(mob/living/M) +/datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C) . = TRUE - if(M.has_trait(TRAIT_NOBREATH)) + if(C.has_trait(TRAIT_NOBREATH)) . = FALSE if(.) - M.adjustOxyLoss(5, 0) - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.losebreath += 2 + C.adjustOxyLoss(5, 0) + C.losebreath += 2 if(prob(20)) - M.emote("gasp") + C.emote("gasp") ..() /datum/reagent/toxin/slimejelly @@ -122,7 +116,7 @@ taste_description = "slime" taste_mult = 1.3 -/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/M) +/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/carbon/M) if(prob(10)) to_chat(M, "Your insides are burning!") M.adjustToxLoss(rand(20,60)*REM, 0) @@ -140,7 +134,7 @@ toxpwr = 0 taste_description = "mint" -/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/M) +/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M) if(M.has_trait(TRAIT_FAT)) M.gib() return ..() @@ -162,16 +156,12 @@ toxpwr = 0.5 taste_description = "death" -/datum/reagent/toxin/zombiepowder/on_mob_add(mob/M) +/datum/reagent/toxin/zombiepowder/on_mob_add(mob/living/L) ..() - if(isliving(M)) - var/mob/living/L = M - L.fakedeath(id) + L.fakedeath(id) -/datum/reagent/toxin/zombiepowder/on_mob_delete(mob/M) - if(isliving(M)) - var/mob/living/L = M - L.cure_fakedeath(id) +/datum/reagent/toxin/zombiepowder/on_mob_delete(mob/living/L) + L.cure_fakedeath(id) ..() /datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/carbon/M) @@ -187,7 +177,7 @@ toxpwr = 0 taste_description = "sourness" -/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/M) +/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M) M.hallucination += 5 return ..() @@ -243,12 +233,10 @@ color = "#9ACD32" toxpwr = 1 -/datum/reagent/toxin/spore/on_mob_life(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.damageoverlaytemp = 60 - C.update_damage_hud() - M.blur_eyes(3) +/datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/C) + C.damageoverlaytemp = 60 + C.update_damage_hud() + C.blur_eyes(3) return ..() /datum/reagent/toxin/spore_burning @@ -259,7 +247,7 @@ toxpwr = 0.5 taste_description = "burning" -/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/M) +/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(2) M.IgniteMob() return ..() @@ -273,7 +261,7 @@ toxpwr = 0 metabolization_rate = 1.5 * REAGENTS_METABOLISM -/datum/reagent/toxin/chloralhydrate/on_mob_life(mob/living/M) +/datum/reagent/toxin/chloralhydrate/on_mob_life(mob/living/carbon/M) switch(current_cycle) if(1 to 10) M.confused += 2 @@ -296,7 +284,7 @@ toxpwr = 0 metabolization_rate = 1.5 * REAGENTS_METABOLISM -/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/M) +/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/carbon/M) switch(current_cycle) if(10 to 20) M.confused += 1 @@ -316,7 +304,7 @@ glass_name = "glass of beer" glass_desc = "A freezing pint of beer." -/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/M) +/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/M) switch(current_cycle) if(1 to 50) M.Sleeping(40, 0) @@ -376,7 +364,7 @@ metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 0 -/datum/reagent/toxin/polonium/on_mob_life(mob/living/M) +/datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/M) M.radiation += 4 ..() @@ -390,7 +378,7 @@ overdose_threshold = 30 toxpwr = 0 -/datum/reagent/toxin/histamine/on_mob_life(mob/living/M) +/datum/reagent/toxin/histamine/on_mob_life(mob/living/carbon/M) if(prob(50)) switch(pick(1, 2, 3, 4)) if(1) @@ -423,7 +411,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM toxpwr = 1 -/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/M) +/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/carbon/M) if(prob(5)) holder.add_reagent("histamine", pick(5,15)) holder.remove_reagent("formaldehyde", 1.2) @@ -439,7 +427,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM toxpwr = 0 -/datum/reagent/toxin/venom/on_mob_life(mob/living/M) +/datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/M) toxpwr = 0.2*volume M.adjustBruteLoss((0.3*volume)*REM, 0) . = 1 @@ -458,14 +446,14 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM toxpwr = 0 -/datum/reagent/toxin/fentanyl/on_mob_life(mob/living/M) +/datum/reagent/toxin/fentanyl/on_mob_life(mob/living/carbon/M) M.adjustBrainLoss(3*REM, 150) - . = 1 if(M.toxloss <= 60) M.adjustToxLoss(1*REM, 0) if(current_cycle >= 18) M.Sleeping(40, 0) ..() + return TRUE /datum/reagent/toxin/cyanide name = "Cyanide" @@ -476,7 +464,7 @@ metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 1.25 -/datum/reagent/toxin/cyanide/on_mob_life(mob/living/M) +/datum/reagent/toxin/cyanide/on_mob_life(mob/living/carbon/M) if(prob(5)) M.losebreath += 1 if(prob(8)) @@ -508,7 +496,7 @@ if(method == TOUCH || method == VAPOR) M.reagents.add_reagent("itching_powder", reac_volume) -/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/M) +/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/carbon/M) if(prob(15)) to_chat(M, "You scratch at your head.") M.adjustBruteLoss(0.2*REM, 0) @@ -536,28 +524,26 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM toxpwr = 2.5 -/datum/reagent/toxin/initropidril/on_mob_life(mob/living/M) +/datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/C) if(prob(25)) var/picked_option = rand(1,3) switch(picked_option) if(1) - M.Knockdown(60, 0) - . = 1 + C.Knockdown(60, 0) + . = TRUE if(2) - M.losebreath += 10 - M.adjustOxyLoss(rand(5,25), 0) - . = 1 + C.losebreath += 10 + C.adjustOxyLoss(rand(5,25), 0) + . = TRUE if(3) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.undergoing_cardiac_arrest() && H.can_heartattack()) - H.set_heartattack(TRUE) - if(H.stat == CONSCIOUS) - H.visible_message("[H] clutches at [H.p_their()] chest as if [H.p_their()] heart stopped!") - else - H.losebreath += 10 - H.adjustOxyLoss(rand(5,25), 0) - . = 1 + if(!C.undergoing_cardiac_arrest() && C.can_heartattack()) + C.set_heartattack(TRUE) + if(C.stat == CONSCIOUS) + C.visible_message("[C] clutches at [C.p_their()] chest as if [C.p_their()] heart stopped!") + else + C.losebreath += 10 + C.adjustOxyLoss(rand(5,25), 0) + . = TRUE return ..() || . /datum/reagent/toxin/pancuronium @@ -570,10 +556,10 @@ toxpwr = 0 taste_mult = 0 // undetectable, I guess? -/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/M) +/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) M.Stun(40, 0) - . = 1 + . = TRUE if(prob(20)) M.losebreath += 4 ..() @@ -587,12 +573,12 @@ metabolization_rate = 0.75 * REAGENTS_METABOLISM toxpwr = 0 -/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/M) +/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) M.Sleeping(40, 0) M.adjustStaminaLoss(10*REM, 0) ..() - . = 1 + return TRUE /datum/reagent/toxin/sulfonal name = "Sulfonal" @@ -603,7 +589,7 @@ metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 0.5 -/datum/reagent/toxin/sulfonal/on_mob_life(mob/living/M) +/datum/reagent/toxin/sulfonal/on_mob_life(mob/living/carbon/M) if(current_cycle >= 22) M.Sleeping(40, 0) return ..() @@ -633,7 +619,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM toxpwr = 0 -/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M) +/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/carbon/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) M.adjustToxLoss(1*REM, 0) M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time @@ -649,7 +635,7 @@ metabolization_rate = 0.06 * REAGENTS_METABOLISM toxpwr = 1.75 -/datum/reagent/toxin/coniine/on_mob_life(mob/living/M) +/datum/reagent/toxin/coniine/on_mob_life(mob/living/carbon/M) M.losebreath += 5 return ..() @@ -664,22 +650,20 @@ toxpwr = 0 taste_description = "vomit" -/datum/reagent/toxin/spewium/on_mob_life(mob/living/M) +/datum/reagent/toxin/spewium/on_mob_life(mob/living/carbon/C) .=..() - if(current_cycle >=11 && prob(min(50,current_cycle)) && ishuman(M)) - var/mob/living/carbon/human/H = M - H.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30)) - for(var/datum/reagent/toxin/R in M.reagents.reagent_list) + if(current_cycle >=11 && prob(min(50,current_cycle))) + C.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30)) + for(var/datum/reagent/toxin/R in C.reagents.reagent_list) if(R != src) - H.reagents.remove_reagent(R.id,1) + C.reagents.remove_reagent(R.id,1) -/datum/reagent/toxin/spewium/overdose_process(mob/living/M) +/datum/reagent/toxin/spewium/overdose_process(mob/living/carbon/C) . = ..() - if(current_cycle >=33 && prob(15) && ishuman(M)) - var/mob/living/carbon/human/H = M - H.spew_organ() - H.vomit(0, TRUE, TRUE, 4) - to_chat(H, "You feel something lumpy come up as you vomit.") + if(current_cycle >=33 && prob(15)) + C.spew_organ() + C.vomit(0, TRUE, TRUE, 4) + to_chat(C, "You feel something lumpy come up as you vomit.") /datum/reagent/toxin/curare name = "Curare" @@ -690,7 +674,7 @@ metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 1 -/datum/reagent/toxin/curare/on_mob_life(mob/living/M) +/datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M) if(current_cycle >= 11) M.Knockdown(60, 0) M.adjustOxyLoss(1*REM, 0) @@ -706,7 +690,7 @@ metabolization_rate = 0.2 * REAGENTS_METABOLISM toxpwr = 0 -/datum/reagent/toxin/heparin/on_mob_life(mob/living/M) +/datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M) if(ishuman(M)) var/mob/living/carbon/human/H = M H.bleed_rate = min(H.bleed_rate + 2, 8) @@ -725,7 +709,7 @@ toxpwr = 0.5 taste_description = "spinning" -/datum/reagent/toxin/rotatium/on_mob_life(mob/living/M) +/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 20 && current_cycle%20 == 0) var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) @@ -752,7 +736,7 @@ toxpwr = 0.25 taste_description = "skewing" -/datum/reagent/toxin/skewium/on_mob_life(mob/living/M) +/datum/reagent/toxin/skewium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 5 && current_cycle % 3 == 0) var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) @@ -787,7 +771,7 @@ metabolization_rate = 0.08 * REAGENTS_METABOLISM toxpwr = 0.15 -/datum/reagent/toxin/anacea/on_mob_life(mob/living/M) +/datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M) var/remove_amt = 5 if(holder.has_reagent("calomel") || holder.has_reagent("pen_acid")) remove_amt = 0.5 @@ -840,7 +824,7 @@ toxpwr = 2 acidpwr = 42.0 -/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) +/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(current_cycle/10, 0) . = 1 ..() @@ -856,7 +840,7 @@ var/actual_toxpwr = 5 var/delay = 30 -/datum/reagent/toxin/delayed/on_mob_life(mob/living/M) +/datum/reagent/toxin/delayed/on_mob_life(mob/living/carbon/M) if(current_cycle > delay) holder.remove_reagent(id, actual_metaboliztion_rate * M.metabolism_efficiency) M.adjustToxLoss(actual_toxpwr*REM, 0) diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index cdb476c95a..911571a3bd 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -180,7 +180,7 @@ Borg Shaker recharge_time = 3 accepts_reagent_upgrades = FALSE - reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "fernet", "milk", "coffee", "banana", "lemonjuice") + reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "milk", "coffee", "banana", "lemonjuice") /obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) return //Can't inject stuff with a shaker, can we? //not with that attitude @@ -235,7 +235,7 @@ Borg Shaker recharge_time = 3 accepts_reagent_upgrades = FALSE - reagent_ids = list("fakebeer") + reagent_ids = list("fakebeer", "fernet") /obj/item/reagent_containers/borghypo/peace name = "Peace Hypospray" diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 4b797cbd73..4d737657f8 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -226,25 +226,10 @@ desc = "A small bottle of Romerol. The REAL zombie powder." list_reagents = list("romerol" = 30) -/obj/item/reagent_containers/glass/bottle/flu_virion - name = "Flu virion culture bottle" - desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/flu - -/obj/item/reagent_containers/glass/bottle/epiglottis_virion - name = "Epiglottis virion culture bottle" - desc = "A small bottle. Contains Epiglottis virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/voice_change - -/obj/item/reagent_containers/glass/bottle/liver_enhance_virion - name = "Liver enhancement virion culture bottle" - desc = "A small bottle. Contains liver enhancement virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/heal - -/obj/item/reagent_containers/glass/bottle/hallucigen_virion - name = "Hallucigen virion culture bottle" - desc = "A small bottle. Contains hallucigen virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/hallucigen +/obj/item/reagent_containers/glass/bottle/random_virus + name = "Experimental disease culture bottle" + desc = "A small bottle. Contains an untested viral culture in synthblood medium." + spawned_disease = /datum/disease/advance/random /obj/item/reagent_containers/glass/bottle/pierrot_throat name = "Pierrot's Throat culture bottle" @@ -255,6 +240,11 @@ name = "Rhinovirus culture bottle" desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium." spawned_disease = /datum/disease/advance/cold + +/obj/item/reagent_containers/glass/bottle/flu_virion + name = "Flu virion culture bottle" + desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium." + spawned_disease = /datum/disease/advance/flu /obj/item/reagent_containers/glass/bottle/retrovirus name = "Retrovirus culture bottle" diff --git a/code/modules/reagents/reagent_containers/medspray.dm b/code/modules/reagents/reagent_containers/medspray.dm index 2eae912556..fdb6a60894 100644 --- a/code/modules/reagents/reagent_containers/medspray.dm +++ b/code/modules/reagents/reagent_containers/medspray.dm @@ -6,7 +6,7 @@ item_state = "spraycan" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON obj_flags = UNIQUE_RENAME container_type = OPENCONTAINER slot_flags = ITEM_SLOT_BELT diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index b0e101f76a..91a22ff1fb 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -6,7 +6,7 @@ item_state = "cleaner" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON container_type = OPENCONTAINER slot_flags = ITEM_SLOT_BELT throwforce = 0 diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index a29722b4af..8acecf25a1 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -310,7 +310,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) var/obj/item/conveyor_switch_construct/C = new/obj/item/conveyor_switch_construct(src.loc) C.id = id transfer_fingerprints_to(C) - to_chat(user, "You deattach the conveyor switch.") + to_chat(user, "You detach the conveyor switch.") qdel(src) /obj/machinery/conveyor_switch/oneway diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index aa356d5cd2..737f50859d 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -96,7 +96,7 @@ return if(user.a_intent != INTENT_HARM) - if((I.flags_1 & ABSTRACT_1) || !user.temporarilyRemoveItemFromInventory(I)) + if((I.item_flags & ABSTRACT) || !user.temporarilyRemoveItemFromInventory(I)) return place_item_in_disposal(I, user) update_icon() diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 9b0a0dc21e..624d5e0e05 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -52,7 +52,7 @@ layer = initial(layer) else if(ispath(pipe_type, /obj/machinery/disposal/bin)) - // Disposal bins recieve special icon treating + // Disposal bins receive special icon treating if(anchored) icon_state = "disposal" else diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index ba089f6fb2..bc073d5e32 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -62,7 +62,7 @@ return dpdir & (~turn(H.dir, 180)) // transfer the holder through this pipe segment -// overriden for special behaviour +// overridden for special behaviour /obj/structure/disposalpipe/proc/transfer(obj/structure/disposalholder/H) return transfer_to_dir(H, nextdir(H)) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 28609e921d..0a36394bc9 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -423,10 +423,11 @@ /datum/design/healthanalyzer name = "Health Analyzer" id = "healthanalyzer" - build_type = AUTOLATHE + build_type = AUTOLATHE | PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/healthanalyzer category = list("initial", "Medical") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/pillbottle name = "Pill Bottle" @@ -655,7 +656,7 @@ /datum/design/receiver name = "Modular Receiver" - id = "reciever" + id = "receiver" build_type = AUTOLATHE materials = list(MAT_METAL = 15000) build_path = /obj/item/weaponcrafting/receiver diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index b2d02e9d04..e2d5652a35 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -113,7 +113,15 @@ build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 50) build_path = /obj/item/stack/sheet/cloth - category = list("initial","Leather and Cloth") + category = list("initial","Organic Materials") + +/datum/design/cardboard + name = "Sheet of Cardboard" + id = "cardboard" + build_type = BIOGENERATOR + materials = list(MAT_BIOMASS = 25) + build_path = /obj/item/stack/sheet/cardboard + category = list("initial","Organic Materials") /datum/design/leather name = "Sheet of Leather" @@ -121,7 +129,7 @@ build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 150) build_path = /obj/item/stack/sheet/leather - category = list("initial","Leather and Cloth") + category = list("initial","Organic Materials") /datum/design/secbelt name = "Security Belt" diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 68bfbfc42e..29ed3505d8 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -58,7 +58,7 @@ /datum/design/integrated_printer name = "Integrated circuit printer" - desc = "This machine provides all neccesary things for circuitry." + desc = "This machine provides all necessary things for circuitry." id = "icprinter" build_type = PROTOLATHE materials = list(MAT_GLASS = 5000, MAT_METAL = 10000) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index bebd65f48d..89f1eb85b9 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -348,7 +348,7 @@ /datum/design/board/processor name = "Machine Design (Food/Slime Processor Board)" - desc = "The circuit board for a processing unit. Screwdrive the circuit to switch between food (default) or slime processing." + desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing." id = "processor" build_path = /obj/item/circuitboard/machine/processor category = list ("Misc. Machinery") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index eaa18aaf43..e4ba942c84 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -651,6 +651,15 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_transform_clown + name = "Cyborg Upgrade (Clown Module)" + id = "borg_transform_clown" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/transform/clown + materials = list(MAT_METAL=10000, MAT_GLASS=15000, MAT_BANANIUM = 1000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + /datum/design/borg_upgrade_selfrepair name = "Cyborg Upgrade (Self-repair)" id = "borg_upgrade_selfrepair" @@ -696,6 +705,24 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_upgrade_trashofholding + name = "Cyborg Upgrade (Trash Bag of Holding)" + id = "borg_upgrade_trashofholding" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/tboh + materials = list(MAT_METAL=10000, MAT_GOLD=1500, MAT_URANIUM=250, MAT_PLASMA=1500) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_upgrade_advancedmop + name = "Cyborg Upgrade (Advanced Mop)" + id = "borg_upgrade_advancedmop" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/amop + materials = list(MAT_METAL=10000, MAT_GLASS=200, MAT_TITANIUM=1000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + /datum/design/borg_upgrade_expand name = "Cyborg Upgrade (Expand)" id = "borg_upgrade_expand" @@ -751,17 +778,6 @@ construction_time = 50 category = list("Misc") -/datum/design/drone_shell - name = "Drone Shell" - desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." - id = "drone_shell" - build_type = MECHFAB | PROTOLATHE - materials = list(MAT_METAL = 800, MAT_GLASS = 350) - construction_time=150 - build_path = /obj/item/drone_shell - category = list("Misc") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - /datum/design/synthetic_flash name = "Flash" desc = "When a problem arises, SCIENCE is the solution." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 9df3df3c31..5f1e5ea520 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -200,7 +200,17 @@ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - + +/datum/design/healthanalyzer_advanced + name = "advanced health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." + id = "healthanalyzer_advanced" + build_path = /obj/item/healthanalyzer/advanced + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 2000, MAT_GOLD = 1500) + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + ///////////////////////////////////////// //////////Cybernetic Implants//////////// ///////////////////////////////////////// @@ -283,7 +293,7 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_xray - name = "X-Ray Eyes" + name = "X-ray Eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" build_type = PROTOLATHE | MECHFAB diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index b2a6c34269..18934d021c 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -14,7 +14,7 @@ /datum/design/bluespace_pod name = "Supply Drop Pod Upgrade Disk" - desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user saftey."//who? + desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user safety."//who? id = "bluespace_pod"//the coder reading this build_type = PROTOLATHE materials = list(MAT_GLASS = 1000) diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index b30470036e..e1648559a7 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -59,7 +59,7 @@ /datum/design/light_replacer name = "Light Replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." + desc = "A device to automatically replace lights. Refill with working light bulbs." id = "light_replacer" build_type = PROTOLATHE materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 2fcb20a498..0c7b7327fa 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -181,7 +181,7 @@ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/xray - name = "Xray Laser Gun" + name = "X-ray Laser Gun" desc = "Not quite as menacing as it sounds" id = "xray_laser" build_type = PROTOLATHE diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 76712dd55e..75ed53e936 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -24,7 +24,7 @@ create_reagents(0) materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0, - FALSE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + TRUE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE RefreshParts() matching_designs = list() diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm index c51288b685..e47bd97494 100644 --- a/code/modules/research/machinery/departmental_circuit_imprinter.dm +++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm @@ -1,6 +1,6 @@ /obj/machinery/rnd/production/circuit_imprinter/department name = "department circuit imprinter" - desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type." + desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type." icon_state = "circuit_imprinter" container_type = OPENCONTAINER circuit = /obj/item/circuitboard/machine/circuit_imprinter/department diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm index ddc0b7c749..f91f3282d5 100644 --- a/code/modules/research/machinery/departmental_protolathe.dm +++ b/code/modules/research/machinery/departmental_protolathe.dm @@ -1,6 +1,6 @@ /obj/machinery/rnd/production/protolathe/department name = "department protolathe" - desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type." + desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type." icon_state = "protolathe" container_type = OPENCONTAINER circuit = /obj/item/circuitboard/machine/protolathe/department diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 87f8cefe78..23d515cf88 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -44,6 +44,9 @@ return if(default_deconstruction_crowbar(O)) return + if(panel_open && is_wire_tool(O)) + wires.interact(user) + return TRUE if(is_refillable() && O.is_drainable()) return FALSE //inserting reagents into the machine if(Insert_Item(O, user)) @@ -65,6 +68,7 @@ to_chat(user, "You can't load [src] while it's opened!") return FALSE if(disabled) + to_chat(user, "The insertion belts of [src] won't engage!") return FALSE if(requires_console && !linked_console) to_chat(user, "[src] must be linked to an R&D console first!") diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index a34476ce1c..7c23609c21 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -106,19 +106,19 @@ l[i] = amount modify_point_list(l) -/datum/techweb/proc/copy_research_to(datum/techweb/reciever, unlock_hidden = TRUE) //Adds any missing research to theirs. +/datum/techweb/proc/copy_research_to(datum/techweb/receiver, unlock_hidden = TRUE) //Adds any missing research to theirs. for(var/i in researched_nodes) CHECK_TICK - reciever.research_node_id(i, TRUE, FALSE) + receiver.research_node_id(i, TRUE, FALSE) for(var/i in researched_designs) CHECK_TICK - reciever.add_design_by_id(i) + receiver.add_design_by_id(i) if(unlock_hidden) - for(var/i in reciever.hidden_nodes) + for(var/i in receiver.hidden_nodes) CHECK_TICK if(!hidden_nodes[i]) - reciever.hidden_nodes -= i //We can see it so let them see it too. - reciever.recalculate_nodes() + receiver.hidden_nodes -= i //We can see it so let them see it too. + receiver.recalculate_nodes() /datum/techweb/proc/copy() var/datum/techweb/returned = new() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 015f0dafb6..a65ad7de0a 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -18,7 +18,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser") + design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -27,7 +27,7 @@ display_name = "Advanced Biotechnology" description = "Advanced Biotechnology" prereq_ids = list("biotech") - design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker") + design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -198,7 +198,7 @@ display_name = "Basic Robotics Research" description = "Programmable machines that make our lives lazier." prereq_ids = list("base") - design_ids = list("paicard", "drone_shell") + design_ids = list("paicard") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -207,7 +207,7 @@ display_name = "Advanced Robotics Research" description = "It can even do the dishes!" prereq_ids = list("robotics") - design_ids = list("borg_upgrade_diamonddrill") + design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_trashofholding", "borg_upgrade_advancedmop") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -320,7 +320,7 @@ description = "Honk?!" prereq_ids = list("base") design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm", - "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone") + "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone", "borg_transform_clown") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/research/xenobiology/crossbreeding/_corecross.dm b/code/modules/research/xenobiology/crossbreeding/_corecross.dm index 45cc0c1efc..43f23d013d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_corecross.dm +++ b/code/modules/research/xenobiology/crossbreeding/_corecross.dm @@ -39,7 +39,7 @@ To add a crossbreed: /obj/item/slimecross/Initialize() ..() - name = colour + " " + name + name = effect + " " + colour + " extract" var/itemcolor = "#FFFFFF" switch(colour) if("orange") diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 97112c148a..ca334497a7 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -564,6 +564,7 @@ datum/status_effect/stabilized/blue/on_remove() /datum/status_effect/stabilized/cerulean/on_remove() if(clone) clone.visible_message("[clone] dissolves into a puddle of goo!") + clone.unequip_everything() qdel(clone) /datum/status_effect/stabilized/pyrite diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 7183ece045..8ae7bf8d54 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -386,6 +386,9 @@ Charged extracts: if(user == M) to_chat(user, "You can't drink the love potion. What are you, a narcissist?") return ..() + if(M.has_status_effect(STATUS_EFFECT_INLOVE)) + to_chat(user, "[M] is already lovestruck!") + return ..() M.visible_message("[user] starts to feed [M] a love potion!", "[user] starts to feed you a love potion!") @@ -393,10 +396,11 @@ Charged extracts: if(!do_after(user, 50, target = M)) return to_chat(user, "You feed [M] the love potion!") - to_chat(M, "You develop feelings for [user], and anyone [p_they(user)] like.") - if(!("[REF(user)]" in M.faction) && M.mind) - M.mind.store_memory("You have strong feelings for [user].") + to_chat(M, "You develop feelings for [user], and anyone [user.p_they()] like.") + if(M.mind) + M.mind.store_memory("You are in love with [user].") M.faction |= "[REF(user)]" + M.apply_status_effect(STATUS_EFFECT_INLOVE, user) qdel(src) /obj/item/slimepotion/peacepotion diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm index cc36bbb215..8a6e5c3cbb 100644 --- a/code/modules/research/xenobiology/crossbreeding/recurring.dm +++ b/code/modules/research/xenobiology/crossbreeding/recurring.dm @@ -21,6 +21,7 @@ Recurring extracts: extract.desc = desc extract.icon = icon extract.icon_state = icon_state + extract.color = color extract.recurring = TRUE src.forceMove(extract) START_PROCESSING(SSobj,src) diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm index 878e17c1e7..2f6ca9555a 100644 --- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm +++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm @@ -19,7 +19,7 @@ Reproductive extracts: return if(istype(O, /obj/item/storage/bag/bio)) var/list/inserted = list() - O.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) if(inserted.len) var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1] if(istype(M)) diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm index 7bb723bc3d..93e5a8e739 100644 --- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm +++ b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm @@ -4,7 +4,7 @@ Self-sustaining extracts: */ /obj/item/slimecross/selfsustaining name = "self-sustaining extract" - effect = "selfsustaining" + effect = "self-sustaining" icon_state = "selfsustaining" var/extract_type = /obj/item/slime_extract @@ -23,6 +23,7 @@ Self-sustaining extracts: A.extract = X A.icon = icon A.icon_state = icon_state + A.color = color qdel(src) /obj/item/autoslime/Initialize() diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm index cc80c3a780..fe1b498667 100644 --- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm +++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm @@ -163,4 +163,4 @@ Stabilized extracts: regencore = regen regen.forceMove(src) return - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index a5998400c8..b8cc61df97 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -702,7 +702,7 @@ imp.implant(SM, user) SM.access_card = new /obj/item/card/id/syndicate(SM) - SM.access_card.flags_1 |= NODROP_1 + SM.access_card.item_flags |= NODROP /obj/item/slimepotion/transference name = "consciousness transference potion" @@ -725,7 +725,11 @@ if(SM.sentience_type != animal_type) to_chat(user, "You cannot transfer your consciousness to [SM]." ) return ..() - if(jobban_isbanned(user, ROLE_ALIEN)) //ideally sentience and trasnference potions should be their own unique role. + var/jb = jobban_isbanned(user, ROLE_ALIEN) + if(QDELETED(src) || QDELETED(M) || QDELETED(user)) + return + + if(jb) //ideally sentience and trasnference potions should be their own unique role. to_chat(user, "Your mind goes blank as you attempt to use the potion.") return @@ -909,7 +913,7 @@ /obj/item/slimepotion/slime/slimeradio name = "bluespace radio potion" - desc = "A strange chemical that grants those who ingest it the ability to broadcast and recieve subscape radio waves." + desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves." icon = 'icons/obj/chemical.dmi' icon_state = "potgrey" diff --git a/code/modules/ruins/spaceruin_code/listeningstation.dm b/code/modules/ruins/spaceruin_code/listeningstation.dm index ff0bad8257..8efeaaabff 100644 --- a/code/modules/ruins/spaceruin_code/listeningstation.dm +++ b/code/modules/ruins/spaceruin_code/listeningstation.dm @@ -32,11 +32,11 @@ /obj/item/paper/fluff/ruins/listeningstation/receipt name = "receipt" - info = "1 x Stechtkin pistol - $600
    1 x silencer - $200
    shipping charge - $4360
    total - $5160" + info = "1 x Stechkin pistol - $600
    1 x silencer - $200
    shipping charge - $4360
    total - $5160" /obj/item/paper/fluff/ruins/listeningstation/odd_report name = "odd report" - info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilized your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear its ugly head again. -Donk Co. Operative #451" + info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilized your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear its ugly head again. -DonkCo Operative #451" /obj/item/paper/fluff/ruins/listeningstation/briefing name = "mission briefing" diff --git a/code/modules/ruins/spaceruin_code/oldstation.dm b/code/modules/ruins/spaceruin_code/oldstation.dm index d023760061..b216145023 100644 --- a/code/modules/ruins/spaceruin_code/oldstation.dm +++ b/code/modules/ruins/spaceruin_code/oldstation.dm @@ -1,7 +1,7 @@ /////////// Oldstation items /obj/item/paper/fluff/ruins/oldstation - name = "Cyro Awakening Alert" + name = "Cryo Awakening Alert" info = "**WARNING**

    Catastrophic damage sustained to station. Powernet exhausted to reawaken crew.

    Immediate Objectives

    1: Activate emergency power generator
    2: Lift station lockdown on the bridge

    Please locate the 'Damage Report' on the bridge for a detailed situation report." /obj/item/paper/fluff/ruins/oldstation/damagereport @@ -43,7 +43,7 @@ /obj/item/paper/fluff/ruins/oldstation/report name = "Crew Reawakening Report" - info = "Artifical Program's report to surviving crewmembers.

    Crew were placed into cryostasis on March 10th, 2445.

    Crew were awoken from cryostasis around June, 2557.

    \ + info = "Artificial Program's report to surviving crewmembers.

    Crew were placed into cryostasis on March 10th, 2445.

    Crew were awoken from cryostasis around June, 2557.

    \ SIGNIFICANT EVENTS OF NOTE
    1: The primary radiation detectors were taken offline after 112 years due to power failure, secondary radiation detectors showed no residual \ radiation on station. Deduction, primarily detector was malfunctioning and was producing a radiation signal when there was none.

    2: A data burst from a nearby Nanotrasen Space \ - Station was recieved, this data burst contained research data that has been uploaded to our RnD labs.

    3: Unknown invasion force has occupied Delta station." + Station was received, this data burst contained research data that has been uploaded to our RnD labs.

    3: Unknown invasion force has occupied Delta station." diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 84f0ac493d..43b273914c 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -19,7 +19,7 @@ /obj/item/assault_pod - name = "Assault Pod Targetting Device" + name = "Assault Pod Targeting Device" icon = 'icons/obj/device.dmi' icon_state = "gangtool-red" item_state = "radio" diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm index fa78c8cb99..d881396092 100644 --- a/code/modules/shuttle/docking.dm +++ b/code/modules/shuttle/docking.dm @@ -99,13 +99,7 @@ return DOCKING_SUCCESS -/obj/docking_port/mobile/proc/preflight_check( - list/old_turfs, - list/new_turfs, - list/areas_to_move, - rotation, - ) - +/obj/docking_port/mobile/proc/preflight_check(list/old_turfs, list/new_turfs, list/areas_to_move, rotation) for(var/i in 1 to old_turfs.len) CHECK_TICK var/turf/oldT = old_turfs[i] @@ -134,16 +128,7 @@ old_turfs[oldT] = move_mode -/obj/docking_port/mobile/proc/takeoff( - list/old_turfs, - list/new_turfs, - list/moved_atoms, - rotation, - movement_direction, - old_dock, - area/underlying_old_area, - ) - +/obj/docking_port/mobile/proc/takeoff(list/old_turfs, list/new_turfs, list/moved_atoms, rotation, movement_direction, old_dock, area/underlying_old_area) for(var/i in 1 to old_turfs.len) var/turf/oldT = old_turfs[i] var/turf/newT = new_turfs[i] @@ -163,17 +148,7 @@ var/area/shuttle_area = oldT.loc shuttle_area.onShuttleMove(oldT, newT, underlying_old_area) //areas -/obj/docking_port/mobile/proc/cleanup_runway( - obj/docking_port/stationary/new_dock, - list/old_turfs, - list/new_turfs, - list/areas_to_move, - list/moved_atoms, - rotation, - movement_direction, - area/underlying_old_area, - ) - +/obj/docking_port/mobile/proc/cleanup_runway(obj/docking_port/stationary/new_dock, list/old_turfs, list/new_turfs, list/areas_to_move, list/moved_atoms, rotation, movement_direction, area/underlying_old_area) underlying_old_area.afterShuttleMove() // Parallax handling @@ -202,14 +177,28 @@ var/turf/oldT = moved_atoms[moved_object] moved_object.afterShuttleMove(oldT, movement_force, dir, preferred_direction, movement_direction, rotation)//atoms + // lateShuttleMove (There had better be a really good reason for additional stages beyond this) + + underlying_old_area.lateShuttleMove() + + for(var/i in 1 to areas_to_move.len) + CHECK_TICK + var/area/internal_area = areas_to_move[i] + internal_area.lateShuttleMove() + for(var/i in 1 to old_turfs.len) CHECK_TICK - // Objects can block air so either turf or content changes means an air update is needed if(!(old_turfs[old_turfs[i]] & MOVE_CONTENTS | MOVE_TURF)) continue var/turf/oldT = old_turfs[i] var/turf/newT = new_turfs[i] - oldT.blocks_air = initial(oldT.blocks_air) - oldT.air_update_turf(TRUE) - newT.blocks_air = initial(newT.blocks_air) - newT.air_update_turf(TRUE) \ No newline at end of file + newT.lateShuttleMove(oldT) + + for(var/i in 1 to moved_atoms.len) + CHECK_TICK + var/atom/movable/moved_object = moved_atoms[i] + if(QDELETED(moved_object)) + continue + var/turf/oldT = moved_atoms[moved_object] + moved_object.lateShuttleMove(oldT, movement_force, movement_direction) + diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index fc32b60e6d..20b8c26d83 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -263,6 +263,14 @@ return has_people +/obj/docking_port/mobile/emergency/proc/ShuttleDBStuff() + set waitfor = FALSE + if(!SSdbcore.Connect()) + return + var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]") + query_round_shuttle_name.Execute() + qdel(query_round_shuttle_name) + /obj/docking_port/mobile/emergency/check() if(!timer) return @@ -293,9 +301,7 @@ setTimer(SSshuttle.emergencyDockTime) send2irc("Server", "The Emergency Shuttle has docked with the station.") priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/ai/shuttledock.ogg', "Priority") - if(SSdbcore.Connect()) - var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]") - query_round_shuttle_name.Execute() + ShuttleDBStuff() if(SHUTTLE_DOCKED) @@ -537,7 +543,7 @@ /obj/item/storage/pod/attack_hand(mob/user) if (can_interact(user)) - SendSignal(COMSIG_TRY_STORAGE_SHOW, user) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, user) return TRUE /obj/item/storage/pod/MouseDrop(over_object, src_location, over_location) diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index f2d56686e0..eaa1f36b75 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -36,5 +36,5 @@ if(last_request && (last_request + cooldown > world.time)) return last_request = world.time - to_chat(usr, "Your request has been recieved by CentCom.") + to_chat(usr, "Your request has been received by CentCom.") to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index bfdd391f05..ee12d7cf37 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -224,7 +224,11 @@ if(existing_shuttle) existing_shuttle.jumpToNullSpace() + var/list/force_memory = preview_shuttle.movement_force + preview_shuttle.movement_force = list("KNOCKDOWN" = 0, "THROW" = 0) preview_shuttle.initiate_docking(D) + preview_shuttle.movement_force = force_memory + . = preview_shuttle // Shuttle state involves a mode and a timer based on world.time, so diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 29c0de1b27..c58b3eee7b 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -31,6 +31,9 @@ if(jammed) to_chat(user, "The Syndicate is jamming the console!") return + if(!shuttle_port) + to_chat(user,"Warning: Shuttle connection severed!") + return return ..() /obj/machinery/computer/camera_advanced/shuttle_docker/GrantActions(mob/living/user) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 66142d6fc4..9767334166 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -53,7 +53,7 @@ All ShuttleMove procs go here if(!shuttle_boundary) CRASH("A turf queued to move via shuttle somehow had no skipover in baseturfs. [src]([type]):[loc]") var/depth = baseturfs.len - shuttle_boundary + 1 - newT.CopyOnTop(src, 1, depth) + newT.CopyOnTop(src, 1, depth, TRUE) //Air stuff newT.blocks_air = TRUE newT.air_update_turf(TRUE) @@ -78,6 +78,13 @@ All ShuttleMove procs go here return TRUE +/turf/proc/lateShuttleMove(turf/oldT) + blocks_air = initial(blocks_air) + air_update_turf(TRUE) + oldT.blocks_air = initial(oldT.blocks_air) + oldT.air_update_turf(TRUE) + + ///////////////////////////////////////////////////////////////////////////////////// // Called on every atom in shuttle turf contents before anything has been moved @@ -91,9 +98,8 @@ All ShuttleMove procs go here if(newT == oldT) // In case of in place shuttle rotation shenanigans. return - if(locs && locs.len > 1) // This is for multi tile objects - if(loc != oldT) - return + if(loc != oldT) // This is for multi tile objects + return loc = newT @@ -111,12 +117,22 @@ All ShuttleMove procs go here if(rotation) shuttleRotate(rotation) - - update_parallax_contents() return TRUE +/atom/movable/proc/lateShuttleMove(turf/oldT, list/movement_force, move_dir) + if(!movement_force || anchored) + return + var/throw_force = movement_force["THROW"] + if(!throw_force) + return + var/turf/target = get_edge_target_turf(src, move_dir) + var/range = throw_force * 10 + range = CEILING(rand(range-(range*0.1), range+(range*0.1)), 10)/10 + var/speed = range/5 + throw_at(target, range, speed) + ///////////////////////////////////////////////////////////////////////////////////// // Called on areas before anything has been moved @@ -149,6 +165,9 @@ All ShuttleMove procs go here parallax_movedir = new_parallax_dir return TRUE +/area/proc/lateShuttleMove() + return + /************************************Turf move procs************************************/ /************************************Area move procs************************************/ @@ -288,17 +307,16 @@ All ShuttleMove procs go here shake_force *= 0.25 shake_camera(src, shake_force, 1) -/mob/living/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) +/mob/living/lateShuttleMove(turf/oldT, list/movement_force, move_dir) + if(buckled) + return + . = ..() - if(movement_force && !buckled) - if(movement_force["THROW"]) - var/throw_dir = move_dir - var/turf/target = get_edge_target_turf(src, throw_dir) - var/range = movement_force["THROW"] - var/speed = range/5 - src.throw_at(target, range, speed) - if(movement_force["KNOCKDOWN"]) - Knockdown(movement_force["KNOCKDOWN"]) + + var/knockdown = movement_force["KNOCKDOWN"] + if(knockdown) + Knockdown(knockdown) + /mob/living/simple_animal/hostile/megafauna/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock) . = ..() diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index cc69fb5d15..a2159a50fd 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -25,7 +25,7 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate pixel_x = oldPY pixel_y = (oldPX*(-1)) - SendSignal(COMSIG_ATOM_ROTATE, rotation, params) + SEND_SIGNAL(src, COMSIG_ATOM_ROTATE, rotation, params) /************************************Turf rotate procs************************************/ diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index abe601e503..0f005f69f7 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -165,7 +165,7 @@ var/datum/job/captain/C = new /datum/job/captain access_card.access = C.get_access() access_card.access |= ACCESS_CENT_BAR - access_card.flags_1 |= NODROP_1 + access_card.item_flags |= NODROP /mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() qdel(access_card) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 773b35544c..1cf12e6d42 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/machinery/clonepod, /obj/effect/mob_spawn, /obj/effect/hierophant, - /obj/structure/recieving_pad, + /obj/structure/receiving_pad, /obj/effect/clockwork/spatial_gateway, /obj/structure/destructible/clockwork/powered/clockwork_obelisk, /obj/item/warp_cube, diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 4d92878cc2..4e6ef7ed9b 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th if("unconscious") target.AdjustUnconscious(amount) else - target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existant vars + target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existent vars /obj/effect/proc_holder/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob var/max_targets = 1 //leave 0 for unlimited targets in range, 1 for one selectable target in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range diff --git a/code/modules/spells/spell_types/barnyard.dm b/code/modules/spells/spell_types/barnyard.dm index 70b33919b7..01b24fef98 100644 --- a/code/modules/spells/spell_types/barnyard.dm +++ b/code/modules/spells/spell_types/barnyard.dm @@ -44,7 +44,7 @@ var/choice = masks[randM] var/obj/item/clothing/mask/magichead = new choice - magichead.flags_1 |= NODROP_1 + magichead.item_flags |= NODROP magichead.flags_inv = null target.visible_message("[target]'s face bursts into flames, and a barnyard animal's head takes its place!", \ "Your face burns up, and shortly after the fire you realise you have the face of a barnyard animal!") diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index ff71ad8e68..8e1957f524 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -220,7 +220,7 @@ /obj/effect/proc_holder/spell/targeted/dominate name = "Dominate" - desc = "This spell dominates the mind of a lesser creature, causing it to see you as an ally." + desc = "This spell dominates the mind of a lesser creature to the will of Nar'sie, allying it only to her direct followers." charge_max = 600 range = 7 diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index bf402b7a6a..27cfc9208b 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "syndballoon" item_state = null - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE force = 0 throwforce = 0 @@ -60,10 +60,7 @@ target.visible_message("[target]'s [A] glows brightly as it wards off the spell!") user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!") user.flash_act() - var/obj/item/bodypart/part - var/index = user.get_held_index_of_item(src) - if(index) - part = user.hand_bodyparts[index] + var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src) if(part) part.dismember() ..() diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index 33b555ad21..d88ee7fb22 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -31,10 +31,10 @@ var/obj/item/marked_item - for(var/obj/item in hand_items) + for(var/obj/item/item in hand_items) // I ensouled the nuke disk once. But it's probably a really // mean tactic, so probably should discourage it. - if((item.flags_1 & ABSTRACT_1) || (item.flags_1 & NODROP_1) || item.SendSignal(COMSIG_ITEM_IMBUE_SOUL, user)) + if((item.item_flags & ABSTRACT) || (item.item_flags & NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user)) continue marked_item = item to_chat(M, "You begin to focus your very being into [item]...") diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm index 2b904df277..e3177dbb4f 100644 --- a/code/modules/spells/spell_types/mime.dm +++ b/code/modules/spells/spell_types/mime.dm @@ -58,9 +58,9 @@ H.mind.miming=!H.mind.miming if(H.mind.miming) to_chat(H, "You make a vow of silence.") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "vow") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "vow") else - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "vow", /datum/mood_event/broken_vow) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vow", /datum/mood_event/broken_vow) to_chat(H, "You break your vow of silence.") // These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors. @@ -131,17 +131,26 @@ /obj/item/book/granter/spell/mimery_blockade spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime - spellname = "" + spellname = "Invisible Blockade" name = "Guide to Advanced Mimery Vol 1" desc = "The pages don't make any sound when turned." icon_state ="bookmime" remarks = list("...") +/obj/item/book/granter/spell/mimery_blockade/attack_self(mob/user) + ..() + if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak) /obj/item/book/granter/spell/mimery_guns spell = /obj/effect/proc_holder/spell/aimed/finger_guns - spellname = "" + spellname = "Finger Guns" name = "Guide to Advanced Mimery Vol 2" desc = "There aren't any words written..." icon_state ="bookmime" remarks = list("...") + +/obj/item/book/granter/spell/mimery_guns/attack_self(mob/user) + ..() + if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak) \ No newline at end of file diff --git a/code/modules/spells/spell_types/summonitem.dm b/code/modules/spells/spell_types/summonitem.dm index bd5099da68..0bb79eba21 100644 --- a/code/modules/spells/spell_types/summonitem.dm +++ b/code/modules/spells/spell_types/summonitem.dm @@ -22,10 +22,10 @@ if(!marked_item) //linking item to the spell message = "" - for(var/obj/item in hand_items) - if(item.flags_1 & ABSTRACT_1) + for(var/obj/item/item in hand_items) + if(item.item_flags & ABSTRACT) continue - if(item.flags_1 & NODROP_1) + if(item.item_flags & NODROP) message += "Though it feels redundant, " marked_item = item message += "You mark [item] for recall." @@ -83,7 +83,7 @@ to_chat(C, "The [item_to_retrieve] that was embedded in your [L] has mysteriously vanished. How fortunate!") if(!C.has_embedded_objects()) C.clear_alert("embeddedobject") - C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "embedded") break else diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 9be68103c3..0601ff28e1 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -67,7 +67,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' icon_state = "hypo" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/list/animals = list() var/list/plants = list() var/list/dna = list() diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index c806a68867..87e13955fe 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -19,7 +19,7 @@ affecting.receive_damage(CLAMP(brute_dam/2, 15, 50), CLAMP(burn_dam/2, 0, 50)) //Damage the chest based on limb's existing damage C.visible_message("[C]'s [src.name] has been violently dismembered!") C.emote("scream") - C.SendSignal(COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) + SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) drop_limb() if(dam_type == BURN) @@ -102,7 +102,7 @@ I.forceMove(src) if(!C.has_embedded_objects()) C.clear_alert("embeddedobject") - C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "embedded") if(!special) if(C.dna) diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 12531a9ee5..91336331c4 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -121,7 +121,7 @@ I.forceMove(T) clear_alert("embeddedobject") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded") /mob/living/carbon/proc/has_embedded_objects() . = 0 diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index fe4f1a6edf..e57f8f686b 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -29,9 +29,13 @@ /datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST) if(tool) - if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.flags_1 & NODROP_1) || istype(tool, /obj/item/organ)) + if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.item_flags & NODROP) || istype(tool, /obj/item/organ)) to_chat(user, "You can't seem to fit [tool] in [target]'s [target_zone]!") return 0 + var/obj/item/electronic_assembly/EA = tool + if(istype(EA) && EA.combat_circuits && tool.w_class > WEIGHT_CLASS_SMALL) + to_chat(user, "[tool] is too dangerous to put in [target]'s [target_zone]! Maybe if it was smaller...") + return 0 else user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "You stuff [tool] into [target]'s [target_zone].") user.transferItemToLoc(tool, target, TRUE) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index e93da8b139..ea2385ce5f 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -86,7 +86,7 @@ holder = item - holder.flags_1 |= NODROP_1 + holder.item_flags |= NODROP holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null holder.materials = null diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 133fe5d8be..0302dd2cae 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -13,7 +13,7 @@ var/hunger_threshold = NUTRITION_LEVEL_STARVING var/synthesizing = 0 var/poison_amount = 5 - slot = ORGAN_SLOT_STOMACH + slot = ORGAN_SLOT_STOMACH_AID /obj/item/organ/cyberimp/chest/nutriment/on_life() if(synthesizing) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 4aa06f01c6..38967711fe 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -51,7 +51,7 @@ active = !active if(active) for(var/obj/item/I in owner.held_items) - if(!(I.flags_1 & NODROP_1)) + if(!(I.item_flags & NODROP)) stored_items += I var/list/L = owner.get_empty_held_indexes() @@ -62,7 +62,7 @@ else for(var/obj/item/I in stored_items) to_chat(owner, "Your [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.") - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP else release_items() @@ -86,7 +86,7 @@ /obj/item/organ/cyberimp/brain/anti_drop/proc/release_items() for(var/obj/item/I in stored_items) - I.flags_1 &= ~NODROP_1 + I.item_flags &= ~NODROP stored_items = list() diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 5092b53374..d38e76ae6e 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -98,7 +98,7 @@ owner.flash_act(visual = 1) /obj/item/organ/eyes/robotic/xray - name = "X-ray eyes" + name = "\improper X-ray eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." eye_color = "000" see_in_dark = 8 diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 727033838b..9e53a902a2 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -267,7 +267,7 @@ H.adjustFireLoss(nitryl_pp/4) gas_breathed = breath_gases[/datum/gas/nitryl][MOLES] if (gas_breathed > gas_stimulation_min) - H.reagents.add_reagent("nitryl_gas",1) + H.reagents.add_reagent("no2",1) breath_gases[/datum/gas/nitryl][MOLES]-=gas_breathed // Stimulum diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index 3ddf658ecd..cb7833a373 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -39,22 +39,22 @@ switch(H.disgust) if(0 to DISGUST_LEVEL_GROSS) H.clear_alert("disgust") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) H.throw_alert("disgust", /obj/screen/alert/gross) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross) if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) H.throw_alert("disgust", /obj/screen/alert/verygross) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross) if(DISGUST_LEVEL_DISGUSTED to INFINITY) H.throw_alert("disgust", /obj/screen/alert/disgusted) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted) /obj/item/organ/stomach/Remove(mob/living/carbon/M, special = 0) var/mob/living/carbon/human/H = owner if(istype(H)) H.clear_alert("disgust") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") ..() /obj/item/organ/stomach/fly diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 2521037963..48392f70a3 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -488,7 +488,7 @@ L.lay_down() //aka get up L.SetStun(0) L.SetKnockdown(0) - L.SetUnconscious(0) //i said get up i don't care if you're being tazed + L.SetUnconscious(0) //i said get up i don't care if you're being tased //SIT else if((findtext(message, sit_words))) diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 548a73627d..451ae02dac 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -30,7 +30,7 @@ L.embedded_objects -= I if(!H.has_embedded_objects()) H.clear_alert("embeddedobject") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "embedded") if(objects > 0) user.visible_message("[user] successfully removes [objects] objects from [H]'s [L]!", "You successfully remove [objects] objects from [H]'s [L.name].") diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 0e4844dced..c6741f20b8 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -7,7 +7,7 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /datum/ui_state/default/can_use_topic(src_object, mob/user) - return user.default_can_use_topic(src_object) // Call the individual mob-overriden procs. + return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. /mob/proc/default_can_use_topic(src_object) return UI_CLOSE // Don't allow interaction by default. diff --git a/code/modules/uplink/uplink.dm b/code/modules/uplink/uplink.dm index deacb6d401..4c735a2e3c 100644 --- a/code/modules/uplink/uplink.dm +++ b/code/modules/uplink/uplink.dm @@ -27,8 +27,8 @@ GLOBAL_LIST_EMPTY(uplinks) return COMPONENT_INCOMPATIBLE GLOB.uplinks += src uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted) - RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy) - RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/interact) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact) owner = _owner if(owner) LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) @@ -178,4 +178,3 @@ GLOBAL_LIST_EMPTY(uplinks) SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(U.name)]", "[U.cost]")) return TRUE - diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm index 79f09c4dbc..2e91879006 100644 --- a/code/modules/uplink/uplink_devices.dm +++ b/code/modules/uplink/uplink_devices.dm @@ -1,42 +1,60 @@ - // A collection of pre-set uplinks, for admin spawns. -/obj/item/radio/uplink/Initialize(mapload, _owner, _tc_amount = 20) - . = ..() + +// Radio-like uplink; not an actual radio because this uplink is most commonly +// used for nuke ops, for whom opening the radio GUI and the uplink GUI +// simultaneously is an annoying distraction. +/obj/item/uplink + name = "station bounced radio" + icon = 'icons/obj/radio.dmi' icon_state = "radio" + item_state = "walkietalkie" + desc = "A basic handheld radio that communicates with local telecommunication networks." lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - AddComponent(/datum/component/uplink, _owner, FALSE, TRUE, null, _tc_amount) + dog_fashion = /datum/dog_fashion/back -/obj/item/radio/uplink/nuclear/Initialize() + flags_1 = CONDUCT_1 + slot_flags = ITEM_SLOT_BELT + throw_speed = 3 + throw_range = 7 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/uplink/Initialize(mapload, owner, tc_amount = 20) + . = ..() + AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount) + +/obj/item/uplink/nuclear/Initialize() . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.set_gamemode(/datum/game_mode/nuclear) -/obj/item/radio/uplink/nuclear_restricted/Initialize() +/obj/item/uplink/nuclear_restricted/Initialize() . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.allow_restricted = FALSE hidden_uplink.set_gamemode(/datum/game_mode/nuclear) -/obj/item/radio/uplink/clownop/Initialize() +/obj/item/uplink/clownop/Initialize() . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.set_gamemode(/datum/game_mode/nuclear/clown_ops) -/obj/item/multitool/uplink/Initialize(mapload, _owner, _tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink, _owner, FALSE, TRUE, null, _tc_amount) - -/obj/item/pen/uplink/Initialize(mapload, _owner, _tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink) - traitor_unlock_degrees = 360 - -/obj/item/radio/uplink/old +/obj/item/uplink/old name = "dusty radio" desc = "A dusty looking radio." -/obj/item/radio/uplink/old/Initialize(mapload, _owner, _tc_amount = 10) +/obj/item/uplink/old/Initialize(mapload, owner, tc_amount = 10) . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.name = "dusty radio" + +// Multitool uplink +/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20) + . = ..() + AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount) + +// Pen uplink +/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20) + . = ..() + AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount) + traitor_unlock_degrees = 360 diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 619e2c8193..a9f2c63e13 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -790,7 +790,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Combat Banana Shoes" desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \ can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \ - squeek significantly louder." + squeak significantly louder." item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat cost = 6 surplus = 0 @@ -1269,7 +1269,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 8 /datum/uplink_item/cyber_implants/xray - name = "X-Ray Vision Implant" + name = "X-ray Vision Implant" desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon." item = /obj/item/autosurgeon/xray_eyes cost = 10 diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 89bbee9d60..5a12635963 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1,7 +1,3 @@ -#define STANDARD_CHARGE 1 -#define CONTRABAND_CHARGE 2 -#define COIN_CHARGE 3 - /* * Vending machine types - Can be found under /code/modules/vending/ */ @@ -21,7 +17,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C */ /datum/data/vending_product - var/product_name = "generic" + name = "generic" var/product_path = null var/amount = 0 var/max_amount = 0 @@ -74,7 +70,6 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/dish_quants = list() //used by the snack machine's custom compartment to count dishes. var/obj/item/vending_refill/refill_canister = null //The type of refill canisters used by this machine. - var/refill_count = 3 //The number of canisters the vending machine uses /obj/machinery/vending/Initialize() var/build_inv = FALSE @@ -84,9 +79,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C . = ..() wires = new /datum/wires/vending(src) if(build_inv) //non-constructable vending machine - build_inventory(products) - build_inventory(contraband, 1) - build_inventory(premium, 0, 1) + build_inventory(products, product_records) + build_inventory(contraband, hidden_records) + build_inventory(premium, coin_records) slogan_list = splittext(product_slogans, ";") // So not all machines speak at the exact same time. @@ -102,17 +97,17 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C return ..() /obj/machinery/vending/RefreshParts() //Better would be to make constructable child - if(component_parts) - product_records = list() - hidden_records = list() - coin_records = list() - build_inventory(products, start_empty = 1) - build_inventory(contraband, 1, start_empty = 1) - build_inventory(premium, 0, 1, start_empty = 1) - for(var/obj/item/vending_refill/VR in component_parts) - refill_inventory(VR, product_records, STANDARD_CHARGE) - refill_inventory(VR, coin_records, COIN_CHARGE) - refill_inventory(VR, hidden_records, CONTRABAND_CHARGE) + if(!component_parts) + return + + product_records = list() + hidden_records = list() + coin_records = list() + build_inventory(products, product_records, start_empty = TRUE) + build_inventory(contraband, hidden_records, start_empty = TRUE) + build_inventory(premium, coin_records, start_empty = TRUE) + for(var/obj/item/vending_refill/VR in component_parts) + restock(VR) /obj/machinery/vending/deconstruct(disassembled = TRUE) if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame. @@ -124,25 +119,33 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/obj_break(damage_flag) if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) - var/dump_amount = 0 - for(var/datum/data/vending_product/R in product_records) - if(R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if(!dump_path) - continue - - while(R.amount>0) - var/obj/O = new dump_path(loc) - step(O, pick(GLOB.alldirs)) //we only drop 20% of the total of each products and spread it - R.amount -= 5 //around to not fill the turf with too many objects. - dump_amount++ - if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate) - break stat |= BROKEN icon_state = "[initial(icon_state)]-broken" -/obj/machinery/vending/proc/build_inventory(list/productlist, hidden=0, req_coin=0, start_empty = null) + var/dump_amount = 0 + var/found_anything = TRUE + while (found_anything) + found_anything = FALSE + for(var/record in shuffle(product_records)) + var/datum/data/vending_product/R = record + if(R.amount <= 0) //Try to use a record that actually has something to dump. + continue + var/dump_path = R.product_path + if(!dump_path) + continue + R.amount-- + // busting open a vendor will destroy some of the contents + if(found_anything && prob(80)) + continue + + var/obj/O = new dump_path(loc) + step(O, pick(GLOB.alldirs)) + found_anything = TRUE + dump_amount++ + if (dump_amount >= 16) + return + +/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE) for(var/typepath in productlist) var/amount = productlist[typepath] if(isnull(amount)) @@ -150,47 +153,54 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/atom/temp = typepath var/datum/data/vending_product/R = new /datum/data/vending_product() - R.product_name = initial(temp.name) + R.name = initial(temp.name) R.product_path = typepath if(!start_empty) R.amount = amount R.max_amount = amount - R.display_color = pick("red","blue","green") + R.display_color = pick("#ff8080","#80ff80","#8080ff") + recordlist += R - if(hidden) - hidden_records += R - else if(req_coin) - coin_records += R - else - product_records += R +/obj/machinery/vending/proc/restock(obj/item/vending_refill/canister) + if (!canister.products) + canister.products = products.Copy() + if (!canister.contraband) + canister.contraband = contraband.Copy() + if (!canister.premium) + canister.premium = premium.Copy() + . = 0 + . += refill_inventory(canister.products, product_records) + . += refill_inventory(canister.contraband, hidden_records) + . += refill_inventory(canister.premium, coin_records) -/obj/machinery/vending/proc/refill_inventory(obj/item/vending_refill/refill, datum/data/vending_product/machine, var/charge_type = STANDARD_CHARGE) - var/total = 0 - var/to_restock = 0 +/obj/machinery/vending/proc/refill_inventory(list/productlist, list/recordlist) + . = 0 + for(var/R in recordlist) + var/datum/data/vending_product/record = R + var/diff = min(record.max_amount - record.amount, productlist[record.product_path]) + if (diff) + productlist[record.product_path] -= diff + record.amount += diff + . += diff - for(var/datum/data/vending_product/machine_content in machine) - if(machine_content.amount == 0 && refill.charges[charge_type] > 0) - machine_content.amount++ - refill.charges[charge_type]-- - total++ - to_restock += machine_content.max_amount - machine_content.amount - if(to_restock <= refill.charges[charge_type]) - for(var/datum/data/vending_product/machine_content in machine) - machine_content.amount = machine_content.max_amount - refill.charges[charge_type] -= to_restock - total += to_restock - else - var/tmp_charges = refill.charges[charge_type] - for(var/datum/data/vending_product/machine_content in machine) - if(refill.charges[charge_type] == 0) - break - var/restock = CEILING(((machine_content.max_amount - machine_content.amount)/to_restock)*tmp_charges, 1) - if(restock > refill.charges[charge_type]) - restock = refill.charges[charge_type] - machine_content.amount += restock - refill.charges[charge_type] -= restock - total += restock - return total +/obj/machinery/vending/proc/update_canister() + if (!component_parts) + return + + var/obj/item/vending_refill/R = locate() in component_parts + if (!R) + CRASH("Constructible vending machine did not have a refill canister") + return + + R.products = unbuild_inventory(product_records) + R.contraband = unbuild_inventory(hidden_records) + R.premium = unbuild_inventory(coin_records) + +/obj/machinery/vending/proc/unbuild_inventory(list/recordlist) + . = list() + for(var/R in recordlist) + var/datum/data/vending_product/record = R + .[record.product_path] += record.amount /obj/machinery/vending/crowbar_act(mob/living/user, obj/item/I) if(!component_parts) @@ -248,46 +258,52 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C bill = new S.type(src, 1) to_chat(user, "You insert [I] into [src].") return - else if(istype(I, refill_canister) && refill_canister != null) - if(stat & (BROKEN|NOPOWER)) - to_chat(user, "It does nothing.") - else if(panel_open) + else if(refill_canister && istype(I, refill_canister)) + if (!panel_open) + to_chat(user, "You should probably unscrew the service panel first.") + else if (stat & (BROKEN|NOPOWER)) + to_chat(user, "[src] does not respond.") + else //if the panel is open we attempt to refill the machine var/obj/item/vending_refill/canister = I - if(canister.charges[STANDARD_CHARGE] == 0) - to_chat(user, "This [canister.name] is empty!") + if(canister.get_part_rating() == 0) + to_chat(user, "[canister] is empty!") else - var/transfered = refill_inventory(canister,product_records,STANDARD_CHARGE) - transfered += refill_inventory(canister,coin_records,COIN_CHARGE) - transfered += refill_inventory(canister,hidden_records,CONTRABAND_CHARGE) - if(transfered) - to_chat(user, "You loaded [transfered] items in \the [name].") + // instantiate canister if needed + var/transferred = restock(canister) + if(transferred) + to_chat(user, "You loaded [transferred] items in [src].") else - to_chat(user, "The [name] is fully stocked.") + to_chat(user, "There's nothing to restock!") return - else - to_chat(user, "You should probably unscrew the service panel first.") else return ..() +/obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/W) + if(!istype(W)) + return FALSE + if((flags_1 & NODECONSTRUCT_1) && !W.works_from_distance) + return FALSE + if(!component_parts || !refill_canister) + return FALSE + + var/moved = 0 + if(panel_open || W.works_from_distance) + if(W.works_from_distance) + display_parts(user) + for(var/I in W) + if(istype(I, refill_canister)) + moved += restock(I) + else + display_parts(user) + if(moved) + to_chat(user, "[moved] items restocked.") + W.play_rped_sound() + return TRUE + /obj/machinery/vending/on_deconstruction() - var/product_list = list(product_records, hidden_records, coin_records) - for(var/i=1, i<=3, i++) - for(var/datum/data/vending_product/machine_content in product_list[i]) - while(machine_content.amount !=0) - var/safety = 0 //to avoid infinite loop - for(var/obj/item/vending_refill/VR in component_parts) - safety++ - if(VR.charges[i] < VR.init_charges[i]) - VR.charges[i]++ - machine_content.amount-- - if(!machine_content.amount) - break - else - safety-- - if(safety <= 0) // all refill canisters are full - break - ..() + update_canister() + . = ..() /obj/machinery/vending/emag_act(mob/user) if(obj_flags & EMAGGED) @@ -323,7 +339,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C dat += "Vend " else dat += "Sold out " - dat += "[sanitize(R.product_name)]:" + dat += "[sanitize(R.name)]:" dat += " [R.amount]" dat += "" dat += "" @@ -358,17 +374,11 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C to_chat(usr, "There is no money in this machine.") return if(coin) - if(!usr.get_active_held_item()) - usr.put_in_hands(coin) - else - coin.forceMove(get_turf(src)) + usr.put_in_hands(coin) to_chat(usr, "You remove [coin] from [src].") coin = null if(bill) - if(!usr.get_active_held_item()) - usr.put_in_hands(bill) - else - bill.forceMove(get_turf(src)) + usr.put_in_hands(bill) to_chat(usr, "You remove [bill] from [src].") bill = null @@ -537,7 +547,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C if(!prob(prb)) return FALSE do_sparks(5, TRUE, src) - var/tmp/check_range = TRUE + var/check_range = TRUE if(electrocute_mob(user, get_area(src), src, 0.7, check_range)) return TRUE else @@ -545,7 +555,3 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/onTransitZ() return - -#undef STANDARD_CHARGE -#undef CONTRABAND_CHARGE -#undef COIN_CHARGE diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index c0cfe661d7..95211a9600 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -3,7 +3,7 @@ desc = "A vending machine for costumes." icon_state = "theater" icon_deny = "theater-deny" - req_access_txt = "46" //Theatre access needed, unless hacked. + req_access = list(ACCESS_THEATRE) product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" vend_reply = "Thank you for using AutoDrobe!" products = list(/obj/item/clothing/suit/chickensuit = 1, @@ -115,15 +115,17 @@ premium = list(/obj/item/clothing/suit/pirate/captain = 2, /obj/item/clothing/head/pirate/captain = 2, /obj/item/clothing/head/helmet/roman/fake = 1, - /obj/item/clothing/head/helmet/roman/legionaire/fake = 1, + /obj/item/clothing/head/helmet/roman/legionnaire/fake = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/shield/riot/roman/fake = 1, /obj/item/skub = 1) refill_canister = /obj/item/vending_refill/autodrobe +/obj/machinery/vending/autodrobe/all_access + desc = "A vending machine for costumes. This model appears to have no access restrictions." + req_access = null + /obj/item/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" - charges = list(32, 2, 3)// of 96 standard, 6 contraband, 9 premium - init_charges = list(32, 2, 3) diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index f5f7bf1d9d..0d193c451d 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -16,7 +16,6 @@ /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, /obj/item/reagent_containers/food/drinks/bottle/grappa = 5, /obj/item/reagent_containers/food/drinks/bottle/sake = 5, - /obj/item/reagent_containers/food/drinks/bottle/fernet = 5, /obj/item/reagent_containers/food/drinks/ale = 6, /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, @@ -32,13 +31,18 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12, /obj/item/reagent_containers/food/drinks/flask = 3, /obj/item/reagent_containers/food/drinks/beer = 6) - contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12) + contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12, + /obj/item/reagent_containers/food/drinks/bottle/fernet = 5) product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - req_access_txt = "25" + req_access = list(ACCESS_BAR) refill_canister = /obj/item/vending_refill/boozeomat -/obj/machinery/vending/boozeomat/maint +/obj/machinery/vending/boozeomat/all_access + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. This model appears to have no access restrictions." + req_access = null + +/obj/machinery/vending/boozeomat/pubby_maint //abandoned bar on Pubbystation products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, /obj/item/reagent_containers/food/drinks/bottle/absinthe = 1, /obj/item/reagent_containers/food/drinks/bottle/limejuice = 1, @@ -48,10 +52,17 @@ /obj/item/reagent_containers/food/drinks/ice = 3, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6, /obj/item/reagent_containers/food/drinks/flask = 1) - req_access_txt = "0" + req_access = null + +/obj/machinery/vending/boozeomat/pubby_captain //Captain's quarters on Pubbystation + 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 = list(ACCESS_CAPTAIN) /obj/item/vending_refill/boozeomat machine_name = "Booze-O-Mat" icon_state = "refill_booze" - charges = list(61, 4, 0)//of 182 standard, 12 contraband - init_charges = list(61, 4, 0) diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index d81a0a01a6..6b9334362d 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -41,8 +41,6 @@ /obj/item/vending_refill/cigarette machine_name = "ShadyCigs Deluxe" icon_state = "refill_smoke" - charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium - init_charges = list(12, 3, 2) /obj/machinery/vending/cigarette/pre_throw(obj/item/I) if(istype(I, /obj/item/lighter)) diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index ad5b38575c..80e422c6a0 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -119,5 +119,3 @@ /obj/item/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = list(38, 4, 4)// of 112 standard, 12 contraband, 10 premium(?) - init_charges = list(38, 4, 4) diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm index d70cf4ae76..6ac9dd648d 100644 --- a/code/modules/vending/coffee.dm +++ b/code/modules/vending/coffee.dm @@ -4,8 +4,8 @@ product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" icon_state = "coffee" icon_vend = "coffee-vend" - products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, - /obj/item/reagent_containers/food/drinks/mug/tea = 25, + products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, + /obj/item/reagent_containers/food/drinks/mug/tea = 25, /obj/item/reagent_containers/food/drinks/mug/coco = 25) contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12) refill_canister = /obj/item/vending_refill/coffee @@ -13,5 +13,3 @@ /obj/item/vending_refill/coffee machine_name = "Solar's Best Hot Drinks" icon_state = "refill_joe" - charges = list(25, 4, 0)//of 75 standard, 12 contraband - init_charges = list(25, 4, 0) diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index e675b29f81..f61c392ff7 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -22,8 +22,6 @@ /obj/item/vending_refill/cola machine_name = "Robust Softdrinks" icon_state = "refill_cola" - charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium - init_charges = list(30, 4, 1) /obj/machinery/vending/cola/random name = "\improper Random Drinkies" diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm index 5933ab8fa9..d36f4a4849 100644 --- a/code/modules/vending/engineering.dm +++ b/code/modules/vending/engineering.dm @@ -4,7 +4,7 @@ desc = "Everything you need for do-it-yourself station repair." icon_state = "engi" icon_deny = "engi-deny" - req_access_txt = "11" + req_access = list(ACCESS_ENGINE_EQUIP) products = list(/obj/item/clothing/under/rank/chief_engineer = 4, /obj/item/clothing/under/rank/engineer = 4, /obj/item/clothing/shoes/sneakers/orange = 4, diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 53106c09a6..0e64e0a367 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -3,7 +3,7 @@ desc = "Spare tool vending. What? Did you expect some witty description?" icon_state = "engivend" icon_deny = "engivend-deny" - req_access_txt = "11" //Engineering Equipment access + req_access = list(ACCESS_ENGINE_EQUIP) products = list(/obj/item/clothing/glasses/meson/engine = 2, /obj/item/clothing/glasses/welding = 3, /obj/item/multitool = 4, diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index f76f67af46..4e4d336567 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -1,7 +1,7 @@ /obj/machinery/vending/games name = "\improper Good Clean Fun" desc = "Vends things that the Captain and Head of Personnel are probably not going to appreciate you fiddling with instead of your job..." - product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" + product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" icon_state = "games" products = list(/obj/item/toy/cards/deck = 5, /obj/item/storage/pill_bottle/dice = 10, @@ -13,5 +13,3 @@ /obj/item/vending_refill/games machine_name = "\improper Good Clean Fun" icon_state = "refill_games" - charges = list(7, 3, 0) //of 21 standard, 9 contraband - init_charges = list(7, 3, 0) diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index 6eafafb164..8415eff69f 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -2,11 +2,14 @@ name = "\improper Liberation Station" desc = "An overwhelming amount of ancient patriotism washes over you just by looking at the machine." icon_state = "liberationstation" - req_access_txt = "1" product_slogans = "Liberation Station: Your one-stop shop for all things second ammendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!" product_ads = "Float like an astronaut, sting like a bullet!;Express your second ammendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" vend_reply = "Remember the name: Liberation Station!" - products = list(/obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, + products = list(/obj/item/reagent_containers/food/snacks/burger/plain = 5, //O say can you see, by the dawn's early light + /obj/item/reagent_containers/food/snacks/burger/baseball = 3, //What so proudly we hailed at the twilight's last gleaming + /obj/item/reagent_containers/food/snacks/fries = 5, //Whose broad stripes and bright stars through the perilous fight + /obj/item/reagent_containers/food/drinks/beer/light = 10, //O'er the ramparts we watched, were so gallantly streaming? + /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, /obj/item/gun/ballistic/automatic/pistol/deagle/camo = 2, /obj/item/gun/ballistic/automatic/pistol/m1911 = 2, /obj/item/gun/ballistic/automatic/proto/unrestricted = 2, @@ -17,8 +20,11 @@ premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2, /obj/item/ammo_box/magazine/m50 = 4, /obj/item/ammo_box/magazine/m45 = 2, - /obj/item/ammo_box/magazine/m75 = 2) - contraband = list(/obj/item/clothing/under/patriotsuit = 1, - /obj/item/bedsheet/patriot = 3) + /obj/item/ammo_box/magazine/m75 = 2, + /obj/item/reagent_containers/food/snacks/cheesyfries = 5, + /obj/item/reagent_containers/food/snacks/burger/baconburger = 5) //Premium burgers for the premium section + contraband = list(/obj/item/clothing/under/patriotsuit = 3, + /obj/item/bedsheet/patriot = 5, + /obj/item/reagent_containers/food/snacks/burger/superbite = 3) //U S A armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index c912d3dd3e..3b387f6959 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -2,8 +2,7 @@ name = "\improper Syndicate Donksoft Toy Vendor" desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!" icon_state = "syndi" - req_access_txt = "1" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" + product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index b1a5edb867..bea449845c 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -4,25 +4,25 @@ icon_state = "med" icon_deny = "med-deny" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access_txt = "5" - products = list(/obj/item/reagent_containers/syringe = 12, - /obj/item/reagent_containers/dropper = 3, - /obj/item/healthanalyzer = 4, - /obj/item/sensor_device = 2, + req_access = list(ACCESS_MEDICAL) + products = list(/obj/item/reagent_containers/syringe = 12, + /obj/item/reagent_containers/dropper = 3, + /obj/item/healthanalyzer = 4, + /obj/item/sensor_device = 2, /obj/item/pinpointer/crew = 2, /obj/item/reagent_containers/medspray/sterilizine = 1, - /obj/item/stack/medical/gauze = 8, - /obj/item/reagent_containers/pill/patch/styptic = 5, - /obj/item/reagent_containers/medspray/styptic = 2, - /obj/item/reagent_containers/pill/patch/silver_sulf = 5, + /obj/item/stack/medical/gauze = 8, + /obj/item/reagent_containers/pill/patch/styptic = 5, + /obj/item/reagent_containers/medspray/styptic = 2, + /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/medspray/silver_sulf = 2, /obj/item/reagent_containers/pill/insulin = 10, - /obj/item/reagent_containers/pill/salbutamol = 2, - /obj/item/reagent_containers/glass/bottle/charcoal = 4, - /obj/item/reagent_containers/glass/bottle/epinephrine = 4, + /obj/item/reagent_containers/pill/salbutamol = 2, + /obj/item/reagent_containers/glass/bottle/charcoal = 4, + /obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, - /obj/item/reagent_containers/glass/bottle/morphine = 4, - /obj/item/reagent_containers/glass/bottle/toxin = 3, + /obj/item/reagent_containers/glass/bottle/morphine = 4, + /obj/item/reagent_containers/glass/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6) contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, @@ -36,7 +36,5 @@ refill_canister = /obj/item/vending_refill/medical /obj/item/vending_refill/medical - machine_name = "NanoMed" + machine_name = "NanoMed Plus" icon_state = "refill_medical" - charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium - init_charges = list(26, 5, 3) diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 6b5005eee4..ef19ce3b9b 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -15,5 +15,8 @@ /obj/item/reagent_containers/pill/morphine = 2) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/medical - refill_count = 1 + refill_canister = /obj/item/vending_refill/wallmed + +/obj/item/vending_refill/wallmed + machine_name = "NanoMed" + icon_state = "refill_medical" diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm index 8c577d47c1..4832aa7ad7 100644 --- a/code/modules/vending/robotics.dm +++ b/code/modules/vending/robotics.dm @@ -4,7 +4,7 @@ desc = "All the tools you need to create your own robot army." icon_state = "robotics" icon_deny = "robotics-deny" - req_access_txt = "29" + req_access = list(ACCESS_ROBOTICS) products = list(/obj/item/clothing/suit/toggle/labcoat = 4, /obj/item/clothing/under/rank/roboticist = 4, /obj/item/stack/cable_coil = 4, diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 3f3035f9e4..7e90a5ce18 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -4,7 +4,7 @@ product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" icon_state = "sec" icon_deny = "sec-deny" - req_access_txt = "1" + req_access = list(ACCESS_SECURITY) products = list(/obj/item/restraints/handcuffs = 8, /obj/item/restraints/handcuffs/cable/zipties = 10, /obj/item/grenade/flashbang = 4, diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 8fcd189a4f..69e510ad5a 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -13,12 +13,10 @@ /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6) contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) refill_canister = /obj/item/vending_refill/snack - var/chef_compartment_access = "28" + var/chef_compartment_access = "28" //ACCESS_KITCHEN /obj/item/vending_refill/snack machine_name = "Getmore Chocolate Corp" - charges = list(12, 2, 0)//of 36 standard, 6 contraband - init_charges = list(12, 2, 0) /obj/machinery/vending/snack/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/reagent_containers/food/snacks)) @@ -44,7 +42,7 @@ if(iscompartmentfull(user)) break if(!S.junkiness) - T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src, TRUE) + SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src, TRUE) food_load(S) loaded++ else diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index fc2f9c59b9..08bb4615bb 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -2,24 +2,26 @@ name = "\improper Donksoft Toy Vendor" desc = "Ages 8 and up approved vendor that dispenses toys." icon_state = "syndi" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" + product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor - products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/syndicateballoon = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5) - contraband = list(/obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, - /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5) + products = list( + /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, + /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + /obj/item/toy/sword = 10, + /obj/item/ammo_box/foambox = 20, + /obj/item/toy/foamblade = 10, + /obj/item/toy/syndicateballoon = 10, + /obj/item/clothing/suit/syndicatefake = 5, + /obj/item/clothing/head/syndicatefake = 5) + contraband = list( + /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, + /obj/item/toy/katana = 10, + /obj/item/twohanded/dualsaber/toy = 5) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft @@ -27,5 +29,3 @@ /obj/item/vending_refill/donksoft machine_name = "Donksoft Toy Vendor" icon_state = "refill_donksoft" - charges = list(32,28,0)// of 90 standard, 75 contraband, 0 premium - init_charges = list(32,28,0) diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index f9aa8f216a..5a41beb88d 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -17,7 +17,8 @@ /obj/item/clothing/head/soft/sec = 3, /obj/item/clothing/mask/bandana/red = 3, /obj/item/clothing/under/rank/security/skirt = 3, - /obj/item/clothing/under/rank/security/grey = 3) + /obj/item/clothing/under/rank/security/grey = 3, + /obj/item/clothing/under/pants/khaki = 3) premium = list(/obj/item/clothing/under/rank/security/navyblue = 3, /obj/item/clothing/suit/security/officer = 3, /obj/item/clothing/head/beret/sec/navyofficer = 3) @@ -25,8 +26,6 @@ /obj/item/vending_refill/wardrobe/sec_wardrobe machine_name = "SecDrobe" - charges = list(10, 0, 3) - init_charges = list(10, 0, 3) /obj/machinery/vending/wardrobe/medi_wardrobe name = "\improper MediDrobe" @@ -55,8 +54,6 @@ /obj/item/vending_refill/wardrobe/medi_wardrobe machine_name = "MediDrobe" - charges = list(10, 0, 0) - init_charges = list(10, 0, 0) /obj/machinery/vending/wardrobe/engi_wardrobe name = "EngiDrobe" @@ -77,8 +74,6 @@ /obj/item/vending_refill/wardrobe/engi_wardrobe machine_name = "EngiDrobe" - charges = list(7, 0, 0) - init_charges = list(7, 0, 0) /obj/machinery/vending/wardrobe/atmos_wardrobe name = "AtmosDrobe" @@ -97,8 +92,6 @@ /obj/item/vending_refill/wardrobe/atmos_wardrobe machine_name = "AtmosDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/cargo_wardrobe name = "CargoDrobe" @@ -116,8 +109,6 @@ /obj/item/vending_refill/wardrobe/cargo_wardrobe machine_name = "CargoDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/robo_wardrobe name = "RoboDrobe" @@ -136,8 +127,6 @@ /obj/item/vending_refill/wardrobe/robo_wardrobe machine_name = "RoboDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/science_wardrobe name = "SciDrobe" @@ -158,8 +147,6 @@ /obj/item/vending_refill/wardrobe/science_wardrobe machine_name = "SciDrobe" - charges = list(8, 0, 0) - init_charges = list(8, 0, 0) /obj/machinery/vending/wardrobe/hydro_wardrobe name = "Hydrobe" @@ -178,8 +165,6 @@ /obj/item/vending_refill/wardrobe/hydro_wardrobe machine_name = "HyDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/curator_wardrobe name = "CuraDrobe" @@ -197,8 +182,6 @@ /obj/item/vending_refill/wardrobe/curator_wardrobe machine_name = "CuraDrobe" - charges = list(3, 0, 0) - init_charges = list(3, 0, 0) /obj/machinery/vending/wardrobe/bar_wardrobe name = "BarDrobe" @@ -226,8 +209,6 @@ /obj/item/vending_refill/wardrobe/bar_wardrobe machine_name = "BarDrobe" - charges = list(8, 0, 0) - init_charges = list(8, 0, 0) /obj/machinery/vending/wardrobe/chef_wardrobe name = "ChefDrobe" @@ -250,8 +231,6 @@ /obj/item/vending_refill/wardrobe/chef_wardrobe machine_name = "ChefDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/jani_wardrobe name = "JaniDrobe" @@ -278,8 +257,6 @@ /obj/item/vending_refill/wardrobe/jani_wardrobe machine_name = "JaniDrobe" - charges = list(7, 0, 0) - init_charges = list(7, 0, 0) /obj/machinery/vending/wardrobe/law_wardrobe name = "LawDrobe" @@ -302,8 +279,6 @@ /obj/item/vending_refill/wardrobe/law_wardrobe machine_name = "LawDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/chap_wardrobe name = "ChapDrobe" @@ -324,8 +299,6 @@ /obj/item/vending_refill/wardrobe/chap_wardrobe machine_name = "ChapDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/chem_wardrobe name = "ChemDrobe" @@ -343,8 +316,6 @@ /obj/item/vending_refill/wardrobe/chem_wardrobe machine_name = "ChemDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/gene_wardrobe name = "GeneDrobe" @@ -361,8 +332,6 @@ /obj/item/vending_refill/wardrobe/gene_wardrobe machine_name = "GeneDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/viro_wardrobe name = "ViroDrobe" @@ -380,5 +349,3 @@ /obj/item/vending_refill/wardrobe/viro_wardrobe machine_name = "ViroDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) \ No newline at end of file diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm index 6c48b7a376..495d60a461 100644 --- a/code/modules/vending/youtool.dm +++ b/code/modules/vending/youtool.dm @@ -3,7 +3,6 @@ desc = "Tools for tools." icon_state = "tool" icon_deny = "tool-deny" - //req_access_txt = "12" //Maintenance access products = list(/obj/item/stack/cable_coil/random = 10, /obj/item/crowbar = 5, /obj/item/weldingtool = 3, diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 154941ce70..03d2ac3921 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -4,7 +4,7 @@ humans, butchering all other living things to \ sustain the zombie, smashing open airlock doors and opening \ child-safe caps on bottles." - flags_1 = NODROP_1|ABSTRACT_1|DROPDEL_1 + item_flags = NODROP | ABSTRACT | DROPDEL resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF icon = 'icons/effects/blood.dmi' icon_state = "bloodhand_left" diff --git a/goon/icons/obj/chairs.dmi b/goon/icons/obj/chairs.dmi new file mode 100644 index 0000000000..462370ac37 Binary files /dev/null and b/goon/icons/obj/chairs.dmi differ diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi index 607bfe44c4..24bf84c97d 100644 Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 237a841a4d..6ace923016 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index de8d09b45b..8142e03498 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index be165a3479..69fd014581 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 9247e3ee96..137150bcd4 100644 Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 60fbd984e1..0cd591045e 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 90f9bb7c7f..e5d474f01d 100644 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/modular_citadel/code/_onclick/click.dm b/modular_citadel/code/_onclick/click.dm index 04e763313d..f077b3a71b 100644 --- a/modular_citadel/code/_onclick/click.dm +++ b/modular_citadel/code/_onclick/click.dm @@ -34,7 +34,7 @@ //These are always reachable. //User itself, current loc, and user inventory - if(DirectAccess(A)) + if(A in DirectAccess()) if(W) W.rightclick_melee_attack_chain(src, A, params) else diff --git a/modular_citadel/code/controllers/subsystem/job.dm b/modular_citadel/code/controllers/subsystem/job.dm index 749d7e1e72..303e1b626d 100644 --- a/modular_citadel/code/controllers/subsystem/job.dm +++ b/modular_citadel/code/controllers/subsystem/job.dm @@ -29,7 +29,6 @@ /datum/controller/subsystem/job/proc/FreeRole(rank) if(!rank) return - Debug("Freeing role: [rank]") var/datum/job/job = GetJob(rank) if(!job) return FALSE diff --git a/modular_citadel/code/datums/components/phantomthief.dm b/modular_citadel/code/datums/components/phantomthief.dm index 8b62971a2a..c09d17d930 100644 --- a/modular_citadel/code/datums/components/phantomthief.dm +++ b/modular_citadel/code/datums/components/phantomthief.dm @@ -18,9 +18,9 @@ filter_border = _border filter_color = _color - RegisterSignal(COMSIG_COMBAT_TOGGLED, .proc/handlefilterstuff) - RegisterSignal(COMSIG_ITEM_EQUIPPED, .proc/OnEquipped) - RegisterSignal(COMSIG_ITEM_DROPPED, .proc/OnDropped) + RegisterSignal(parent, COMSIG_COMBAT_TOGGLED, .proc/handlefilterstuff) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/OnEquipped) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/OnDropped) /datum/component/phantomthief/proc/handlefilterstuff(mob/user, combatmodestate) if(istype(user)) diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm index c4c0c10e69..d2e12c3498 100755 --- a/modular_citadel/code/game/machinery/vending.dm +++ b/modular_citadel/code/game/machinery/vending.dm @@ -117,17 +117,11 @@ machine_name = "KinkMate" icon = 'modular_citadel/icons/vending_restock.dmi' icon_state = "refill_kink" - charges = list(8, 5, 1)// of 20 standard, 12 contraband, 3 premium - init_charges = list(8, 5, 1) /obj/item/vending_refill/nazi machine_name = "nazivend" icon_state = "refill_nazi" - charges = list(33, 13, 0) - init_charges = list(33, 13, 0) /obj/item/vending_refill/soviet machine_name = "sovietvend" icon_state = "refill_soviet" - charges = list(47, 7, 0) - init_charges = list(47, 7, 0) diff --git a/modular_citadel/code/game/objects/ids.dm b/modular_citadel/code/game/objects/ids.dm index c2cc378079..5d67c18416 100644 --- a/modular_citadel/code/game/objects/ids.dm +++ b/modular_citadel/code/game/objects/ids.dm @@ -52,7 +52,7 @@ desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices." icon = 'icons/obj/module.dmi' icon_state = "cell_mini" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/uses = 5 //Dictates how many charges the device adds to compatible items /obj/item/emagrecharge/examine(mob/user) diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm index 4138617138..bdd193c477 100644 --- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm +++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm @@ -206,8 +206,8 @@ /obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/toy/sword/cx)) - if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1)) - to_chat(user, "\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!") + if((W.item_flags & NODROP) || (item_flags & NODROP)) + to_chat(user, "\the [item_flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [item_flags & NODROP ? W : src]!") return else to_chat(user, "You combine the two plastic swords, making a single supermassive toy! You're fake-cool.") @@ -307,7 +307,7 @@ var/mob/M = loc M.update_inv_hands() - SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is) /obj/item/twohanded/hypereutactic/AltClick(mob/living/user) if(!in_range(src, user)) //Basic checks to prevent abuse diff --git a/modular_citadel/code/game/objects/items/vending_items.dm b/modular_citadel/code/game/objects/items/vending_items.dm index d2347579d1..db1fdb48cf 100755 --- a/modular_citadel/code/game/objects/items/vending_items.dm +++ b/modular_citadel/code/game/objects/items/vending_items.dm @@ -1,5 +1,3 @@ /obj/item/vending_refill/medical machine_name = "NanoMed" icon_state = "refill_medical" - charges = list(32, 5, 3)// of 95 standard, 13 contraband, 8 premium - init_charges = list(32, 5, 3) \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 81c8df40ee..38996ff76d 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/custom.dmi' icon_state = "cebu" w_class = WEIGHT_CLASS_TINY - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON /obj/item/soap/cebu //real versions, for admin shenanigans. Adminspawn only desc = "A bright blue bar of soap that smells of wolves" @@ -338,7 +338,7 @@ blood_overlay_type = "armor" dog_fashion = /datum/dog_fashion/back armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - + /obj/item/clothing/neck/cloak/green name = "Generic Green Cloak" diff --git a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm index 0a1d8256ae..79f17afc74 100644 --- a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm +++ b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm @@ -54,7 +54,7 @@ var/obj/item/loaded = loaded_atom var/obj/item/storage/S = H.get_item_by_slot(SLOT_BACK) if(istype(S)) - S.SendSignal(COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack + SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack continue if(!H.put_in_hands(loaded)) //They don't have one/somehow that failed, put it in their hands loaded.forceMove(T) //Guess we're just dumping it on the floor! diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm index 2fcf5a4c9d..cf5ce03bc7 100644 --- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm +++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm @@ -27,7 +27,7 @@ if(hud_used && hud_used.static_inventory) for(var/obj/screen/combattoggle/selector in hud_used.static_inventory) selector.rebasetointerbay(src) - SendSignal(COMSIG_COMBAT_TOGGLED, src, combatmode) + SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode) return TRUE /mob/living/carbon/Move(atom/newloc, direct = 0) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm index e6f863d7bb..ac88674c6a 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm @@ -35,7 +35,7 @@ if(target.w_uniform) target.w_uniform.add_fingerprint(user) var/randomized_zone = ran_zone(user.zone_selected) - target.SendSignal(COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) + SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected) var/obj/item/bodypart/affecting = target.get_bodypart(randomized_zone) var/randn = rand(1, 100) if(user.resting) diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 41b5c2c2f6..496a723d08 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -182,7 +182,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! /obj/item/soap/tongue/New() ..() - flags_1 |= NOBLUDGEON_1 //No more attack messages + item_flags |= NOBLUDGEON //No more attack messages /obj/item/trash/rkibble name = "robo kibble" @@ -258,7 +258,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! to_chat(R,"You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) - SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(ishuman(target)) if(R.emagged) var/mob/living/L = target @@ -293,7 +293,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! to_chat(R, "You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) - SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) return @@ -318,7 +318,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! /obj/item/dogborg/pounce/New() ..() - flags_1 |= NOBLUDGEON_1 + item_flags |= NOBLUDGEON /mob/living/silicon/robot var/leaping = 0 diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm index 0b57c621f2..68be5987da 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -4,4 +4,4 @@ else if(O) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) diff --git a/strings/cas_white.txt b/strings/cas_white.txt index bc179f2bac..6ff7dbddc7 100644 --- a/strings/cas_white.txt +++ b/strings/cas_white.txt @@ -79,7 +79,7 @@ A blob zombie with an erection. Backdoor Xeno Babes. Five hundred ice spiders. Cablecuffs. -Hulk, TK and X-Ray. +Hulk, TK and X-ray. Paranoia. Putting the boots to him, medium style. ERP-seeking meteors. @@ -207,7 +207,7 @@ The king of the rumba beat. Unnecessary surgery. Farting in the air distro loop. Krokodil addiction. -A H.O.N.K. mech. +A H.O.N.K. mech. A dominatrix HoS. Sexcurity. The Experimentor. @@ -269,7 +269,7 @@ Mindbreaker toxin. Legions of cyborg assholes. Homicidal chefs. Extended. -Grammar fascist gods. +Grammar fascist gods. Cortical borers. A masochist in an ash storm. Draconic. diff --git a/strings/ion_laws.json b/strings/ion_laws.json index 28c6297dcf..152afd1116 100644 --- a/strings/ion_laws.json +++ b/strings/ion_laws.json @@ -347,7 +347,7 @@ "HEADS OF CREW", "CAPTAINS AND HEADS", "CYBORGS", - "ARTIFICAL INTELLIGENCES", + "ARTIFICIAL INTELLIGENCES", "DRONES" ], "iondrinks": [ @@ -656,7 +656,7 @@ "JETPACKS", "JUMPSUITS", "LASERS", - "LIGHTBULBS", + "LIGHT BULBS", "LIGHTS", "LOCKERS", "MACHINES", diff --git a/strings/names/ing_verbs.txt b/strings/names/ing_verbs.txt index 5869e8a170..6a8da4c1ef 100644 --- a/strings/names/ing_verbs.txt +++ b/strings/names/ing_verbs.txt @@ -922,7 +922,7 @@ wrestling wriggling wringing writing -x-raying +X-raying yawning yelling zipping diff --git a/strings/traumas.json b/strings/traumas.json index ab3f58f984..e013264c4e 100644 --- a/strings/traumas.json +++ b/strings/traumas.json @@ -58,50 +58,6 @@ "@pick(semicolon)the ai and borgs are mettacomming I think", "u just did the world a little bit more sad place for someone", "WHERES THE SLIP REWRITE WHERE THR FUCK ID IT?", - "CEMISTRY SUKS!!!!!!!!", - "youed call her a toeugh bithc", - "git gud!!", - "CHEMIT GIB HALNOM PLS", - "PLASMA iS MENT 2 BE FREE", - "LoL tROLED U", - "SEC IS A REV, LINCH!!", - "FUCK U IM WAY MORE ROBUST u bITCH!!1!!", - "iS tHis bay?", - "NO PRED CAN eVER CATCH MI", - "SCIENCE GIB SHINK RAY PLS", - "KILL PUNPUN 4 FUN xDD", - "ooc wow rly?", - "i play @pick(roles) to only ORDER not DO", - "CRAGO ORDER @pick(cargo) PLS", - "erp?", - "i want to digest u!!!", - "i shure hop dere are no PRED arund!!!!", - "NOM!1!", - "iF it COMPILES it werks!", - "LYNCH RObOTIKS NOT GIBING ME MECH WTF?/?", - "GWURGLE!!", - "balid saled!", - "LINCH VIRO", - "VIRO GIB SuPR VIrUS!!", - "Ai plai vxtest2!", - "ahelp kan i b pick@(s_roles)???", - ";taitor trie to make meh malk/?!1!!", - ";ENGIE TATOR HE SET UP SINGULO!!!11", - "WHEN NAGAS ADdED?/?", - "SINDYIE ON SAtIONS GiB gUNS PLISE", - "CcLOWN IV SlIPPING MI, SEc t BAR@", - "ahelp iT's RP vALiDZ!", - "HYDROBONIX PLS WEED PLIESe PLIsE BLAzE IT1!!!", - "HALP GOLIATH TENETCAL RAPPPP!!!!111", - "DudSE it'S 4:20 LmAO BLAZZ IT xDDDDD", - "ahelp DUDE I JUT LOST MY JOBB!!", - "looc dude rly", - "pray can i heff spells", - "aI state dem1!", - "SINGULO eNGINE 2 DANGER, SOLARS PLS!", - "nerf blob!1", - "iM NOT A FUWRRYY!!!", - "FOURTEEN INCHES SOFT!!!", "@pick(semicolon)N-NYAAAAAA~", "@pick(bug)", "@pick(semicolon)wtf??????????? @pick(bug)", @@ -157,11 +113,6 @@ "sybl", "mrs sybil", "mr basil", - "sisadel", - "dullus", - "colon marhens", - "haylo", - "EEGEE", "mr terry", "berry" ], @@ -242,31 +193,6 @@ "YOU SHALL SURVIVE THIS, MY PRIEST.", "BE HEALED, PRIEST.", "YOUR LIFE IS IMPORTANT. KEEP IT." - ], + ] - "roles": [ - "heds", - "ceptin", - "hop", - "arrdee", - "sek" - ], - - "cargo": [ - "GUNS", - "HATS", - "PIZEH", - "MEMES", - "GLOWY CYSTAL" - ], - - "s_roles": [ - "ert", - "shadowlig", - "ninja", - "admen", - "mantor", - "bluh daymon", - "wizzerd" - ] } diff --git a/tgstation.dme b/tgstation.dme index 2f01b98c5a..65a0274e81 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -70,9 +70,11 @@ #include "code\__DEFINES\radiation.dm" #include "code\__DEFINES\radio.dm" #include "code\__DEFINES\reagents.dm" +#include "code\__DEFINES\reagents_specific_heat.dm" #include "code\__DEFINES\research.dm" #include "code\__DEFINES\robots.dm" #include "code\__DEFINES\role_preferences.dm" +#include "code\__DEFINES\rust_g.dm" #include "code\__DEFINES\say.dm" #include "code\__DEFINES\shuttles.dm" #include "code\__DEFINES\sight.dm" @@ -331,11 +333,13 @@ #include "code\datums\components\earprotection.dm" #include "code\datums\components\edit_complainer.dm" #include "code\datums\components\empprotection.dm" +#include "code\datums\components\forced_gravity.dm" #include "code\datums\components\forensics.dm" #include "code\datums\components\infective.dm" #include "code\datums\components\jousting.dm" #include "code\datums\components\knockoff.dm" #include "code\datums\components\lockon_aiming.dm" +#include "code\datums\components\magnetic_catch.dm" #include "code\datums\components\material_container.dm" #include "code\datums\components\mirage_border.dm" #include "code\datums\components\mood.dm" @@ -352,6 +356,7 @@ #include "code\datums\components\stationloving.dm" #include "code\datums\components\swarming.dm" #include "code\datums\components\thermite.dm" +#include "code\datums\components\uplink.dm" #include "code\datums\components\wearertargeting.dm" #include "code\datums\components\wet_floor.dm" #include "code\datums\components\decals\blood.dm" @@ -841,6 +846,7 @@ #include "code\game\objects\items\devices\radio\headset.dm" #include "code\game\objects\items\devices\radio\intercom.dm" #include "code\game\objects\items\devices\radio\radio.dm" +#include "code\game\objects\items\grenades\antigravity.dm" #include "code\game\objects\items\grenades\chem_grenade.dm" #include "code\game\objects\items\grenades\clusterbuster.dm" #include "code\game\objects\items\grenades\emgrenade.dm" @@ -1153,6 +1159,7 @@ #include "code\modules\antagonists\changeling\powers\mimic_voice.dm" #include "code\modules\antagonists\changeling\powers\mutations.dm" #include "code\modules\antagonists\changeling\powers\panacea.dm" +#include "code\modules\antagonists\changeling\powers\pheromone_receptors.dm" #include "code\modules\antagonists\changeling\powers\regenerate.dm" #include "code\modules\antagonists\changeling\powers\revive.dm" #include "code\modules\antagonists\changeling\powers\shriek.dm" @@ -1549,6 +1556,7 @@ #include "code\modules\events\wizard\shuffle.dm" #include "code\modules\events\wizard\summons.dm" #include "code\modules\fields\fields.dm" +#include "code\modules\fields\gravity.dm" #include "code\modules\fields\peaceborg_dampener.dm" #include "code\modules\fields\timestop.dm" #include "code\modules\fields\turf_objects.dm" @@ -2606,7 +2614,6 @@ #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\unit_tests\_unit_tests.dm" -#include "code\modules\uplink\uplink.dm" #include "code\modules\uplink\uplink_devices.dm" #include "code\modules\uplink\uplink_items.dm" #include "code\modules\uplink\uplink_purchase_log.dm" diff --git a/tgui/src/interfaces/ai_airlock.ract b/tgui/src/interfaces/ai_airlock.ract index 3acd384617..6f6c92967d 100644 --- a/tgui/src/interfaces/ai_airlock.ract +++ b/tgui/src/interfaces/ai_airlock.ract @@ -109,7 +109,7 @@ component.exports = { Disabled - + {{#if !data.wires.timing}} [ Wires have been cut ] {{/if}} diff --git a/tgui/src/interfaces/cellular_emporium.ract b/tgui/src/interfaces/cellular_emporium.ract index a5ce433452..5aa6213ec1 100644 --- a/tgui/src/interfaces/cellular_emporium.ract +++ b/tgui/src/interfaces/cellular_emporium.ract @@ -20,6 +20,6 @@ {{/each}} {{^data.abilities}} - No abilities availible. + No abilities available. {{/data.abilities}}
    [get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]
    [get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Empty"]
     
    Back:[(back && !(back.flags_1&ABSTRACT_1)) ? back : "Empty"]" + dat += "
    Back:[(back && !(back.item_flags & ABSTRACT)) ? back : "Empty"]" if(has_breathable_mask && istype(back, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
     
    Head:[(head && !(head.flags_1&ABSTRACT_1)) ? head : "Empty"]
    Head:[(head && !(head.item_flags & ABSTRACT)) ? head : "Empty"]
    Mask:Obscured
    Mask:[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Empty"]
    Mask:[(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Empty"]
    Neck:Obscured
    Neck:[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Empty"]
    Neck:[(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Empty"]
    Eyes:Obscured
    Eyes:[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "Empty"]
    Eyes:[(glasses && !(glasses.item_flags & ABSTRACT)) ? glasses : "Empty"]
    Ears:Obscured
    Ears:[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "Empty"]
    Ears:[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "Empty"]
     
    Exosuit:[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "Empty"]
    Exosuit:[(wear_suit && !(wear_suit.item_flags & ABSTRACT)) ? wear_suit : "Empty"]
     ↳Suit Storage:[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "Empty"]" + dat += "
     ↳Suit Storage:[(s_store && !(s_store.item_flags & ABSTRACT)) ? s_store : "Empty"]" if(has_breathable_mask && istype(s_store, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
    Shoes:Obscured
    Shoes:[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "Empty"]
    Shoes:[(shoes && !(shoes.item_flags & ABSTRACT)) ? shoes : "Empty"]
    Gloves:Obscured
    Gloves:[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "Empty"]
    Gloves:[(gloves && !(gloves.item_flags & ABSTRACT)) ? gloves : "Empty"]
    Uniform:Obscured
    Uniform:[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "Empty"]
    Uniform:[(w_uniform && !(w_uniform.item_flags & ABSTRACT)) ? w_uniform : "Empty"]
     ↳Pockets:
     ↳ID:
     ↳Belt:
     ↳Belt:[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "Empty"]" + dat += "
     ↳Belt:[(belt && !(belt.item_flags & ABSTRACT)) ? belt : "Empty"]" if(has_breathable_mask && istype(belt, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
     ↳Pockets:[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "Left (Empty)"]" - dat += " [(r_store && !(r_store.flags_1&ABSTRACT_1)) ? "Right (Full)" : "Right (Empty)"]
     ↳ID:[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "Empty"]
     ↳Pockets:[(l_store && !(l_store.item_flags & ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" + dat += " [(r_store && !(r_store.item_flags & ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]
     ↳ID:[(wear_id && !(wear_id.item_flags & ABSTRACT)) ? wear_id : "Empty"]
    Handcuffed: Remove