diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 1c0163e3b43..eaf7fb4d49d 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -6683,6 +6683,7 @@
"cyA" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology)
"cyB" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology)
"cyC" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/virology)
+"cyD" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"cyE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cyH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cyI" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/camera{c_tag = "Virology Isolation 3"; dir = 2; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6784,7 +6785,6 @@
"cAP" = (/obj/structure/sink{pixel_y = 30},/turf/simulated/floor,/area/hallway/secondary/construction{name = "\improper Garden"})
"cAQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"cAR" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"cAS" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/security/checkpoint2)
"cAT" = (/turf/simulated/floor,/area/hallway/secondary/construction{name = "\improper Garden"})
"cAU" = (/obj/structure/table/glass,/obj/item/seeds/appleseed,/obj/item/seeds/bananaseed,/obj/item/seeds/cocoapodseed,/obj/item/seeds/grapeseed,/obj/item/seeds/orangeseed,/obj/item/seeds/sugarcaneseed,/obj/item/seeds/wheatseed,/obj/item/seeds/watermelonseed,/obj/item/seeds/towermycelium,/turf/simulated/floor,/area/hallway/secondary/construction{name = "\improper Garden"})
"cAW" = (/obj/structure/closet,/turf/simulated/floor{icon_state = "floorgrime"},/area/assembly/assembly_line)
@@ -8101,9 +8101,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEaAyaDtaDuazEaAyaDvaDuazEaABaDwaABaABaABaABaABayYaABayYcwjcwkayYayYaABaMnaABcwmaabcwmaABaItaIraABaIPcxEaABaHGaCraABaygaAHaAHaAuaAuaAuaAuaAuaAuaAuaAuaAuaCJaCJaCKaDDaDEaISaDGaDHaDIaDJaDKaDLaDLaDLaDLaDMcmMaDNaDOaDPaDLaDLaDQaDQaDRaDSaDTaDUaDVaDWaCWaDXaDYaDYazZaBbaCgaDZaEaaEbaCgaAxaEdaDeaDecxDaGAaBdaFgaFhaFhaGsaAxaQtazKazBazBazBazBazBazKaEmaDnazKaaaaaaaMUaJeaLHaLHaJYdcmaLqaNaaWacZWaAraMUaOMaAraMUcZYaLHaMUcZZaLHaMUdabdaadacaNodadaNodafdaedahdagdajdaidakaIQaIRaIRaacaacaIRaIRaIRaIRaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaEwaExaEwaEyaEwaEzaEwaEAaEBaECaECaECaECaEDaABayYaABcxHcxGcxIayYcyScwgaMnaABaABaABaABaABaABcwgaABayYcxIaDwayYayYaCJcyTcyUaEKaEJaEJaEJaEJaELaEJaEJaEMaENaEKaEOaEPaEPaEPaEPaEPaEPaEPaEQaERaERaERaERaESaETaERaEUaERaEVaESaERaERaERaERaEWaEXaEYaEZaFaaCdaFbaFcaDYaFdaBbaCgaFeaMBaCYaCgaAxaFfaHCaHCaHIaBcaBdaHJaITaITaPhaAxdamaFmazBazBazBazBazBaFnaFoaFpazKaaaaaaaMUaLHaLHaLHaLHaLHaLHdacaNoaNoaNoaNoaNoaNoaNoaEcaLHaLHaLHaLHaHNaLHaLHaHKaLHdaodandaqdapdaraOCaOCaOCdasaIQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaFyaFzaFAaFBaFCaFDaFEaFFaFDaFGaFHaFDaFDaFIaABayYaABcyVayYayYcyWczLaABaPyaKxayYayYayYayYayYayYcwgczNayYaABaRkaRkaAHczOaAHaFPaACaAwaAwaAwaAEaAwaAwaAwaAFaFPaFUaFVaFVaFVaFVaFVaFVaFVaCJaERaFWaFXaFYaFZaGaaGbaGcaGdaGeaGfaGgaFXaGhaERaGiavVaGjaxzaGkaCWaGlaGmaGmaGnaGoaGpcuNaGraGraGuaGtaDgaGuaGtaGtaGvaGwaGxaAxaAxcwlaAxaEgaBkazBazBazBazBazBaBkazzazzazzaMUaMUaMUaArdcmdcmaxBaMUaMUaHKdcmaMUdaudcmaMUaxBaMUaHKaJedcmaMUaxBaMUaLHaJeaHKaLHaLIaIQdaydaedaAdazdaBdaedaCaIQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaBmaGSaBmaGTaFzaFzaGUaBmaGSaBmaGVaGWaGXaGYaABayYcwgcwgaABaABaABczPczPaABaxFaABczPczPczPczPaCJaAHaAHaAHaAHaAHaAHaAHczOczQaFPaaaaabaaaaabaaaaabaaaaabaaaaFPaFUaFVaHiaHjaHkaHlaHmaFVaCJaERaHnaHnaBQaHpaHqaHraHsaHraHtaHuaBYaHnaHnaERaGiavVaHwaxzaGkaCWaCXazXazYazZaBbaHxaHyaHzaHAaHBaHBcxAaHDaHBaHDdaDdaFdaEaHHdaldbddaGazzaBkazBazBazBazBazBaBkaMUaDjaLHdaIdaJdcmaMUdcmaDjaLHaMUaDjaHKaMUaMjaLHaMUaPzaLHdcmdaPdaOaMUbfwaLHdcmaxBaxBaHKaxBaCxaIQdaUdaedaWbbYdaWdaedaXaIQaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaBmaGSaBmaGTaFzaFzaGUaBmaGSaBmaGVaGWaGXaGYaABayYcwgcwgaABaABaABczPczPczPaxFczPczPczPczPczPaCJaAHaAHaAHaAHaAHaAHaAHczOczQaFPaaaaabaaaaabaaaaabaaaaabaaaaFPaFUaFVaHiaHjaHkaHlaHmaFVaCJaERaHnaHnaBQaHpaHqaHraHsaHraHtaHuaBYaHnaHnaERaGiavVaHwaxzaGkaCWaCXazXazYazZaBbaHxaHyaHzaHAaHBaHBcxAaHDaHBaHDdaDdaFdaEaHHdaldbddaGazzaBkazBazBazBazBazBaBkaMUaDjaLHdaIdaJdcmaMUdcmaDjaLHaMUaDjaHKaMUaMjaLHaMUaPzaLHdcmdaPdaOaMUbfwaLHdcmaxBaxBaHKaxBaCxaIQdaUdaedaWbbYdaWdaedaXaIQaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIfazEaDkaCzaBmaIiaIjaIkaIlaBmaCzaDlaAvazEaIoaIpaABayYayYayYayYayYayYczPczRczTczScAOczUcAPczRczPbgbaIwaEJaEJaEJaEJaEJaEJcAQcARaFPaabaIAaIAaIAaIAaIAaIAaIAaabaFPaFUaFVaIBaICaIDaIEaIBaFVaCJaERaERaERaERaIFaIGaFXaIHaFXaIGaIIaERaERaERaERaGiavVaIJaxzaGkaCWaCeazXazYazZaCfaIKaILaILaILaILaILaILaILaIMaILaINaINaINaINaINaIOaMUazzaBkazBazBazBazBazBaBkaMUaMUaLHdaYdaJdcmdaZaMUaLHaLHaMUaLHaHKdcmaLHaLHaMUaLHaLHdcmaHKaKaaMUaLHaLHdcmdbaaLHaHKaLHdbcdbbdbbaIQaIQaIQaIQaIQaIQaIQaIRaIRaIRaIRaIRaabaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaGSaBmaBmaBmaBmaBmaBmaGSaAvaJnazEaJoaJpaJqaJqaJqaJqaJqaJqcASczPczRcATczScAUcATcATczRczPaJxaJyaJzaJzaJzaJzaJzaJzaJzaJzaJwaaaaIAaJAaJBaJCaJDaJEaIAaaaaFPaFUaFVaIBaJFaJGaJHaIBaFVaCJaERaJIaJIaBQaJJaJKaHraHsaHraJKaJLaDoaHnaHnaERaGiavVaGjaxzaJNazmaJOazXazYazZaBbaIKaILaJPaJQaJRaJRaILaJSaJQaJTaINaJUaJVaJWaINaJXaMUaaaaDqaDraDraDraDraDraDsaaaaMUaLHdbedbfdcmdcmaMUaMUdcmdcmdbgdbhdcmaMUaAsaMUaMUdcmdcmdbjdbiaMUaMUaMUaWadbaaLHaHKaLHdbcaNaaAraOMaMUdbldbmdblaMUaMUaMUaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaGSaBmaBmaBmaBmaBmaBmaGSaAvaJnazEaJoaJpaJqaJqaJqaJqaJqaJqcyDczPczRcATczScAUcATcATczRczPaJxaJyaJzaJzaJzaJzaJzaJzaJzaJzaJwaaaaIAaJAaJBaJCaJDaJEaIAaaaaFPaFUaFVaIBaJFaJGaJHaIBaFVaCJaERaJIaJIaBQaJJaJKaHraHsaHraJKaJLaDoaHnaHnaERaGiavVaGjaxzaJNazmaJOazXazYazZaBbaIKaILaJPaJQaJRaJRaILaJSaJQaJTaINaJUaJVaJWaINaJXaMUaaaaDqaDraDraDraDraDraDsaaaaMUaLHdbedbfdcmdcmaMUaMUdcmdcmdbgdbhdcmaMUaAsaMUaMUdcmdcmdbjdbiaMUaMUaMUaWadbaaLHaHKaLHdbcaNaaAraOMaMUdbldbmdblaMUaMUaMUaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKlaKmaKnaKmaKmaKoaKpaKmaKmaKnaKqaKrazEaGTaKsaJqaKtaKuaKvcBXcZjcBYczPczRcATczScZkcATcATczRczPaKDaKEaKFaKGaKHaKIaKJaKKaKLaKMaJwaabaIAaKNaKOaKPaKQaKRaIAaabaFPaFUaFVaKSaKTaKUaKVaKWaFVaCJaERaFWaFXaKXaKYaIGaFXaKZaFXaIGaLaaLbaFXaGhaERaGiavVaLcaxzaGkaAZaBaazXazYazZaLdaLeaILaLfaJQaJQaJQaLgaLhaLiaLjaINaLkaLlaLmaLnaLoaAsaaaaaaaaaaaaaaaaaaaaaaaaaaaaMUdbodbndbqdbpdbraMUaGyaLHaJeaHKaLHaMUaaaaMUaLHaLHaLHaLHaHKaLyaLzaLAaLAaLAaLAaLCaLBaLDdbtaLEaLFaLEdbvdbudbudbwdbydbxdbAdbzdbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKlaKqaKmaLKaLLaLMaLNaLOaLPaLQaLRaLSaLTaLUaLVaBmaGTaLWaJqaLXaLYaLZaMaaLZaMbczPcZlcATcZmcZwcZvcZwcZxcZyaMkaMlaMmaMmaMmaMmaMmaMmaMoaMpaJwaaaaIAaMqaKOaMraKQaMsaIAaaaaFPaFUaFVaMtaMuaMvaMwaMxaFVaCJaERaMyaMyaBQaMzaJKaHraMAaHraJKaNOaBYaMCaMCaERaMDaxNaMEaxzaGkaAZaMFaMFaMFaMFaMGaMHaMIaMJaMKaMLaMLaMLaMMaMLaMNaMOaMPaMQaMRaMOaMSdbBaAsaMUaMUaMUaMUaMUaMUaMUaMUaMUaMUaMUaMUdbCaMUaMUaMUaMUaLHaHKdboavqaabavqaLHaNbaNcaNddbEaNfaNgaNhaNhaNhaNhaNiaNjaNkdbFaNlaNmaNlaNnaNlaNldbGdbHaNqaNqaDxaLJaNsaNsaNsaNsaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLUaNuaNvaNwaLTaNxaLMaNxaLMaNxaLMaNxaLTaNyaNzaBmaGTaNAaJqaNBaNCaNDaNEaNFaNGczPcZzcATcZAcZCcZBcZEcZDczPaZqaMmaMmaMmaMmaMmaMmaMmaMoaNPaJwaabaIAaNQaNRaNSaNTaNUaIAaabaFPaFUaFVaNVaNWaNXaNYaNZaFVaCJaERaERaERaERaOaaIGaFXaIHaFXaIGaObaERaERaERaERaOcaOdaOeaxzaJNaOfaOgaOgaOgaOhaOiaCnaOjaOkaOlaOjaOmaOnaOoaOjaOpaOqaOraOsaOtaINaOuaOvaOwaOxaOxaOvaOyaOzaOzaOzaOzaOzaOAaOBaOzdbJaODdbKaOGdbLaOHdbMaOIaDAdbOaDAaOKaOLaLHaMUaONaOOaOPaOQaORaOSaOTaOUaOVaOWaOVaOXaOYaOZaPaaPbaPcaPdaPeaPfaSFdbPaLJaPiaPjaPkaPlaPmaPnaPoaPpaPqaPraaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm
index 30ee4a99e43..6a05464cf73 100644
--- a/code/controllers/voting.dm
+++ b/code/controllers/voting.dm
@@ -211,7 +211,7 @@ datum/controller/vote
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
else
- if (get_security_level() == "red" || get_security_level() == "delta")
+ if (security_level > SEC_LEVEL_BLUE)
return 0
if(ticker.current_state <= 2)
return 0
@@ -272,12 +272,7 @@ datum/controller/vote
proc/interface(var/client/C)
if(!C) return
- var/admin = 0
- var/trialmin = 0
- if(C.holder)
- admin = 1
- if(C.holder.rights & R_ADMIN)
- trialmin = 1
+ var/admin = check_rights(R_ADMIN,0)
voting |= C
. = "
Voting Panel"
@@ -299,29 +294,29 @@ datum/controller/vote
else
. += "Start a vote:
- "
//restart
- if(trialmin || config.allow_vote_restart)
+ if(admin || config.allow_vote_restart)
. += "Restart"
else
. += "Restart (Disallowed)"
. += "
- "
- if(trialmin || config.allow_vote_restart)
+ if(admin || config.allow_vote_restart)
. += "Crew Transfer"
else
. += "Crew Transfer (Disallowed)"
- if(trialmin)
+ if(admin)
. += "\t([config.allow_vote_restart?"Allowed":"Disallowed"])"
. += "
- "
//gamemode
- if(trialmin || config.allow_vote_mode)
+ if(admin || config.allow_vote_mode)
. += "GameMode"
else
. += "GameMode (Disallowed)"
- if(trialmin)
+ if(admin)
. += "\t([config.allow_vote_mode?"Allowed":"Disallowed"])"
. += "
"
//custom
- if(trialmin)
+ if(admin)
. += "- Custom
"
. += "
"
. += "Close"
@@ -330,31 +325,32 @@ datum/controller/vote
Topic(href,href_list[],hsrc)
if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid
+ var/admin = check_rights(R_ADMIN,0)
switch(href_list["vote"])
if("close")
voting -= usr.client
usr << browse(null, "window=vote")
return
if("cancel")
- if(usr.client.holder)
+ if(admin)
reset()
if("toggle_restart")
- if(usr.client.holder)
+ if(admin)
config.allow_vote_restart = !config.allow_vote_restart
if("toggle_gamemode")
- if(usr.client.holder)
+ if(admin)
config.allow_vote_mode = !config.allow_vote_mode
if("restart")
- if(config.allow_vote_restart || usr.client.holder)
+ if(config.allow_vote_restart || admin)
initiate_vote("restart",usr.key)
if("gamemode")
- if(config.allow_vote_mode || usr.client.holder)
+ if(config.allow_vote_mode || admin)
initiate_vote("gamemode",usr.key)
if("crew_transfer")
- if(config.allow_vote_restart || usr.client.holder)
+ if(config.allow_vote_restart || admin)
initiate_vote("crew_transfer",usr.key)
if("custom")
- if(usr.client.holder)
+ if(admin)
initiate_vote("custom",usr.key)
else
submit_vote(usr.ckey, round(text2num(href_list["vote"])))
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 7239061a61d..d74b2672360 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -5,6 +5,8 @@
#define DNA2_BUF_UE 2
#define DNA2_BUF_SE 4
+#define NEGATE_MUTATION_THRESHOLD 30 // Occupants with over ## percent radiation threshold will not gain mutations
+
//list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0),
/datum/dna2/record
var/datum/dna/dna = null
@@ -306,12 +308,27 @@
else
return
-
/obj/machinery/dna_scannernew/blob_act()
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
qdel(src)
+
+// Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations
+/obj/machinery/dna_scannernew/proc/radiation_check()
+ if(!occupant)
+ return 1
+
+ if(ishuman(occupant))
+ var/mob/living/carbon/human/H = occupant
+ if((H.species.flags & NO_DNA_RAD))
+ return 1
+
+ var/radiation_protection = occupant.run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.")
+ if (radiation_protection > NEGATE_MUTATION_THRESHOLD)
+ return 1
+
+ return 0
/obj/machinery/computer/scan_consolenew
name = "DNA Modifier Access Console"
@@ -562,10 +579,16 @@
sleep(10*src.radiation_duration) // sleep for radiation_duration seconds
irradiating = 0
+ src.connected.locked = lock_state
if (!src.connected.occupant)
return 1 // return 1 forces an update to all Nano uis attached to src
+ var/radiation = (((src.radiation_intensity*3)+src.radiation_duration*3) / connected.damage_coeff)
+ src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
+ if(src.connected.radiation_check())
+ return 1
+
if (prob(95))
if(prob(75))
randmutb(src.connected.occupant)
@@ -577,8 +600,6 @@
else
randmuti(src.connected.occupant)
- src.connected.occupant.radiation += (((src.radiation_intensity*3)+src.radiation_duration*3) / connected.damage_coeff)
- src.connected.locked = lock_state
return 1 // return 1 forces an update to all Nano uis attached to src
if (href_list["radiationDuration"])
@@ -663,24 +684,33 @@
sleep(10*src.radiation_duration) // sleep for radiation_duration seconds
irradiating = 0
+ src.connected.locked = lock_state
if (!src.connected.occupant)
return 1
-
+
if (prob((80 + (src.radiation_duration / 2))))
+ var/radiation = (src.radiation_intensity+src.radiation_duration)
+ src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
+
+ if(src.connected.radiation_check())
+ return 1
+
block = miniscrambletarget(num2text(selected_ui_target), src.radiation_intensity, src.radiation_duration)
src.connected.occupant.dna.SetUISubBlock(src.selected_ui_block,src.selected_ui_subblock,block)
src.connected.occupant.UpdateAppearance()
- src.connected.occupant.radiation += (src.radiation_intensity+src.radiation_duration)
else
+ var/radiation = ((src.radiation_intensity*2)+src.radiation_duration)
+ src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
+ if(src.connected.radiation_check())
+ return 1
+
if (prob(20+src.radiation_intensity))
randmutb(src.connected.occupant)
domutcheck(src.connected.occupant,src.connected)
else
randmuti(src.connected.occupant)
- src.connected.occupant.UpdateAppearance()
- src.connected.occupant.radiation += ((src.radiation_intensity*2)+src.radiation_duration)
- src.connected.locked = lock_state
+ src.connected.occupant.UpdateAppearance()
return 1 // return 1 forces an update to all Nano uis attached to src
////////////////////////////////////////////////////////
@@ -722,11 +752,16 @@
sleep(10*src.radiation_duration) // sleep for radiation_duration seconds
irradiating = 0
-
- if(src.connected.occupant)
+ src.connected.locked = lock_state
+
+ if(src.connected.occupant)
if (prob((80 + ((src.radiation_duration / 2) + (connected.precision_coeff ** 3)))))
- // FIXME: Find out what these corresponded to and change them to the WHATEVERBLOCK they need to be.
- //if ((src.selected_se_block != 2 || src.selected_se_block != 12 || src.selected_se_block != 8 || src.selected_se_block || 10) && prob (20))
+ var/radiation = ((src.radiation_intensity+src.radiation_duration) / connected.damage_coeff)
+ src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
+
+ if(src.connected.radiation_check())
+ return 1
+
var/real_SE_block=selected_se_block
block = miniscramble(block, src.radiation_intensity, src.radiation_duration)
if(prob(20))
@@ -737,10 +772,14 @@
//testing("Irradiated SE block [real_SE_block]:[src.selected_se_subblock] ([original_block] now [block]) [(real_SE_block!=selected_se_block) ? "(SHIFTED)":""]!")
connected.occupant.dna.SetSESubBlock(real_SE_block,selected_se_subblock,block)
- src.connected.occupant.radiation += ((src.radiation_intensity+src.radiation_duration) / connected.damage_coeff)
domutcheck(src.connected.occupant,src.connected)
else
- src.connected.occupant.radiation += (((src.radiation_intensity*2)+src.radiation_duration) / connected.damage_coeff)
+ var/radiation = (((src.radiation_intensity*2)+src.radiation_duration) / connected.damage_coeff)
+ src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
+
+ if(src.connected.radiation_check())
+ return 1
+
if (prob(80-src.radiation_duration))
//testing("Random bad mut!")
randmutb(src.connected.occupant)
@@ -749,7 +788,6 @@
randmuti(src.connected.occupant)
//testing("Random identity mut!")
src.connected.occupant.UpdateAppearance()
- src.connected.locked = lock_state
return 1 // return 1 forces an update to all Nano uis attached to src
if(href_list["ejectBeaker"])
@@ -839,7 +877,7 @@
if (bufferOption == "transfer")
if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations && connected.scan_level < 3) || !src.connected.occupant.dna)
- return
+ return 1
irradiating = 2
var/lock_state = src.connected.locked
@@ -851,6 +889,12 @@
irradiating = 0
src.connected.locked = lock_state
+ var/radiation = (rand(20,50) / connected.damage_coeff)
+ src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
+
+ if(src.connected.radiation_check())
+ return 1
+
var/datum/dna2/record/buf = src.buffers[bufferId]
if ((buf.types & DNA2_BUF_UI))
@@ -862,7 +906,6 @@
src.connected.occupant.dna.SE = buf.dna.SE
src.connected.occupant.dna.UpdateSE()
domutcheck(src.connected.occupant,src.connected)
- src.connected.occupant.radiation += (rand(20,50) / connected.damage_coeff)
return 1
if (bufferOption == "createInjector")
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 0444eb9997f..5f981b3fb1a 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -488,7 +488,7 @@
dat += cat_dat[category]
dat += ""
- user << browse(wrap(dat), "window=spellbook;size=600x300")
+ user << browse(wrap(dat), "window=spellbook;size=700x300")
onclose(user, "spellbook")
return
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 15f0b7e8aa9..33bbb110766 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -44,7 +44,7 @@
return 1
return
-/obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity?
+/obj/item/mecha_parts/mecha_equipment/Destroy()//missiles detonating, teleporter creating singularity?
if(chassis)
chassis.equipment -= src
listclearnulls(chassis.equipment)
@@ -57,9 +57,8 @@
chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50)
else
chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50)
- spawn
- qdel(src)
- return
+ chassis = null
+ return ..()
/obj/item/mecha_parts/mecha_equipment/proc/critfail()
if(chassis)
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 685a65ad15e..bc7100347c5 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -29,7 +29,7 @@
allow_drop()
return 0
- destroy()
+ Destroy()
for(var/atom/movable/AM in src)
AM.forceMove(get_turf(src))
return ..()
@@ -263,7 +263,7 @@
chassis.events.clearEvent("onMove",event)
return ..()
- destroy()
+ Destroy()
chassis.events.clearEvent("onMove",event)
return ..()
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 9882151bb21..d9a7b7a2044 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -665,10 +665,9 @@
M.overlays += droid_overlay
return
- destroy()
+ Destroy()
chassis.overlays -= droid_overlay
- ..()
- return
+ return ..()
detach()
chassis.overlays -= droid_overlay
@@ -941,7 +940,7 @@
GM.toxins += 100
GM.temperature = 1500+T0C //should be enough to start a fire
T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.")
- destroy()
+ qdel(src)
else
GM.toxins += 5
GM.temperature = istype(T) ? T.air.temperature : T20C
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 249e5fa93d8..7a9894ef151 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -363,7 +363,7 @@
if(src.throwing)//high velocity mechas in your face!
var/breakthrough = 0
if(istype(obstacle, /obj/structure/window/))
- obstacle.Destroy(brokenup = 1)
+ qdel(obstacle)
breakthrough = 1
else if(istype(obstacle, /obj/structure/grille/))
@@ -377,7 +377,7 @@
else if(istype(obstacle, /obj/structure/table))
var/obj/structure/table/T = obstacle
- T.destroy()
+ qdel(T)
breakthrough = 1
else if(istype(obstacle, /obj/structure/rack))
@@ -450,7 +450,7 @@
if(ignore_threshold || src.health*100/initial(src.health) 0)
src.spark_system.start()
else
- src.destroy()
+ qdel(src)
return
/obj/mecha/attack_hand(mob/living/user as mob)
@@ -609,7 +609,7 @@
Proj.on_hit(src)
return
-/obj/mecha/proc/destroy()
+/obj/mecha/Destroy()
go_out()
for(var/mob/M in src) //Let's just be ultra sure
if(isAI(M))
@@ -624,7 +624,7 @@
var/obj/mecha/working/ripley/R = src
if(R.cargo)
for(var/obj/O in R.cargo) //Dump contents of stored cargo
- O.loc = loc
+ O.forceMove(loc)
R.cargo -= O
loc.Entered(O)
@@ -638,7 +638,7 @@
E.reliability = round(rand(E.reliability/3,E.reliability))
else
E.forceMove(loc)
- E.destroy()
+ qdel(E)
if(cell)
WR.crowbar_salvage += cell
cell.forceMove(WR)
@@ -649,7 +649,7 @@
else
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
E.forceMove(loc)
- E.destroy()
+ qdel(E)
if(cell)
qdel(cell)
if(internal_tank)
@@ -677,16 +677,16 @@
src.log_append_to_last("Armor saved, changing severity to [severity].")
switch(severity)
if(1.0)
- src.destroy()
+ qdel(src)
if(2.0)
if (prob(30))
- src.destroy()
+ qdel(src)
else
src.take_damage(initial(src.health)/2)
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
if(3.0)
if (prob(5))
- src.destroy()
+ qdel(src)
else
src.take_damage(initial(src.health)/5)
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 7486ae70bf1..1574e440a23 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -3,8 +3,8 @@
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
-#define COMP_SCREEN_WIDTH 580 //width of supply.order computer interaction window
-#define COMP_SCREEN_HEIGHT 555 //height of supply order computer interaction window
+#define COMP_SCREEN_WIDTH 600 //width of supply computer interaction window
+#define COMP_SCREEN_HEIGHT 555 //height of supply computer interaction window
var/datum/controller/supply/supply_controller = new()
@@ -248,7 +248,7 @@ var/list/mechtoys = list(
for(var/atom/A in T.contents)
if(istype(A,/atom/movable/lighting_overlay))
continue
- if(A.simulated)
+ if(!A.simulated)
continue
contcount++
if(contcount) continue
diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm
index 7de12627482..768b46c2283 100644
--- a/code/modules/mob/living/silicon/pai/recruit.dm
+++ b/code/modules/mob/living/silicon/pai/recruit.dm
@@ -231,7 +231,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
M << browse(dat, "window=paiRecruit;size=580x580;")
proc/findPAI(var/obj/item/device/paicard/p, var/mob/user)
- requestRecruits()
+ requestRecruits(p)
var/list/available = list()
for(var/datum/paiCandidate/c in paiController.pai_candidates)
if(c.ready)
@@ -346,12 +346,12 @@ var/datum/paiController/paiController // Global handler for pAI candidates
user << browse(dat, "window=findPai")
- proc/requestRecruits()
+ proc/requestRecruits(var/obj/item/device/paicard/P)
for(var/mob/dead/observer/O in player_list)
if(O.client && O.client.prefs.be_special & BE_PAI)
if(player_old_enough_antag(O.client,BE_PAI))
if(check_recruit(O))
- O << "\blue A pAI card is looking for personalities. (Teleport | Sign Up)"
+ O << "\blue A pAI card is looking for personalities. (Teleport | Sign Up)"
//question(O.client)
proc/check_recruit(var/mob/dead/observer/O)
if(jobban_isbanned(O, "pAI") || jobban_isbanned(O,"nonhumandept"))