diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index fae8995287a..4aec305efd4 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -556,7 +556,7 @@
"akJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/range)
"akK" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/range)
"akL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/closet/crate,/obj/item/target/syndicate,/obj/item/target/syndicate,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/range)
-"akM" = (/obj/structure/stool/bed/roller,/obj/machinery/atmospherics/unary/vent_pump,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/security/medbay)
+"akM" = (/turf/space,/area/security/securearmoury)
"akN" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay)
"akO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay)
"akP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay)
@@ -5880,6 +5880,7 @@
"cjd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay2)
"cje" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
"cjf" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 4},/obj/machinery/power/apc{dir = 2; name = "Medbay APC"; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/medical/medbay2)
+"cjg" = (/obj/structure/stool/bed/roller,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/security/medbay)
"cjh" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
"cji" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
"cjj" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
@@ -6439,6 +6440,7 @@
"ctR" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit)
"ctS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel,/area/engine/break_room)
"ctT" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel,/area/engine/break_room)
+"ctU" = (/turf/simulated/wall/r_wall/coated,/area/maintenance/incinerator)
"ctV" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/table,/turf/simulated/floor/plasteel,/area/engine/break_room)
"ctW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/atmos/control)
"ctX" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel,/area/atmos/control)
@@ -8116,7 +8118,6 @@
"daf" = (/obj/structure/disposalpipe/segment,/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"dag" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"dah" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating,/area/maintenance/turbine)
-"dai" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/wall/r_wall,/area/maintenance/turbine)
"daj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "gas_turbine_interior"; locked = 1; name = "Turbine Interior Airlock"; req_access_txt = "32"},/turf/simulated/floor/engine,/area/maintenance/turbine)
"dak" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"dal" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-y"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -9072,7 +9073,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachacidqPackaclaiWaalacmbikbikbikbikbikbikaabaabaabdqRabLabLbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalaalbikbikbikbikbikbikbikbikbikaabactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikbikbikbikactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZanqdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikbikbikactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEakMbikbikbikbikbikbikactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikbikactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmarWdgydhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaaladBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikaabaalachacdacEadWadVadYadFaeaadZaebacEbikbikbikbikbikaesactaecaedadAaeeacXaefactaeiadtaejadtadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdhwdhwdgFbikbikdgmdhxdgydgydgydhydgmbikbikdgLdhwdhwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -9087,7 +9088,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyaiJamdafAafyaiKaeAamcaabaabaabaabadwagTaiOaigaiwaeEaatakoaiSagvaimaiUaiVdqQaiuaiYaihaijaiiajgajfahYaioaiyaixaiEaiDaiHaiGaiCaiLahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVydmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajtajtajtajtajtajuajuafdaiAagSafHaoIaofajGajGajNahIajEajFajGaiRaiPaiMaiNaipaiTajaajwaixaiEajhajiaiGajMajvajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmpdmodmrdmqdmtdmsdmsdmsdmvdmudmwbikbikbikacGacGacGafxafxaabaabbikajQbikaabaabafxafxacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikaeAajRajSajTafyajUajVajWakcajubSoclqajcajAajyajDajuahDahCajJajxajLahHajBakjakkaklakmaiFajFaiRakiakaaiRajIaiRahUalhajKakbajYakpakdakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmxdmodmzdmydmsdmAdmAdmAdmAdmAdmBbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajuakMakNakOakOakPajZajuaivainaiBaizakrahHakWakXakYakZalaalbajdaknakwakuakqaksaktakTalBakSalcakUalealdaiCalfajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmxdmodmzdmydmsdmAdmAdmAdmAdmAdmBbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajucjgakNakOakOakPajZajuaivainaiBaizakrahHakWakXakYakZalaalbajdaknakwakuakqaksaktakTalBakSalcakUalealdaiCalfajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmCdmodmEdmDdmAdmAdmAdmAdmGdmFdmwbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajualwalxalyalzakQakxajuampaiQakRaiZalEajzajBalFalGaklalHalIajFaliahPaljaljallalCalgalJajXakfakealMakeakhakgahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaXhdmddmddmddmldmddmddmmdmddmddmIbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAamdamdamdamdamealKamgamdajuamfamiamjamkamhamlajualNajHammalQamnakvajGamsamtaXNamvaYjajGamXamDamqanlamYdoHaocaoNdoIasvaiCateauydoNalkahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWalnakVamZanaanbancajuajuandaneajuajualmajualAalAaufalAauLalDajGajBajCanjajEajFajGdoOatgdoPaiRaiRaiRahUahUannalLdoSalOahUahAalPahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -9172,7 +9173,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKdnobUTbUTdnJcjMcjMcjMcjMcjMcjMcjMdnKdntdnCdnCdnCdnCdnLdnCdnCdntcnRcelcjMbikclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkchqcodcoccodciPciPciPckJcofclAclAcogcohceCbGycoicklcoocokcolcomcomcoqcojcnhcomcomcopclHcrCcklcrNcfdcupcxVcxVcxUcxVcxVcxNcEickDcowcoxcoyckDcozcuscoicoAcoAcoAcoAcoAcoDcoDcoDcoAcoAbikbikbikbikckPctdcoFckKcnCcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkdnMchobUTcqscjMbikbikbikbikbikcjMcqsdnldnAdnOdnCdnCdnCdnCdnPdnNcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcwqchqcodcpycpzcpAcpBcpCceDcpDclAclAclAcpEceCbGybGycpFcpFcpGcpHcpIcpIcrDcyFcrEcpJcpJcpKcpFcpGcpFcqQcfdcrLdbAbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKdoAcwNbUTcfQcejbikbikbikbikbikcejdnRdntdnSdnSdnAdnUdnTdnCdnVdntcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqyckQcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGceCbGybGycpFcqHcrFcqJcqKcqLcsPcpFcsUcqMcqKcqNcsVcqPcpFczecyWczgdbAdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcjKcjKcjKcjKcjKcjKdnWcrjcrjcrjcrjcrjdnQcwUcwUcwUcrjcrjcrjcrjcrjcrjcrjcwUcwUcwUdntdntdntdntdntdntdntcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcroclZcrqcrrcrscrtcrucmpcrwcrxcrycrzcrAceCbGybGycpFcuicsYcvocujcujcvpcpFcwicujcujcwjcujcwkcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikctUctUctUctUctUcjKdnWcrjcrjcrjcrjcrjdnQcwUcwUcwUcrjcrjcrjcrjcrjcrjcrjcwUcwUcwUdntdntdntdntdntdntdntcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcroclZcrqcrrcrscrtcrucmpcrwcrxcrycrzcrAceCbGybGycpFcuicsYcvocujcujcvpcpFcwicujcujcwjcujcwkcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaSecsdctvdnZctvdoBcsdcsecsfcsgcsgcshcsicspcskcslcsmcsncsocsrcsqcsqcsscsqcstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcmQcsFcnBcodcoeckIcoEcorcsKcsLcsMcsNcsObGybGycpFcwlcsQcsRcsScsTcwmcpFdehcsTcsWcsXdlFdqVcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDcoGcwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctvctvctvdoBcsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEctEctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNcqzctPctQcyqctSctTbEbctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhdqWcpFdqXcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLcrpdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKdqYcpFdqZcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWcoGbGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwcwAcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -9206,8 +9207,8 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTccSMcPacPacOjcMucTdcSEcTebikddfddgbikbikbikbikbikdlmbikbikbikdlodlnbikcSEcSEcTdcECcMHcECcCKcTgcEVcTgcCKcTgcEVcTgcCKcThcEVcTicCKaabcUkbikacGaabaabcYhcZscZucZtcZvcZhcZxcZwcZycYPcZAcZzcGvcdcbGycZBcQmbVicoAbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbwocZCczfcyJcZDbxXcyJbikbikbikbikcyJbxXbxXcNRcqecqecqfcqgcqebikaabaabaabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcMucTjcOZcPacPacTkcMucTlcTmcSEbikddcaacbikbikaabaabaabaabaabbikbikaacddcbikcSEcTncTocECcTpcECcCKcTqcTrcTscCKcTtcTucTvcCKcTwcTxcTycCKaabcUkbikacGbikaabcZGcZFcZucZHcZJcZIcZLcZKcYicZMcQmbVicQmcZNbVicZOcQmcozcoAcoDcoDcoDazybikaabbikbikbikbikbikbikbikbikbikbwocZPcyJcyJcHxbxXcyJcyJcxHcxHcyJcyJbxXcZQczfcqecQDcrfcrgcqebikbikaabaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaccMucMucMucMucMucMucMucECcSDcSEbikddcaaccSQaabaabdlqdlpdlraabcTzbikaacddcbikcSEcSDcECcECcMHcECcCKcTAcTBcTAcCKcTCcTDcTCcCKcTEcTFcTEcCKaabcUkbikacGbikbikcYhcZRcZTcZScZucZUcZWcZVcYicZXcZZcZYdaacAhbGycGvcGvdabdaddacbGydaeazybikaabbikcxHcxHcxHbwobwobwobwobwobwodafcyKcyJdagbxXbxXcyJbxXbxXbxXbxXcYqbxXcPAcqecrZcsacsbcqeaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaacaacaabaabaabacGacGcECcECcTGcSEbikddfddgbikbikaabdlscTHdltaabbikbikdlodlnbikcSEcTJcECcECcMHcECcCKcTAcTKcTAcCKcTCcTLcTCcCKcTEcTMcTEcCKaabcUkbikacGbikbikcYhcYhcYhdahcYhdaidajdaicYicZXdakbGycGzdalcFicHrcGvdamcoAcoDcoDcoDdanaabaabbikcxHdaodapcyJbxXdaqdarcNRcyJdasbxXcyJdatbxXbxXdaubxXbwobwobwocxHcxHbwocqectrctscttcqeaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaabaabbikbikaabaabacGcECcECcSDcSEbikddcaacbikcTNaabdlvdludlwaabaabcSQaacddcbikcSEcSDcECcECcMHcECcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKaabcUkbikaqZbikbikbikbikbikdavcYhdawdaydaxcYibGydazbGybGydaAdaBcGqdaDdaCcoAbikbikbikbikbikaabbikcxHdaEdaFdaubxXcQobxXbxXdaucZobxXcyJcyJcyJcyJcyJbxXbwoaabbikbikbikaabcuzcuzcuAcuzcuzaabaabczraabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaacaacaabaabaabacGacGcECcECcTGcSEbikddfddgbikbikaabdlscTHdltaabbikbikdlodlnbikcSEcTJcECcECcMHcECcCKcTAcTKcTAcCKcTCcTLcTCcCKcTEcTMcTEcCKaabcUkbikacGbikbikcYhcYhcYhdahcrBcrkdajcrkcrBcZXdakbGycGzdalcFicHrcGvdamcoAcoDcoDcoDdanaabaabbikcxHdaodapcyJbxXdaqdarcNRcyJdasbxXcyJdatbxXbxXdaubxXbwobwobwocxHcxHbwocqectrctscttcqeaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaabaabbikbikaabaabacGcECcECcSDcSEbikddcaacbikcTNaabdlvdludlwaabaabcSQaacddcbikcSEcSDcECcECcMHcECcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKcCKaabcUkbikaqZbikbikbikbikbikdavcrBdawdaydaxcrBbGydazbGybGydaAdaBcGqdaDdaCcoAbikbikbikbikbikaabbikcxHdaEdaFdaubxXcQobxXbxXdaucZobxXcyJcyJcyJcyJcyJbxXbwoaabbikbikbikaabcuzcuzcuAcuzcuzaabaabczraabaabcZEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcECcTncTocSEbikddcaacbikbikaabaabaabaabaabbikbikaacddcbikcSEcTlcTmcECcUscECcECcECcECcUvcTScTScTScTScTScTScTScTScTScTScUwbikacGaabaabaabaabaabdaGcrBcrkdaHcrkcrBcoAdaIcFicFidaJdaLdaKcoAcoAcoAbikbikbikbikbikaabbikcxHdaodaMcyJcNRbxXbxXdaNcyJdaObxXbxXbxXbxXbxXbxXbxXbwoaabbikbikbikaabbikcuzcvEcuzbikaabbikaabbikbikaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikaabcECcTdcSEcTPbikddfddgbikbikbikaabbikbikbikbikbikdlodlnbikcSEcSEcTdcECddhddjddicMHddkcUwbikbikbikbikbikbikbikbikbikbikbikbikacGaabaabaabaabaabdaGcrBdaPdaRdaQdaSaabcoAcoAcoDdaTcoDcoAcoAbikaabbikbikbikbikbikaabaabcxHcxHcxHbwobwobwobxXcyJbwodaUbwobwocNRbFeczfbzNczMbwoaabbikbikbikaabbikcuzcwMcuzbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcECcTXcTYdddaabddcaaccSQbikbikcSQbikbikbikbikcSQaacddcbikddecUacUbcECddlcECcECcECcECcECcECacGacGacGaqZacGacGacGacGacGacGacGacGaahbikbikbikbikdaGcrBcrBdaVcrBcrBbikaabbikbikdaWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbwodaFdaXbwocGxaabbwobwocxHcxHczMbwobikaabbikbikbikaabbikbikcxZbikbikaabbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
diff --git a/code/controllers/Processes/timer.dm b/code/controllers/Processes/timer.dm
index de68a01ef51..711412608ba 100644
--- a/code/controllers/Processes/timer.dm
+++ b/code/controllers/Processes/timer.dm
@@ -62,7 +62,10 @@ var/global/datum/controller/process/timer/timer_master
event.thingToCall = thingToCall
event.procToCall = procToCall
event.timeToRun = world.time + wait
- event.hash = jointext(args, null)
+ var/hashlist = args.Copy()
+
+ hashlist[1] = "[thingToCall](\ref[thingToCall])"
+ event.hash = jointext(hashlist, null)
if(args.len > 4)
event.argList = args.Copy(5)
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 4f097506955..485dd6854b0 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -79,17 +79,17 @@
var/mob/living/carbon/human/zealot_master = null
/datum/mind/proc/transfer_to(mob/living/new_character)
+ var/datum/atom_hud/antag/hud_to_transfer = antag_hud //we need this because leave_hud() will clear this list
if(!istype(new_character))
log_to_dd("## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn")
if(current) //remove ourself from our old body's mind variable
current.mind = null
+ leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it
nanomanager.user_transferred(current, new_character)
if(new_character.mind) //remove any mind currently in our new body's mind variable
new_character.mind.current = null
- var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
- leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it
current = new_character //link ourself to our new body
new_character.mind = src //and link our new body to ourself
transfer_antag_huds(hud_to_transfer) //inherit the antag HUD
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index d812296b916..9fb2402f889 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -224,7 +224,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
var/list/absorbed_dna = list()
var/list/absorbed_languages = list()
var/list/protected_dna = list() //DNA that is not lost when capacity is otherwise full.
- var/dna_max = 4 //How many extra DNA strands the changeling can store for transformation.
+ var/dna_max = 5 //How many total DNA strands the changeling can store for transformation.
var/absorbedcount = 1 //Would require at least 1 sample to take on the form of a human
var/chem_charges = 20
var/chem_recharge_rate = 0.5
@@ -253,7 +253,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
changelingID = "[honorific] [changelingID]"
else
changelingID = "[honorific] [rand(1,999)]"
- absorbed_dna.len = dna_max
/datum/changeling/proc/regenerate()
chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage)
@@ -265,14 +264,35 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
if(dna_owner == DNA.real_name)
return DNA
-/datum/changeling/proc/has_dna(var/datum/dna/tDNA)
+/datum/changeling/proc/find_dna(var/datum/dna/tDNA)
for(var/datum/dna/D in (absorbed_dna + protected_dna))
if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species == D.species)
- return 1
+ return D
+ return null
+
+/datum/changeling/proc/has_dna(var/datum/dna/tDNA)
+ if(find_dna(tDNA))
+ return 1
return 0
+// A changeling's DNA is "stale" if their current form's DNA is the oldest DNA in a full list
+/datum/changeling/proc/using_stale_dna(var/mob/living/carbon/user)
+ var/current_dna = find_dna(user.dna)
+ if(absorbed_dna.len < dna_max)
+ return 0 // Still more room for DNA
+ if(!current_dna || !(current_dna in absorbed_dna))
+ return 1 // Oops, our current DNA was somehow not absorbed; force a transformation
+ if(absorbed_dna[1] == current_dna)
+ return 1 // Oldest DNA is the current DNA
+ return 0
+
+/datum/changeling/proc/trim_dna()
+ absorbed_dna -= null
+ if(absorbed_dna.len > dna_max)
+ absorbed_dna.Cut(1, (absorbed_dna.len - dna_max) + 1)
+
/datum/changeling/proc/can_absorb_dna(var/mob/living/carbon/user, var/mob/living/carbon/target)
- if(absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it.
+ if(using_stale_dna(user))//If our current DNA is the stalest, we gotta ditch it.
to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.")
return
diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm
index 8e8e824d85e..6d03a864692 100644
--- a/code/game/gamemodes/changeling/changeling_power.dm
+++ b/code/game/gamemodes/changeling/changeling_power.dm
@@ -73,12 +73,6 @@
return 0
return 1
-/obj/effect/proc_holder/changeling/proc/transfer_changeling_powers(var/mob/living/carbon/user, var/mob/living/carbon/target)
- if(istype(target, /mob/living/carbon)) // so we don't runtime, I don't even know why it's necessary as it needs a grab
- var/datum/changeling/c = user.mind.changeling
- var/datum/changeling/t = target.mind.changeling
- c.purchasedpowers = t.purchasedpowers
-
//used in /mob/Stat()
/obj/effect/proc_holder/changeling/proc/can_be_used_by(var/mob/user)
if(!ishuman(user))
diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm
index 7efcb3f09a1..43f08584823 100644
--- a/code/game/gamemodes/changeling/evolution_menu.dm
+++ b/code/game/gamemodes/changeling/evolution_menu.dm
@@ -376,6 +376,7 @@ var/list/sting_paths
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
mind.changeling.absorbed_dna |= C.dna
+ mind.changeling.trim_dna()
return 1
//Used to dump the languages from the changeling datum into the actual mob.
diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm
index 6dbcc48dc2f..3800597709a 100644
--- a/code/game/gamemodes/changeling/powers/absorb.dm
+++ b/code/game/gamemodes/changeling/powers/absorb.dm
@@ -86,8 +86,6 @@
//Absorbs the target DNA.
/datum/changeling/proc/absorb_dna(mob/living/carbon/T, var/mob/user)
- if(absorbed_dna.len)
- absorbed_dna.Cut(1,2)
T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set.
var/datum/dna/new_dna = T.dna.Clone()
//Steal all of their languages!
@@ -104,4 +102,5 @@
if(E.target_real_name == new_dna.real_name)
protected_dna |= new_dna
return
- absorbed_dna |= new_dna
\ No newline at end of file
+ absorbed_dna |= new_dna
+ trim_dna()
diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm
index 03ea7d14894..dc7454ff7eb 100644
--- a/code/game/gamemodes/changeling/powers/fakedeath.dm
+++ b/code/game/gamemodes/changeling/powers/fakedeath.dm
@@ -18,7 +18,7 @@
if(user.stat != DEAD)
user.emote("deathgasp")
- user.timeofdeath = worldtime2text()
+ user.timeofdeath = world.time
spawn(800)
if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers)
@@ -33,4 +33,4 @@
return
if(!user.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death
return
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm
index 1032f84635f..0976f0da36d 100644
--- a/code/game/gamemodes/changeling/powers/hivemind.dm
+++ b/code/game/gamemodes/changeling/powers/hivemind.dm
@@ -62,7 +62,7 @@ var/list/datum/dna/hivemind_bank = list()
if(!..())
return
var/datum/changeling/changeling = user.mind.changeling
- if(changeling.absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it.
+ if(changeling.using_stale_dna(user))//If our current DNA is the stalest, we gotta ditch it.
to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.")
return
return 1
@@ -84,8 +84,6 @@ var/list/datum/dna/hivemind_bank = list()
if(!chosen_dna)
return
- if(changeling.absorbed_dna.len)
- changeling.absorbed_dna.Cut(1,2)
changeling.store_dna(chosen_dna, user)
to_chat(user, "We absorb the DNA of [S] from the air.")
feedback_add_details("changeling_powers","HD")
diff --git a/code/game/gamemodes/changeling/powers/swap_form.dm b/code/game/gamemodes/changeling/powers/swap_form.dm
index 188c5fb437b..ce8bda64d03 100644
--- a/code/game/gamemodes/changeling/powers/swap_form.dm
+++ b/code/game/gamemodes/changeling/powers/swap_form.dm
@@ -38,10 +38,12 @@
to_chat(target, "[user] tightens their grip as a painful sensation invades your body.")
+ changeling.absorbed_dna -= changeling.find_dna(user.dna)
+ changeling.protected_dna -= changeling.find_dna(user.dna)
+ changeling.absorbedcount -= 1
if(!changeling.has_dna(target.dna))
changeling.absorb_dna(target, user)
- changeling.protected_dna -= user.dna
- changeling.absorbed_dna -= user.dna
+ changeling.trim_dna()
var/mob/dead/observer/ghost = target.ghostize(0)
user.mind.transfer_to(target)
@@ -52,6 +54,6 @@
user.Paralyse(2)
target.add_language("Changeling")
user.remove_language("Changeling")
- transfer_changeling_powers(user, target)
to_chat(target, "Our genes cry out as we swap our [user] form for [target].")
+ return 1
diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm
index ac3bfdf7c1e..9bf6be0bbdc 100644
--- a/code/game/gamemodes/miniantags/morph/morph.dm
+++ b/code/game/gamemodes/miniantags/morph/morph.dm
@@ -124,9 +124,6 @@
morph_time = world.time + MORPH_COOLDOWN
-/mob/living/simple_animal/hostile/morph/handle_state_icons()
- return
-
/mob/living/simple_animal/hostile/morph/death(gibbed)
if(morphed)
visible_message("[src] twists and dissolves into a pile of green flesh!", \
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index fd5dc873739..97a976ddc41 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -138,7 +138,10 @@
var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras
if(!C)
return 1
-
+
+ if(!can_access_camera(C))
+ return 1 // No href exploits for you.
+
switch_to_camera(usr, C)
else if(href_list["reset"])
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index f2eae92071d..7131dc0ac55 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -375,6 +375,13 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user as mob)
..(user)
+
+/obj/machinery/door/airlock/autoclose()
+ autoclose_timer = 0
+ if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose)
+ close()
+ return
+
/obj/machinery/door/airlock/proc/isElectrified()
if(src.electrified_until != 0)
return 1
@@ -1089,4 +1096,4 @@ About the new airlock wires panel:
unlock()
electrified_until = 0
open()
- safe = TRUE
\ No newline at end of file
+ safe = TRUE
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 18879cfdc9b..735ca761a8e 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -18,6 +18,7 @@
var/p_open = 0
var/operating = 0
var/autoclose = 0
+ var/autoclose_timer
var/glass = 0
var/normalspeed = 1
var/heat_proof = 0 // For glass airlocks/opacity firedoors
@@ -58,6 +59,9 @@
air_update_turf(1)
update_freelook_sight()
airlocks -= src
+ if(autoclose_timer)
+ deltimer(autoclose_timer)
+ autoclose_timer = 0
return ..()
/obj/machinery/door/Bumped(atom/AM)
@@ -220,12 +224,9 @@
air_update_turf(1)
update_freelook_sight()
- if(autoclose && normalspeed)
- spawn(150)
- autoclose()
- if(autoclose && !normalspeed)
- spawn(5)
- autoclose()
+ // The `addtimer` system has the advantage of being cancelable
+ if(autoclose)
+ autoclose_timer = addtimer(src, "autoclose", normalspeed ? 150 : 5, unique = 1)
return 1
@@ -236,6 +237,10 @@
return
operating = 1
+ if(autoclose_timer)
+ deltimer(autoclose_timer)
+ autoclose_timer = 0
+
do_animate("closing")
src.layer = closed_layer
sleep(5)
@@ -269,8 +274,8 @@
return 1
/obj/machinery/door/proc/autoclose()
- var/obj/machinery/door/airlock/A = src
- if(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose)
+ autoclose_timer = 0
+ if(!qdeleted(src) && !density && !operating && autoclose)
close()
return
@@ -308,4 +313,4 @@
/obj/machinery/door/proc/disable_lockdown()
if(!stat) //Opens only powered doors.
- open() //Open everything!
\ No newline at end of file
+ open() //Open everything!
diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm
index de954cb3c75..645259b1fda 100644
--- a/code/modules/mob/living/carbon/alien/death.dm
+++ b/code/modules/mob/living/carbon/alien/death.dm
@@ -54,7 +54,7 @@
update_canmove()
update_icons()
- timeofdeath = worldtime2text()
- if(mind) mind.store_memory("Time of death: [timeofdeath]", 0)
+ timeofdeath = world.time
+ if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
return ..(gibbed)
diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm
index 03eeeaa5c81..6db93c4ddd2 100644
--- a/code/modules/mob/living/carbon/alien/larva/death.dm
+++ b/code/modules/mob/living/carbon/alien/larva/death.dm
@@ -8,8 +8,8 @@
visible_message("[src] lets out a waning high-pitched cry.")
update_canmove()
- timeofdeath = worldtime2text()
- if(mind) mind.store_memory("Time of death: [timeofdeath]", 0)
+ timeofdeath = world.time
+ if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
living_mob_list -= src
return ..(gibbed)
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index 9e6a1d08a42..255f3c03897 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -10,8 +10,8 @@
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
- timeofdeath = worldtime2text()
- if(mind) mind.store_memory("Time of death: [timeofdeath]", 0) //mind. ?
+ timeofdeath = world.time
+ if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0) //mind. ?
return ..(gibbed)
@@ -39,4 +39,4 @@
qdel(loc)//Gets rid of the brain item
spawn(15)
if(animation) qdel(animation)
- if(src) qdel(src)
\ No newline at end of file
+ if(src) qdel(src)
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 384f581cce3..c1d8ec9a187 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -128,10 +128,10 @@
if(!gibbed)
update_canmove()
- timeofdeath = worldtime2text()
+ timeofdeath = world.time
med_hud_set_health()
med_hud_set_status()
- if(mind) mind.store_memory("Time of death: [timeofdeath]", 0)
+ if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
if(ticker && ticker.mode)
// log_to_dd("k")
sql_report_death(src)
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 4d2cb361b41..1c977296a8a 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -39,7 +39,7 @@
if(istype(loc, /obj/item/device/aicard))
loc.icon_state = "aicard-404"
- timeofdeath = worldtime2text()
- if(mind) mind.store_memory("Time of death: [timeofdeath]", 0)
+ timeofdeath = world.time
+ if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
return ..(gibbed)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index f51325f546b..6943105132b 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -204,7 +204,7 @@
to_chat(user, "\t Key: Electronics/Brute")
to_chat(user, "\t Damage Specifics: [BU] - [BR]")
if(M.timeofdeath && M.stat == DEAD)
- to_chat(user, "Time of Disable: [M.timeofdeath]")
+ to_chat(user, "Time of Disable: [worldtime2text(M.timeofdeath)]")
var/mob/living/silicon/robot/H = M
var/list/damaged = H.get_damaged_components(1,1,1)
to_chat(user, "Localized Damage:")
diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm
index b0dc5062a95..4b7d0a04a27 100644
--- a/code/modules/mob/living/silicon/robot/death.dm
+++ b/code/modules/mob/living/silicon/robot/death.dm
@@ -63,9 +63,9 @@
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
update_icons()
- timeofdeath = worldtime2text()
- if(mind) mind.store_memory("Time of death: [timeofdeath]", 0)
+ timeofdeath = world.time
+ if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
sql_report_cyborg_death(src)
- return ..(gibbed)
\ No newline at end of file
+ return ..(gibbed)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 3cc10b39d42..bc72ba66cde 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -132,7 +132,6 @@
..()
icon_living = icon_state
icon_dead = icon_state
- icon_resting = icon_state
access_card = new /obj/item/weapon/card/id(src)
//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first.
access_card.access += access_robotics
@@ -852,8 +851,6 @@ Pass a positive integer as an argument to override a bot's default speed.
ejectpai(usr)
update_controls()
-/mob/living/simple_animal/bot/handle_state_icons()
-
/mob/living/simple_animal/bot/proc/update_icon()
icon_state = "[initial(icon_state)][on]"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 816ec1979a9..cf710f716dd 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -122,20 +122,21 @@
if(1 to 5) healths.icon_state = "health6"
if(0) healths.icon_state = "health7"
-/mob/living/simple_animal/Life()
- . = ..()
- handle_state_icons()
-
/mob/living/simple_animal/proc/process_ai()
handle_automated_movement()
handle_automated_action()
handle_automated_speech()
-/mob/living/simple_animal/proc/handle_state_icons()
- if(resting && icon_resting && stat != DEAD)
- icon_state = icon_resting
- else if(stat != DEAD)
- icon_state = icon_living
+/mob/living/simple_animal/lay_down()
+ ..()
+ handle_resting_state_icons()
+
+/mob/living/simple_animal/proc/handle_resting_state_icons()
+ if(icon_resting)
+ if(resting && stat != DEAD)
+ icon_state = icon_resting
+ else if(stat != DEAD)
+ icon_state = icon_living
/mob/living/simple_animal/handle_regular_status_updates()
if(..()) //alive
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index eec1b92e63d..9c880666f4e 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -82,11 +82,12 @@
// Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget().
// Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this.
/mob/proc/update_interface()
- if(client)
- if(winget(src, "mainwindow.hotkey_toggle", "is-checked") == "true")
- update_hotkey_mode()
- else
- update_normal_mode()
+ spawn() // Spawn off so winget/winset don't delay callers.
+ if(client)
+ if(winget(src, "mainwindow.hotkey_toggle", "is-checked") == "true")
+ update_hotkey_mode()
+ else
+ update_normal_mode()
/mob/proc/update_hotkey_mode()
var/hotkeyname = "hotkeymode"
@@ -94,7 +95,7 @@
var/hotkeys = client.hotkeylist[client.hotkeytype]
hotkeyname = hotkeys[client.hotkeyon ? "on" : "off"]
client.hotkeyon = 1
- winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0")
+ winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0")
/mob/proc/update_normal_mode()
var/hotkeyname = "macro"
@@ -102,4 +103,4 @@
var/hotkeys = client.hotkeylist[client.hotkeytype]//get the list containing the hotkey names
hotkeyname = hotkeys[client.hotkeyon ? "on" : "off"]//get the name of the hotkey, to not clutter winset() to much
client.hotkeyon = 0
- winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
+ winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm
index 837d0c439f5..558af083eb8 100644
--- a/code/modules/pda/utilities.dm
+++ b/code/modules/pda/utilities.dm
@@ -49,7 +49,7 @@
user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1)
if(C.timeofdeath && (C.stat == DEAD || (C.status_flags & FAKEDEATH)))
- user.show_message("\t Time of Death: [C.timeofdeath]")
+ user.show_message("\t Time of Death: [worldtime2text(C.timeofdeath)]")
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
var/list/damaged = H.get_damaged_organs(1,1)
@@ -162,7 +162,7 @@
// JMO 20140705: Makes scanned document show up properly in the notes. Not pretty for formatted documents,
// as this will clobber the HTML, but at least it lets you scan a document. You can restore the original
// notes by editing the note again. (Was going to allow you to edit, but scanned documents are too long.)
- var/raw_scan = sanitize_simple(P.info, list("\t" = "", "ÿ" = ""))
+ var/raw_scan = sanitize_simple(P.info, list("\t" = "", "ÿ" = ""))
var/formatted_scan = ""
// Scrub out the tags (replacing a few formatting ones along the way)
// Find the beginning and end of the first tag.
diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index 699b9ed1ee3..3e2d938eafa 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -412,8 +412,8 @@ This function completely restores a damaged organ to perfect condition.
last_dam = brute_dam + burn_dam
if(germ_level)
return 1
- if(!wound_cleanup_timer)
- wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), 1, wounds)
+ if(!wound_cleanup_timer && wounds.len)
+ wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), unique = 1, wounds)
if(update_icon())
owner.UpdateDamageIcon(1)
diff --git a/html/changelogs/AutoChangeLog-pr-5530.yml b/html/changelogs/AutoChangeLog-pr-5530.yml
new file mode 100644
index 00000000000..1288b54c3dc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5530.yml
@@ -0,0 +1,6 @@
+author: FreeStylaLT
+delete-after: True
+changes:
+ - rscadd: "Added additional coating to Turbine room."
+ - bugfix: "Fixed leftover vent in Brig Physician's office"
+ - bugfix: "Fixed missing coated rwalls in Incinerator"
diff --git a/html/changelogs/AutoChangeLog-pr-5545.yml b/html/changelogs/AutoChangeLog-pr-5545.yml
new file mode 100644
index 00000000000..30ab94f9517
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5545.yml
@@ -0,0 +1,4 @@
+author: Krausus
+delete-after: True
+changes:
+ - bugfix: "Changelings' Swap Form ability now actually deducts its cost upon use, and shouldn't arbitrarily fail to work properly."