diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index e2f805d6c55..373047bd21f 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -225,7 +225,7 @@
"aeq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/interrogationobs)
"aer" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/camera{c_tag = "Brig Prison Hallway"; dir = 4; network = list("Prison","SS13")},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
"aes" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/advtaser{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/advtaser{pixel_x = 0; pixel_y = 0},/obj/item/weapon/gun/energy/advtaser{pixel_x = 3; pixel_y = -3},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury)
-"aet" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
+"aet" = (/obj/structure/rack,/obj/item/key/security,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"aeu" = (/obj/structure/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shield/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/shield/riot,/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury)
"aev" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"aew" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/security/hos)
@@ -242,7 +242,7 @@
"aeH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Interrogation Observation APC"; pixel_x = 26; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/security/interrogationobs)
"aeI" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Armory APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/camera/motion{c_tag = "Secure Armory"; dir = 4; network = list("SS13")},/obj/machinery/light_switch{pixel_x = -25; pixel_y = -10},/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"aeJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
-"aeK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
+"aeK" = (/obj/structure/stool/bed/chair/janicart/secway,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"aeL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"aeM" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"aeN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
@@ -4839,6 +4839,7 @@
"bPc" = (/turf/simulated/wall,/area/hallway/primary/central/sw)
"bPd" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads)
"bPe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/server)
+"bPf" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"bPg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/engine/gravitygenerator)
"bPh" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/engineering{name = "Gravity Generator"; req_access_txt = "0"; req_one_access_txt = "10;30"},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/gravitygenerator)
"bPi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central/sw)
@@ -5236,8 +5237,8 @@
"bWK" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"bWL" = (/obj/structure/closet/jcloset,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/janitor)
"bWM" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor,/area/janitor)
-"bWN" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/camera{c_tag = "Custodial Closet"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/janitor)
-"bWO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/newscaster{pixel_y = 30},/turf/simulated/floor,/area/janitor)
+"bWN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/newscaster{pixel_y = 30},/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor,/area/janitor)
+"bWO" = (/obj/machinery/camera{c_tag = "Custodial Closet"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed/chair/janicart,/turf/simulated/floor,/area/janitor)
"bWP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/janitor)
"bWQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/reagent_dispensers/spacecleanertank{pixel_y = 30},/turf/simulated/floor,/area/janitor)
"bWR" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/janitor)
@@ -5394,7 +5395,7 @@
"bZM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"bZN" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/hallway/primary/aft)
"bZO" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"bZP" = (/obj/structure/table,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; name = "Janitor Requests Console"; departmentType = 1; pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/janitor)
+"bZP" = (/obj/structure/table,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; name = "Janitor Requests Console"; departmentType = 1; pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/key/janitor,/turf/simulated/floor,/area/janitor)
"bZQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/janitor)
"bZR" = (/obj/machinery/light,/obj/structure/janitorialcart,/turf/simulated/floor,/area/janitor)
"bZS" = (/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/janitor)
@@ -8300,9 +8301,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgacNacOacPacQacRacSacCaalacEacEacTacUacVacEacEacEaaaaaaaaaaaaabKacGactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaajaajaajaajaaaaajaajaajaajaajaaaaajaajaajaajaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgacgacgacgacgacgadcaddacEacEadeadfadgadhadiacEacEaaaaaaaaaaaaaaaabKactadjadkadladmadnadoactadpadqadradsadtaduadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaajaajaajaajaaaaajaajaajaajaajaaaaajaajaajaajaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwadxadyadzadAadwadBadCacEadDadEadFadGadHadIadJacEaaaaaaaaaaaaaaaaaaactadKadLadMadNacXadOactadPadtadtadtadtaduadvaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaajaajaajaajaaaaaaaaaaaaaaaaaaaaaaajaajaajaajaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQadQadQadQadQadRadSadTadUadwachacdacEadVadWadXadGadYadZaeaacEaaaaaaaaaaaaaaaaebactaecaedaeeaefaegaehactaeiadtaejadtadtaduadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAaaaaaaabAabAabAabAabAabAabAaaaaaaabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQaekaelaemadQaenaeoaepaepaeqaeracCacEaesadWadXaetadYadZaeuacEaaaaaaaaaaaaaaaaaaactaevadLaewadNacXaexactaeyadtadtadtadtaezadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAaeAaeAaeAaeAaeAaeAaeAaeAaaaadQaeBaeCaeDaeEaeFaeGaeFaeHaeqacSacCacEacEaeIaeJaeKaeLaeMacEacEaaaaaaaaaaaaaaaaaaactaeNaeOaePacXaeQaeRactaeSaeTaeUaeUaeVadaabLabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQadQadQadQadQadRadSadTadUadwachacdacEadVadWadXaetadYadZaeaacEaaaaaaaaaaaaaaaaebactaecaedaeeaefaegaehactaeiadtaejadtadtaduadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAaaaaaaabAabAabAabAabAabAabAaaaaaaabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQaekaelaemadQaenaeoaepaepaeqaeracCacEaesadWadXaeKadYadZaeuacEaaaaaaaaaaaaaaaaaaactaevadLaewadNacXaexactaeyadtadtadtadtaezadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAaeAaeAaeAaeAaeAaeAaeAaeAaaaadQaeBaeCaeDaeEaeFaeGaeFaeHaeqacSacCacEacEaeIaeJbPfaeLaeMacEacEaaaaaaaaaaaaaaaaaaactaeNaeOaePacXaeQaeRactaeSaeTaeUaeUaeVadaabLabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAaeWaeXaeYaeAaeZaeXafaaeAaaaadQafbafcafdadQadwafeadwadwadwaffafgaalacEafhafiafjafkaflacEafmafmafmafmafmafmafmactafnafoafpafqafractactafsaftafuafuafwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafxafxafxacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafyafzafAaeAafyafzafAaeAaaaadQafBafCafDafEafFafGafHafIafJafKafLafMacEacEafNafOafPacEacEafmafQafRafSafTafUafVafWafXafYafZagaagaagbagcagdageagfaggaghadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaafxaaaaabaaaagiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAagjafAagkaeAaglafAagmaeAaaaadQadQadQadQadQagnagoagpagqagragsagtaguagvagwagxagyagzagAagBagCagDagEagFagFagFagGagHagIagJagFagFagFagFagKafuagLagMagNagOagPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaabagRaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAabAabAabAabAabAabAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -8382,7 +8383,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbF
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQNbubbSgbShbSibSjbSkbSlbvvbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUbSVbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTeaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaabTfbTgbThbTgbTiaaaaaaaaabOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTIbTJbTKbTsbTLbTMbTNbTObTPbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUEbUFbUGbUHbUEbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbVcbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabThbWjbWkbWjbThbUIbWlbWmbWnbWobWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWNbWObWPbWQbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXVbXWbUCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabThbWjbWkbWjbThbUIbWlbWmbWnbWobWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXVbXWbUCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUEbYbbWjbWjbYcbYdbTkbYebYfbYgbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZsbZtbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabThbWkbWkbWkbThbUIbZxbZybZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcakcalcamcancaocapcaqcarcascasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaacaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaabUEcaVcaWcaXbUEbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlbPlcbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcchcciccjcckcclccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index c832bcc03d4..a001c55082f 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -11,6 +11,7 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
var/global/list/flag_list = list() //list of flags during Nations gamemode
var/global/list/airlocks = list() //list of all airlocks
var/global/list/singularities = list() //list of all singularities
+var/global/list/janitorial_equipment = list() //list of janitorial equipment
var/global/list/aibots = list() // AI controlled bots
var/global/list/table_recipes = list() //list of all table craft recipes
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index a38d22e6ff6..eb28028cac4 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -80,10 +80,10 @@
last_move = 0
return
+ last_move = direct
src.move_speed = world.timeofday - src.l_move_time
src.l_move_time = world.timeofday
- last_move = direct
spawn(5) // Causes space drifting. /tg/station has no concept of speed, we just use 5
@@ -154,7 +154,7 @@
if(pulledby)
return 1
- if(locate(/obj/structure/lattice) in orange(1, get_turf(src))) //Not realistic but makes pushing things in space easier
+ if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
return 1
return 0
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index b5ad01dd92d..256eb2ca69c 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -294,7 +294,7 @@
title = "Janitor"
flag = JANITOR
department_flag = SUPPORT
- total_positions = 1
+ total_positions = 2
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index e44fb712774..670d02af975 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -174,7 +174,7 @@
/obj/item/weapon/cartridge/rd/initialize()
radio = new /obj/item/radio/integrated/signal(src)
- ..()
+ ..()
/obj/item/weapon/cartridge/captain
name = "Value-PAK Cartridge"
@@ -191,7 +191,7 @@
/obj/item/weapon/cartridge/captain/initialize()
radio = new /obj/item/radio/integrated/beepsky(src)
- ..()
+ ..()
/obj/item/weapon/cartridge/supervisor
name = "Easy-Record DELUXE"
@@ -282,7 +282,7 @@
/* Power Monitor (Mode: 43 / 433) */
- if(mode==43 || mode==433)
+ if(mode==43 || mode==433)
values["powermonitors"] = powermonitor_repository.powermonitor_data()
if (powmonitor && !isnull(powmonitor.powernet))
@@ -463,7 +463,7 @@
else
JaniData["user_loc"] = list("x" = 0, "y" = 0)
var/MopData[0]
- for(var/obj/item/weapon/mop/M in world)
+ for(var/obj/item/weapon/mop/M in janitorial_equipment)
var/turf/ml = get_turf(M)
if(ml)
if(ml.z != cl.z)
@@ -476,7 +476,7 @@
var/BucketData[0]
- for(var/obj/structure/mopbucket/B in world)
+ for(var/obj/structure/mopbucket/B in janitorial_equipment)
var/turf/bl = get_turf(B)
if(bl)
if(bl.z != cl.z)
@@ -488,7 +488,7 @@
BucketData[++BucketData.len] = list("x" = 0, "y" = 0, dir=null, status = null)
var/CbotData[0]
- for(var/obj/machinery/bot/cleanbot/B in world)
+ for(var/obj/machinery/bot/cleanbot/B in aibots)
var/turf/bl = get_turf(B)
if(bl)
if(bl.z != cl.z)
@@ -500,7 +500,7 @@
if(!CbotData.len)
CbotData[++CbotData.len] = list("x" = 0, "y" = 0, dir=null, status = null)
var/CartData[0]
- for(var/obj/structure/stool/bed/chair/cart/janicart/B in world)
+ for(var/obj/structure/janitorialcart/B in janitorial_equipment)
var/turf/bl = get_turf(B)
if(bl)
if(bl.z != cl.z)
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index ec5f18283a8..4167c36a61f 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -66,9 +66,9 @@
/obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params)
if(flag) //we're placing the object on a table or in backpack
return
- laser_act(target, user)
+ laser_act(target, user, params)
-/obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user)
+/obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user, var/params)
if( !(user in (viewers(7,target))) )
return
if (!diode)
@@ -173,12 +173,19 @@
//laser pointer image
icon_state = "pointer_[pointer_icon_state]"
var/list/showto = list()
- for(var/mob/M in range(7,targloc))
+ for(var/mob/M in viewers(7,targloc))
if(M.client)
showto.Add(M.client)
var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10)
- I.pixel_x = target.pixel_x + rand(-5,5)
- I.pixel_y = target.pixel_y + rand(-5,5)
+ var/list/click_params = params2list(params)
+ if(click_params)
+ if(click_params["icon-x"])
+ I.pixel_x = (text2num(click_params["icon-x"]) - 16)
+ if(click_params["icon-y"])
+ I.pixel_y = (text2num(click_params["icon-y"]) - 16)
+ else
+ I.pixel_x = target.pixel_x + rand(-5,5)
+ I.pixel_y = target.pixel_y + rand(-5,5)
if(outmsg)
user << outmsg
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index 874f96271fe..205ffc6733f 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -1,3 +1,5 @@
+#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune))
+
/obj/item/weapon/mop
desc = "The world of janitalia wouldn't be complete without a mop."
name = "mop"
@@ -12,18 +14,22 @@
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
- var/mopspeed = 40
+ var/mopspeed = 30
/obj/item/weapon/mop/New()
create_reagents(mopcap)
+ janitorial_equipment += src
+/obj/item/weapon/mop/Destroy()
+ janitorial_equipment -= src
+ return..()
/obj/item/weapon/mop/proc/clean(turf/simulated/A)
if(reagents.has_reagent("water", 1) || reagents.has_reagent("cleaner", 1) || reagents.has_reagent("holywater", 1))
A.clean_blood()
for(var/obj/effect/O in A)
- if(istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) || istype(O,/obj/effect/rune))
+ if(is_cleanable(O))
qdel(O)
reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
reagents.remove_any(1) //reaction() doesn't use up the reagents
@@ -33,20 +39,20 @@
if(!proximity) return
if(reagents.total_volume < 1)
- user << "Your mop is dry!"
+ user << "Your mop is dry!"
return
var/turf/simulated/turf = A
- if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
+ if(is_cleanable(A))
turf = A.loc
A = null
if(istype(turf))
- user.visible_message("[user] begins to clean \the [turf] with [src].")
+ user.visible_message("[user] begins to clean \the [turf] with [src].", "You begin to clean \the [turf] with [src]...")
- if(do_after(user, mopspeed, target = src))
+ if(do_after(user, src.mopspeed, target = turf))
+ user << "You finish mopping."
clean(turf)
- user << "You have finished mopping!"
/obj/effect/attackby(obj/item/I, mob/user, params)
diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm
index 7f5f6b7861e..4ebf6b257e8 100644
--- a/code/game/objects/items/weapons/soap.dm
+++ b/code/game/objects/items/weapons/soap.dm
@@ -16,11 +16,9 @@
icon_state = "soapnt"
/obj/item/weapon/soap/deluxe
- icon_state = "soapdeluxe"
-
-/obj/item/weapon/soap/deluxe/New()
desc = "A deluxe Waffle Co. brand bar of soap. Smells of comdoms."
- cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these
+ icon_state = "soapdeluxe"
+ cleanspeed = 40 //slightly better because deluxe -- captain gets one of these
/obj/item/weapon/soap/syndie
desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster."
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index e88e37afd6c..5b700bf7181 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -29,8 +29,8 @@
/obj/item/weapon/storage/bag/trash
name = "trash bag"
desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"
- icon = 'icons/obj/trash.dmi'
- icon_state = "trashbag0"
+ icon = 'icons/obj/janitor.dmi'
+ icon_state = "trashbag"
item_state = "trashbag"
w_class = 4
@@ -46,12 +46,12 @@
/obj/item/weapon/storage/bag/trash/update_icon()
if(contents.len == 0)
- icon_state = "trashbag0"
+ icon_state = "[initial(icon_state)]"
else if(contents.len < 12)
- icon_state = "trashbag1"
+ icon_state = "[initial(icon_state)]1"
else if(contents.len < 21)
- icon_state = "trashbag2"
- else icon_state = "trashbag3"
+ icon_state = "[initial(icon_state)]2"
+ else icon_state = "[initial(icon_state)]3"
/obj/item/weapon/storage/bag/trash/cyborg
@@ -63,6 +63,13 @@
/obj/item/weapon/storage/bag/trash/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
return
+/obj/item/weapon/storage/bag/trash/bluespace
+ name = "trash bag of holding"
+ desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
+ icon_state = "bluetrashbag"
+ max_combined_w_class = 60
+ storage_slots = 60
+
// -----------------------------
// Plastic Bag
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index d22ca34cffa..24e030fbbc0 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -258,8 +258,8 @@
new /obj/item/weapon/implantcase/death_alarm(src)
new /obj/item/weapon/implantcase/death_alarm(src)
new /obj/item/weapon/implantcase/death_alarm(src)
+ new /obj/item/weapon/implantcase/death_alarm(src)
new /obj/item/weapon/implanter(src)
- new /obj/item/weapon/implantpad(src)
/obj/item/weapon/storage/box/rxglasses
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index c9a624fad8c..9d8ed7ee3dc 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -1,54 +1,98 @@
-/obj/structure/stool/bed/chair/cart/
+//old style PIMP-CART
+/obj/structure/stool/bed/chair/janicart
+ name = "janicart"
+ desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility."
icon = 'icons/obj/vehicles.dmi'
- anchored = 1
+ icon_state = "pussywagon"
+ anchored = 0
density = 1
- var/empstun = 0
- var/health = 100
- var/destroyed = 0
- var/move_delay = 1
- var/keytype = /obj/item/key
- var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread
+ var/obj/item/weapon/storage/bag/trash/mybag = null
+ var/callme = "pimpin' ride" //how do people refer to it?
+ var/move_delay = 0
+ var/floorbuffer = 0
+ var/keytype = /obj/item/key/janitor
-/obj/structure/stool/bed/chair/cart/process()
- if(empstun > 0)
- empstun--
- if(empstun < 0)
- empstun = 0
-
-/obj/structure/stool/bed/chair/cart/New()
- processing_objects |= src
+/obj/structure/stool/bed/chair/janicart/New()
handle_rotation()
-/obj/structure/stool/bed/chair/cart/examine(mob/user)
- if(..(user, 1))
- switch(health)
- if(75 to 99)
- usr << "\blue It appears slightly dented."
- if(40 to 74)
- usr << "\red It appears heavily dented."
- if(1 to 39)
- usr << "\red It appears severely dented."
- if((INFINITY * -1) to 0)
- usr << "It appears completely unsalvageable"
+/obj/structure/stool/bed/chair/janicart/Move(a, b, flag)
+ ..()
+ if(floorbuffer)
+ var/turf/tile = loc
+ if(isturf(tile))
+ tile.clean_blood()
+ if (istype(tile, /turf/simulated/floor))
+ var/turf/simulated/floor/F = tile
+ F.dirt = 0
+ for(var/A in tile)
+ if(istype(A, /obj/effect))
+ if(is_cleanable(A))
+ qdel(A)
-/obj/structure/stool/bed/chair/cart/attackby(obj/item/W, mob/user, params)
- if (istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if (WT.remove_fuel(0))
- if(destroyed)
- user << "\red The [src.name] is destroyed beyond repair."
- add_fingerprint(user)
- user.visible_message("\blue [user] has fixed some of the dents on [src].", "\blue You fix some of the dents on \the [src]")
- health += 20
- HealthCheck()
- else
- user << "Need more welding fuel!"
+/obj/structure/stool/bed/chair/janicart/examine(mob/user)
+ ..()
+ if(floorbuffer)
+ user << "It has been upgraded with a floor buffer."
+
+
+/obj/structure/stool/bed/chair/janicart/attackby(obj/item/I, mob/user, params)
+ if(istype(I, keytype))
+ user << "Hold [I] in one of your hands while you drive this [callme]."
+ else if(istype(I, /obj/item/weapon/storage/bag/trash))
+ if(keytype == /obj/item/key/janitor)
+ if(!user.drop_item())
+ return
+ user << "You hook the trashbag onto the [callme]."
+ I.loc = src
+ mybag = I
+ else if(istype(I, /obj/item/janiupgrade))
+ if(keytype == /obj/item/key/janitor)
+ floorbuffer = 1
+ qdel(I)
+ user << "You upgrade the [callme] with the floor buffer."
+ update_icon()
+
+/obj/structure/stool/bed/chair/janicart/update_icon()
+ overlays.Cut()
+ if(mybag)
+ overlays += "cart_garbage"
+ if(floorbuffer)
+ overlays += "cart_buffer"
+
+/obj/structure/stool/bed/chair/janicart/attack_hand(mob/user)
+ if(mybag)
+ mybag.loc = get_turf(user)
+ user.put_in_hands(mybag)
+ mybag = null
+ update_icon()
+ else
+ ..()
+
+
+/obj/structure/stool/bed/chair/janicart/relaymove(mob/user, direction)
+ if(user.stat || user.stunned || user.weakened || user.paralysis)
+ unbuckle_mob()
+ if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype))
+ if(!Process_Spacemove(direction) || !has_gravity(src.loc) || move_delay || !isturf(loc))
return
- if(istype(W, /obj/item/key))
- user << "Hold [W] in one of your hands while you drive this [name]."
+ step(src, direction)
+ update_mob()
+ handle_rotation()
+ if(istype(src.loc, /turf/simulated))
+ var/turf/simulated/T = src.loc
+ if(T.wet == 2) //Lube! Fall off!
+ playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
+ buckled_mob.Stun(7)
+ buckled_mob.Weaken(7)
+ unbuckle_mob()
+ step(src, dir)
+ move_delay = 1
+ spawn(2)
+ move_delay = 0
+ else
+ user << "You'll need the keys in one of your hands to drive this [callme]."
-
-/obj/structure/stool/bed/chair/cart/user_buckle_mob(mob/living/M, mob/user)
+/obj/structure/stool/bed/chair/janicart/user_buckle_mob(mob/living/M, mob/user)
if(user.incapacitated()) //user can't move the mob on the janicart's turf if incapacitated
return
for(var/atom/movable/A in get_turf(src)) //we check for obstacles on the turf.
@@ -59,19 +103,14 @@
..()
update_mob()
-/obj/structure/stool/bed/chair/cart/post_buckle_mob(mob/living/M)
- update_mob()
- return ..()
+/obj/structure/stool/bed/chair/janicart/unbuckle_mob()
+ if(buckled_mob)
+ buckled_mob.pixel_x = 0
+ buckled_mob.pixel_y = 0
+ ..()
-/obj/structure/stool/bed/chair/cart/unbuckle_mob()
- var/mob/living/M = ..()
- if(M)
- M.pixel_x = 0
- M.pixel_y = 0
- return M
-
-/obj/structure/stool/bed/chair/cart/handle_rotation()
- if(dir == SOUTH)
+/obj/structure/stool/bed/chair/janicart/handle_rotation()
+ if((dir == SOUTH) || (dir == WEST) || (dir == EAST))
layer = FLY_LAYER
else
layer = OBJ_LAYER
@@ -83,7 +122,8 @@
update_mob()
-/obj/structure/stool/bed/chair/cart/proc/update_mob()
+
+/obj/structure/stool/bed/chair/janicart/proc/update_mob()
if(buckled_mob)
buckled_mob.dir = dir
switch(dir)
@@ -91,190 +131,85 @@
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 7
if(WEST)
- buckled_mob.pixel_x = 13
+ buckled_mob.pixel_x = 12
buckled_mob.pixel_y = 7
if(NORTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 4
if(EAST)
- buckled_mob.pixel_x = -13
+ buckled_mob.pixel_x = -12
buckled_mob.pixel_y = 7
-/obj/structure/stool/bed/chair/cart/emp_act(severity)
- switch(severity)
- if(1)
- src.empstun = (rand(5,10))
- if(2)
- src.empstun = (rand(1,5))
- src.visible_message("\red The [src.name]'s motor short circuits!")
- spark_system.attach(src)
- spark_system.set_up(5, 0, src)
- spark_system.start()
-
-/obj/structure/stool/bed/chair/cart/bullet_act(var/obj/item/projectile/Proj)
- var/hitrider = 0
- if(istype(Proj, /obj/item/projectile/ion))
- Proj.on_hit(src, 2)
- return
+/obj/structure/stool/bed/chair/janicart/bullet_act(obj/item/projectile/Proj)
if(buckled_mob)
- if(prob(75))
- hitrider = 1
- var/act = buckled_mob.bullet_act(Proj)
- if(act >= 0)
- visible_message("[buckled_mob.name] is hit by [Proj]!")
- if(istype(Proj, /obj/item/projectile/energy))
- unbuckle_mob()
- return
- if(istype(Proj, /obj/item/projectile/energy/electrode))
- if(prob(25))
- unbuckle_mob()
- visible_message("The [src.name] absorbs the [Proj]")
- if(!istype(buckled_mob, /mob/living/carbon/human))
- return buckled_mob.bullet_act(Proj)
- else
- var/mob/living/carbon/human/H = buckled_mob
- return H.electrocute_act(0, src, 1, 0)
- if(!hitrider)
- visible_message("[Proj] hits the [name]!")
- if(!Proj.nodamage && Proj.damage_type == BRUTE || Proj.damage_type == BURN)
- health -= Proj.damage
- HealthCheck()
-
-/obj/structure/stool/bed/chair/cart/proc/HealthCheck()
- if(health > 100) health = 100
- if(health <= 0 && !destroyed)
- destroyed = 1
- density = 0
- if(buckled_mob)
- unbuckle_mob()
- visible_message("The [name] explodes!")
- explosion(src.loc,-1,0,2,7,10)
- icon_state = "pussywagon_destroyed"
-
-/obj/structure/stool/bed/chair/cart/ex_act(severity)
- switch (severity)
- if(1.0)
- health -= 100
- if(2.0)
- health -= 75
- if(3.0)
- health -= 45
- HealthCheck()
-
-
-/////////////////////////////////////////////////////////////////////////
-
-/obj/structure/stool/bed/chair/cart/janicart
- name = "janicart"
- icon_state = "pussywagon"
- flags = OPENCONTAINER
- //copypaste sorry
- var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
- var/obj/item/weapon/storage/bag/trash/mybag = null
-
-/obj/structure/stool/bed/chair/cart/janicart/New()
- ..()
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
-
-/obj/structure/stool/bed/chair/cart/janicart/examine(mob/user)
- if(!..(user, 1))
- return
-
- user << "\icon[src] This [name] contains [reagents.total_volume] unit\s of [reagents]!"
- if(mybag)
- user << "\A [mybag] is hanging on the [name]."
-
-/obj/structure/stool/bed/chair/cart/janicart/attackby(obj/item/W, mob/user, params)
- ..()
- if(istype(W, /obj/item/weapon/mop))
- if(reagents.total_volume >= 2)
- reagents.trans_to(W, 2)
- user << "You wet the mop in the pimpin' ride."
- playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1)
- if(reagents.total_volume < 1)
- user << "This pimpin' ride is out of water!"
- else if(istype(W, /obj/item/weapon/storage/bag/trash))
- user << "You hook the trashbag onto the pimpin' ride."
- user.drop_item()
- W.loc = src
- mybag = W
-
-
-/obj/structure/stool/bed/chair/cart/janicart/attack_hand(mob/user)
- if(mybag)
- mybag.loc = get_turf(user)
- user.put_in_hands(mybag)
- mybag = null
- else
- ..()
-
-
-/obj/structure/stool/bed/chair/cart/janicart/relaymove(mob/user, direction)
- if(user.stat || user.stunned || user.weakened || user.paralysis || destroyed)
- unbuckle_mob()
- return
- if(empstun > 0)
- if(user)
- user << "\red \the [src] is unresponsive."
- return
- if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype))
- if(!Process_Spacemove(direction) || !has_gravity(src.loc) || move_delay || !isturf(loc))
- return
- step(src, direction)
- update_mob()
- handle_rotation()
- move_delay = 1
- spawn(2)
- move_delay = 0
- else
- user << "You'll need the keys in one of your hands to drive this pimpin' ride."
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-
-/obj/structure/stool/bed/chair/cart/ambulance
- name = "ambulance"
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "docwagon"
- anchored = 0
- density = 1
-/var/brightness = 4
-/var/strobe = 0
-
-/obj/structure/stool/bed/chair/cart/ambulance/relaymove(mob/user, direction)
- if(user.stat || user.stunned || user.weakened || user.paralysis || destroyed)
- unbuckle_mob()
- return
- if(empstun > 0)
- if(user)
- user << "\red \the [src] is unresponsive."
- return
- if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype))
- if(!Process_Spacemove(direction) || !has_gravity(src.loc) || move_delay || !isturf(loc))
- return
- step(src, direction)
- update_mob()
- handle_rotation()
- move_delay = 1
- spawn(2)
- move_delay = 0
- else
- user << "You'll need the keys in one of your hands to drive this ambulance."
-
+ buckled_mob.bullet_act(Proj)
/obj/item/key
name = "key"
- desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
+ desc = "A small grey key."
icon = 'icons/obj/vehicles.dmi'
- icon_state = "keys"
+ icon_state = "key"
w_class = 1
+/obj/item/key/janitor
+ desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
+ icon_state = "keyjanitor"
+
+/obj/item/key/security
+ desc = "A keyring with a small steel key, and a rubber stun baton accessory."
+ icon_state = "keysec"
+
/obj/item/key/ambulance
name = "ambulance key"
desc = "A keyring with a small steel key, and tag with a red cross on it."
icon_state = "keydoc"
+/obj/item/key/snowmobile
+ name = "snowmobile key"
+ desc = "A keyring with a small steel key, and tag with a red cross on it; clearly it's not implying you're going to the hospital for this..."
+ icon_state = "keydoc" //get a better icon, sometime.
+
+/obj/item/janiupgrade
+ name = "floor buffer upgrade"
+ desc = "An upgrade for mobile janicarts."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "upgrade"
+
+/obj/structure/stool/bed/chair/janicart/secway
+ name = "secway"
+ desc = "A brave security cyborg gave its life to help you look like a complete tool."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "secway"
+ callme = "secway"
+ keytype = /obj/item/key/security
+
+/obj/structure/stool/bed/chair/janicart/secway/update_mob()
+ if(buckled_mob)
+ buckled_mob.dir = dir
+ buckled_mob.pixel_y = 4
+
+
+/obj/structure/stool/bed/chair/janicart/ambulance
+ name = "ambulance"
+ desc = "For getting to patients in a hurry--or running them over."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "docwagon"
+ callme = "ambulance"
+ keytype = /obj/item/key/ambulance
+
+/obj/structure/stool/bed/chair/janicart/secway/snowmobile
+ name = "red snowmobile"
+ desc = "Wheeeeeeeeeeee."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "snowmobile"
+ callme = "snowmobile"
+
+/obj/structure/stool/bed/chair/janicart/secway/snowmobile/blue
+ name = "blue snowmobile"
+ icon_state = "bluesnowmobile"
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+
//TG style Janicart
/obj/structure/janitorialcart
@@ -297,8 +232,13 @@
/obj/structure/janitorialcart/New()
create_reagents(100)
+ janitorial_equipment += src
+/obj/structure/janitorialcart/Destroy()
+ janitorial_equipment -= src
+ return ..()
+
/obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user)
if(reagents.total_volume < 1)
user << "[src] is out of water!"
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index f14e9ec246d..4988e7d465e 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -11,11 +11,16 @@
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
+ janitorial_equipment += src
/obj/structure/mopbucket/full/New()
..()
reagents.add_reagent("water", 100)
+/obj/structure/mopbucket/Destroy()
+ janitorial_equipment -= src
+ return ..()
+
/obj/structure/mopbucket/examine(mob/user)
if(..(user, 1))
usr << text("\icon[] [] contains [] units of water left!", src, src.name, src.reagents.total_volume)
diff --git a/code/game/objects/structures/segway.dm b/code/game/objects/structures/segway.dm
deleted file mode 100644
index 4e781364af5..00000000000
--- a/code/game/objects/structures/segway.dm
+++ /dev/null
@@ -1,163 +0,0 @@
-/obj/structure/stool/bed/chair/segway
- name = "security segway"
- desc = "Gives the illusion of authority."
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "sec_seg_idle"
- anchored = 1
- density = 1
-
- var/health = 100
- var/delay = 3 //Move delay to simulate a speed
- var/allowMove = 1
- var/datum/global_iterator/space_move //Handling space movement (i.e. drift forever)
-
-/obj/structure/stool/bed/chair/segway/New()
- handle_rotation()
- space_move = new /datum/global_iterator/space_movement(null,0)
- return
-
-/obj/structure/stool/bed/chair/segway/user_buckle_mob(mob/living/M, mob/user)
- if(user.incapacitated()) //user can't move the mob on the janicart's turf if incapacitated
- return
- for(var/atom/movable/A in get_turf(src)) //we check for obstacles on the turf.
- if(A.density)
- if(A != src && A != M)
- return
- M.loc = loc //we move the mob on the janicart's turf before checking if we can buckle.
- ..()
-
-/obj/structure/stool/bed/chair/segway/relaymove(mob/user, direction)
- if(user.stat || user.stunned || user.weakened || user.paralysis)
- unbuckle_mob()
- icon_state = "sec_seg_idle"
- if(istype(user.l_hand, /obj/item/sec_seg_key) || istype(user.r_hand, /obj/item/sec_seg_key))
- if(!allowMove)
- return
- if(src.space_move.active())
- return
- allowMove = 0
- icon_state = "sec_seg_move"
- step(src, direction)
- update_mob()
- handle_rotation()
- if(istype(src.loc, /turf/space))
- src.space_move.start(list(src,direction))
- if(istype(src.loc, /turf/simulated))
- var/turf/simulated/T = src.loc
- if(T.wet == 2) //Lube! Fall off!
- playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
- buckled_mob.Stun(8)
- buckled_mob.Weaken(5)
- unbuckle_mob()
- step(src, dir)
- sleep(delay)
- allowMove = 1
- else
- user << "Requires key in hand to drive."
-
-/obj/structure/stool/bed/chair/segway/Move()
- . = ..()
-
-/obj/structure/stool/bed/chair/segway/Bump(var/atom/obstacle)
- if(istype(obstacle, /mob))
- step(obstacle, src.dir)
- else
- obstacle.Bumped(src)
- return
-
-/obj/structure/stool/bed/chair/segway/post_buckle_mob(mob/living/M)
- update_mob()
- add_fingerprint(M)
- M.pixel_x = 0
- M.pixel_y = 5
- return ..()
-
-/obj/structure/stool/bed/chair/segway/unbuckle_mob()
- var/mob/living/M = ..()
- if(M)
- M.pixel_x = 0
- M.pixel_y = 0
- return M
-
-/obj/structure/stool/bed/chair/segway/handle_rotation()
- if(dir == NORTH)
- layer = OBJ_LAYER
- else
- layer = FLY_LAYER
-
- update_mob()
-
-/obj/structure/stool/bed/chair/segway/proc/update_mob()
- if(buckled_mob)
- buckled_mob.dir = dir
-
-/obj/structure/stool/bed/chair/segway/bullet_act(var/obj/item/projectile/Proj)
- if(buckled_mob)
- return buckled_mob.bullet_act(Proj)
- else if(istype(Proj, /obj/item/projectile/beam))
- damage(Proj.damage)
-
-/obj/structure/stool/bed/chair/segway/proc/damage(amount)
- health -= amount
- if(health <= 0)
- if(buckled_mob)
- buckled_mob << "The [src.name] was destroyed!"
- qdel(src)
-
-/obj/item/sec_seg_key
- name = "security segway key"
- desc = "A key for a security segway. You feel the choice of keyring could be more professional."
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "keys" //Needs a proper sprite
- w_class = 1
-
-/datum/global_iterator/space_movement //moon_theme.mp3
- delay = 5
-
- process(var/obj/structure/stool/bed/chair/segway/seg as obj,direction)
- if(!step(seg, direction))
- src.stop()
-
-
-/obj/structure/stool/bed/chair/segway/snowmobile
- name = "red snowmobile"
- desc = "Wheeeeeeeeeeee."
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "snowmobile"
- anchored = 1
- density = 1
-
-/obj/structure/stool/bed/chair/segway/snowmobile/blue
- name = "blue snowmobile"
- desc = "Wheeeeeeeeeeee."
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "bluesnowmobile"
- anchored = 1
- density = 1
-
-/obj/structure/stool/bed/chair/segway/snowmobile/relaymove(mob/user, direction)
- if(user.stat || user.stunned || user.weakened || user.paralysis)
- unbuckle_mob()
- if(!allowMove)
- return
- if(src.space_move.active())
- return
- allowMove = 0
- step(src, direction)
- update_mob()
- handle_rotation()
- if(istype(src.loc, /turf/space))
- src.space_move.start(list(src,direction))
- if(istype(src.loc, /turf/simulated))
- damage(5)
- usr << "Your snowmobile takes damage from not being on snow!"
- var/turf/simulated/T = src.loc
- if(T && T.wet == 2) //Lube! Fall off!
- playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
- buckled_mob.Stun(8)
- buckled_mob.Weaken(5)
- unbuckle_mob()
- step(src, dir)
- sleep(delay)
- allowMove = 1
-
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 44ee7ef52db..3262ac5ece2 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -299,7 +299,7 @@
var/turf/tile = loc
loc.clean_blood()
for(var/obj/effect/E in tile)
- if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay))
+ if(is_cleanable(E))
qdel(E)
/obj/machinery/shower/process()
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index d759e143778..338727330f5 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -337,8 +337,12 @@
m_type = 2
if ("deathgasp")
- message = "[src] seizes up and falls limp, \his eyes dead and lifeless..."
- m_type = 1
+ if (species.name == "Machine")
+ message = "[src] gives one shrill beep before falling limp, screen quickly flashing blue before shutting off entirely."
+ m_type = 1
+ else
+ message = "[src] seizes up and falls limp, \his eyes dead and lifeless..."
+ m_type = 1
if ("giggle")
if(miming)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 99c3e2b2c08..0e1447b1311 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1135,7 +1135,7 @@ var/list/robot_verbs_default = list(
S.dirt = 0
for(var/A in tile)
if(istype(A, /obj/effect))
- if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
+ if(is_cleanable(A))
qdel(A)
else if(istype(A, /obj/item))
var/obj/item/cleaned_item = A
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 9e27818eb8b..c4170888d3d 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -60,6 +60,9 @@
consume(user)
return 1
+/obj/singularity/Process_Spacemove() //The singularity stops drifting for no man!
+ return 0
+
/obj/singularity/blob_act(severity)
return
@@ -268,8 +271,6 @@
step(src, movement_dir)
-/obj/singularity/Process_Spacemove() //The singularity stops drifting for no man!
- return 0
/obj/singularity/proc/check_turfs_in(var/direction = 0, var/step = 0)
if(!direction)
@@ -360,18 +361,13 @@
/obj/singularity/proc/toxmob()
var/toxrange = 10
- var/toxdamage = 4
var/radiation = 15
var/radiationmin = 3
- if (src.energy>200)
- toxdamage = round(((src.energy-150)/50)*4,1)
- radiation = round(((src.energy-150)/50)*5,1)
- radiationmin = round((radiation/5),1)//
+ if (energy>200)
+ radiation += round((energy-150)/10,1)
+ radiationmin = round((radiation/5),1)
for(var/mob/living/M in view(toxrange, src.loc))
M.apply_effect(rand(radiationmin,radiation), IRRADIATE)
- toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
- M.apply_effect(toxdamage, TOX)
- return
/obj/singularity/proc/combust_mobs()
@@ -382,6 +378,7 @@
C.IgniteMob()
return
+
/obj/singularity/proc/mezzer()
for(var/mob/living/carbon/M in oviewers(8, src))
if(istype(M, /mob/living/carbon/brain)) //Ignore brains
diff --git a/code/modules/research/designs/janitorial_designs.dm b/code/modules/research/designs/janitorial_designs.dm
index 76a469d04e6..8c575425ebe 100644
--- a/code/modules/research/designs/janitorial_designs.dm
+++ b/code/modules/research/designs/janitorial_designs.dm
@@ -11,6 +11,26 @@
build_path = /obj/item/weapon/mop/advanced
category = list("Janitorial")
+/datum/design/blutrash
+ name = "Trashbag of Holding"
+ desc = "An advanced trashabg with bluespace properties; capable of holding a plethora of garbage."
+ id = "blutrash"
+ req_tech = list("materials" = 5, "bluespace" = 3)
+ build_type = PROTOLATHE
+ materials = list(MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PLASMA = 1500)
+ build_path = /obj/item/weapon/storage/bag/trash/bluespace
+ category = list("Janitorial")
+
+/datum/design/buffer
+ name = "Floor Buffer Upgrade"
+ desc = "A floor buffer that can be attached to vehicular janicarts."
+ id = "buffer"
+ req_tech = list("materials" = 5, "engineering" = 3)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 3000, MAT_GLASS = 200)
+ build_path = /obj/item/janiupgrade
+ category = list("Janitorial")
+
/datum/design/holosign
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
diff --git a/code/modules/vehicle/train/trains/janicart.dm b/code/modules/vehicle/train/trains/janicart.dm
deleted file mode 100644
index a1fae332782..00000000000
--- a/code/modules/vehicle/train/trains/janicart.dm
+++ /dev/null
@@ -1,342 +0,0 @@
-/obj/vehicle/train/janitor/engine
- name = "janitor train tug"
- desc = "A ridable electric car designed for pulling janitor trolleys."
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "pussywagon" //mulebot icons until I get some proper icons
- on = 0
- powered = 1
- locked = 0
- layer = MOB_LAYER + 0.1
- load_item_visible = 1
- load_offset_x = 0
- load_offset_y = 7
-
- var/car_limit = 3 //how many cars an engine can pull before performance degrades
- active_engines = 1
- var/obj/item/weapon/key/janitor_train/key
- flags = OPENCONTAINER
- var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
- var/obj/item/weapon/storage/bag/trash/mybag = null
-
-/obj/item/weapon/key/janitor_train
- name = "key"
- desc = "A keyring with a small steel key, and a yellow fob reading \"Choo Choo!\"."
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "keys"
- w_class = 1
-
-/obj/vehicle/train/janitor/trolley
- name = "janitor train trolley"
- icon = 'icons/obj/janitor.dmi'
- icon_state = "trashcart"
- anchored = 0
- passenger_allowed = 0
- locked = 0
- load_item_visible = 1
- load_offset_x = 1
- load_offset_y = 7
-
- var/openTop = 0
- var/organs = 0
-//-------------------------------------------
-// Standard procs
-//-------------------------------------------
-/obj/vehicle/train/janitor/engine/New()
- ..()
- cell = new /obj/item/weapon/stock_parts/cell/high
- verbs -= /atom/movable/verb/pull
- key = new()
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
-
-/obj/vehicle/train/janitor/engine/Move()
- . = ..()
- handle_rotation()
- update_mob()
-
-/obj/vehicle/train/janitor/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(openTop)
- W.loc = src
- user.visible_message("[user] puts [W] in [src].","You put [W] in [src].")
- if(istype(W,/obj/item/weapon/organ))
- organs = 1
- update_icon()
- else
- user << "The top is closed!"
-
-/obj/vehicle/train/janitor/trolley/attack_hand(mob/user)
- openTop = !openTop
- user.visible_message("[user] [openTop ? "opens" : "closes"] the top of [src].","You [openTop ? "open" : "close"] the the top of [src].")
- update_icon()
- ..()
-
-/obj/vehicle/train/janitor/trolley/update_icon()
- if(openTop)
- if(organs)
- icon_state = "trashcartopengib"
- else
- icon_state = "trashcartopen"
- else
- if(organs)
- icon_state = "trashcartgib"
- else
- icon_state = "trashcart"
-
-/obj/vehicle/train/janitor/engine/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/weapon/key/janitor_train))
- if(!key)
- user.drop_item()
- key = W
- W.loc = src
- verbs += /obj/vehicle/train/janitor/engine/verb/remove_key
- return
- else if(istype(W, /obj/item/weapon/mop))
- if(reagents.total_volume >= 2)
- reagents.trans_to(W, 2)
- user << "You wet the mop in the pimpin' ride."
- playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1)
- if(reagents.total_volume < 1)
- user << "This pimpin' ride is out of water!"
- return
- else if(istype(W, /obj/item/weapon/storage/bag/trash))
- user << "You hook the trashbag onto the pimpin' ride."
- user.drop_item()
- W.loc = src
- mybag = W
- return
- ..()
-
-/obj/vehicle/train/janitor/engine/attack_hand(mob/user)
- if(mybag)
- mybag.loc = get_turf(user)
- user.put_in_hands(mybag)
- mybag = null
- else
- ..()
-
-/obj/vehicle/train/janitor/update_icon()
- if(open)
- //icon_state = "mulebot-hatch"
- icon_state = initial(icon_state)
- else
- icon_state = initial(icon_state)
-
-/obj/vehicle/train/janitor/engine/Emag(mob/user as mob)
- ..()
- flick("mulebot-emagged", src)
-
-/obj/vehicle/train/janitor/trolley/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
- return
-
-/obj/vehicle/train/janitor/engine/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
- ..()
- update_stats()
-
-/obj/vehicle/train/janitor/engine/remove_cell(var/mob/living/carbon/human/H)
- ..()
- update_stats()
-
-/obj/vehicle/train/janitor/engine/Bump(atom/Obstacle)
- var/obj/machinery/door/D = Obstacle
- var/mob/living/carbon/human/H = load
- if(istype(D) && istype(H))
- D.Bumped(H) //a little hacky, but hey, it works, and repects access rights
-
- ..()
-
-/obj/vehicle/train/janitor/trolley/Bump(atom/Obstacle)
- if(!lead)
- return //so people can't knock others over by pushing a trolley around
- ..()
-
-/obj/vehicle/train/janitor/engine/handle_rotation()
- if(dir == SOUTH)
- layer = FLY_LAYER
- else
- layer = OBJ_LAYER
-
-/obj/vehicle/train/janitor/engine/proc/update_mob()
- if(load)
- load.dir = dir
- switch(dir)
- if(SOUTH)
- load.pixel_x = 0
- load.pixel_y = 7
- if(WEST)
- load.pixel_x = 13
- load.pixel_y = 7
- if(NORTH)
- load.pixel_x = 0
- load.pixel_y = 4
- if(EAST)
- load.pixel_x = -13
- load.pixel_y = 7
-
-
-//-------------------------------------------
-// Train procs
-//-------------------------------------------
-/obj/vehicle/train/janitor/engine/turn_on()
- if(!key)
- return
- else
- ..()
- update_stats()
-
-/obj/vehicle/train/janitor/RunOver(var/mob/living/carbon/human/H)
- var/list/parts = list("head", "chest", "l_leg", "r_leg", "l_arm", "r_arm")
-
- H.apply_effects(5, 5)
- for(var/i = 0, i < rand(1,3), i++)
- H.apply_damage(rand(1,5), BRUTE, pick(parts))
-
-/obj/vehicle/train/janitor/trolley/RunOver(var/mob/living/carbon/human/H)
- ..()
- attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])")
-
-/obj/vehicle/train/janitor/engine/RunOver(var/mob/living/carbon/human/H)
- ..()
-
- if(is_train_head() && istype(load, /mob/living/carbon/human))
- var/mob/living/carbon/human/D = load
- D << "\red \b You ran over [H]!"
- visible_message("\red \The [src] ran over [H]!")
- attack_log += text("\[[time_stamp()]\] ran over [key_name(H)], driven by [key_name(D)]")
- msg_admin_attack("[key_name_admin(D)] ran over [key_name_admin(H)]")
- else
- attack_log += text("\[[time_stamp()]\] ran over [key_name(H)]")
-
-
-//-------------------------------------------
-// Interaction procs
-//-------------------------------------------
-/obj/vehicle/train/janitor/engine/relaymove(mob/user, direction)
- if(user != load)
- return 0
-
- if(is_train_head())
- if(direction == reverse_direction(dir))
- return 0
- if(Move(get_step(src, direction)))
- return 1
- return 0
- else
- return ..()
-
-
-/obj/vehicle/train/janitor/engine/examine(mob/user)
- if(!..(user, 1))
- return
-
- user << "\icon[src] This [name] contains [reagents.total_volume] unit\s of [reagents]!"
- if(mybag)
- user << "\A [mybag] is hanging on the [name]."
-
- user << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
-
-/obj/vehicle/train/janitor/engine/verb/check_power()
- set name = "Check power level"
- set category = "Object"
- set src in view(1)
-
- if(!istype(usr, /mob/living/carbon/human))
- return
-
- if(!cell)
- usr << "There is no power cell installed in [src]."
- return
-
- usr << "The power meter reads [round(cell.percent(), 0.01)]%"
-
-/obj/vehicle/train/janitor/engine/verb/start_engine()
- set name = "Start engine"
- set category = "Object"
- set src in view(1)
-
- if(!istype(usr, /mob/living/carbon/human))
- return
-
- if(on)
- usr << "The engine is already running."
- return
-
- turn_on()
- if (on)
- usr << "You start [src]'s engine."
- else
- if(cell.charge < charge_use)
- usr << "[src] is out of power."
- else
- usr << "[src]'s engine won't start."
-
-/obj/vehicle/train/janitor/engine/verb/stop_engine()
- set name = "Stop engine"
- set category = "Object"
- set src in view(1)
-
- if(!istype(usr, /mob/living/carbon/human))
- return
-
- if(!on)
- usr << "The engine is already stopped."
- return
-
- turn_off()
- if (!on)
- usr << "You stop [src]'s engine."
-
-/obj/vehicle/train/janitor/engine/verb/remove_key()
- set name = "Remove key"
- set category = "Object"
- set src in view(1)
-
- if(!istype(usr, /mob/living/carbon/human))
- return
-
- if(!key || (load && load != usr))
- return
-
- if(on)
- turn_off()
-
- key.loc = usr.loc
- if(!usr.get_active_hand())
- usr.put_in_hands(key)
- key = null
-
- verbs -= /obj/vehicle/train/janitor/engine/verb/remove_key
-
-//-------------------------------------------
-// Loading/unloading procs
-//-------------------------------------------
-/obj/vehicle/train/janitor/trolley/load(var/atom/movable/C)
- return 0
-
-/obj/vehicle/train/janitor/engine/load(var/atom/movable/C)
- if(!ismob(C))
- return 0
-
- return ..()
-
-
-//-------------------------------------------------------
-// Stat update procs
-//
-// Update the trains stats for speed calculations.
-// The longer the train, the slower it will go. car_limit
-// sets the max number of cars one engine can pull at
-// full speed. Adding more cars beyond this will slow the
-// train proportionate to the length of the train. Adding
-// more engines increases this limit by car_limit per
-// engine.
-//-------------------------------------------------------
-
-/obj/vehicle/train/janitor/engine/proc/update_move_delay()
- if(!is_train_head() || !on)
- move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind
- else
- move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains
- move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines)
- move_delay += config.run_speed //base reference speed
- move_delay *= 1.05
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index 38b93652f0e..119f3df0e37 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi
index 1d0d126006b..600ecc9f8a5 100644
Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ
diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi
index 9d92dd02a81..63515f5b2e5 100644
Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 76969b151fa..bd5f98f365e 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -813,7 +813,6 @@
#include "code\game\objects\structures\musician.dm"
#include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\safe.dm"
-#include "code\game\objects\structures\segway.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\spirit_board.dm"
#include "code\game\objects\structures\tables_racks.dm"
@@ -1848,7 +1847,6 @@
#include "code\modules\vehicle\vehicle.dm"
#include "code\modules\vehicle\train\train.dm"
#include "code\modules\vehicle\train\trains\ambulance.dm"
-#include "code\modules\vehicle\train\trains\janicart.dm"
#include "code\modules\vehicle\train\trains\cargo\cargo_train.dm"
#include "code\modules\vehicle\train\trains\cargo\cargo_subtypes\fourwheeler.dm"
#include "code\modules\vehicle\train\trains\cargo\cargo_subtypes\motorcycle.dm"