diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index b3d2b1e0fc8..d951ce24e56 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -1930,7 +1930,7 @@
"aLf" = (/obj/machinery/newscaster{pixel_y = -28},/obj/structure/closet/athletic_mixed,/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness)
"aLg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/light,/obj/structure/closet/boxinggloves,/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness)
"aLh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/closet/masks,/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness)
-"aLi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness)
+"aLi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness)
"aLj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/poolcontroller{pixel_y = -25; srange = 7},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness)
"aLk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/crew_quarters/fitness)
"aLl" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor,/area/crew_quarters/fitness)
@@ -3376,7 +3376,7 @@
"bmV" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bmW" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bmX" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"bmY" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
+"bmY" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bmZ" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bna" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/dresser,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bnb" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
@@ -6280,7 +6280,7 @@
"cqN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cqO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 2 North"; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cqP" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = 5; pixel_y = 27},/obj/machinery/holosign_switch{id = "surgery2"; pixel_x = -5; pixel_y = 27},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"cqQ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay2)
+"cqQ" = (/obj/machinery/light{dir = 8},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay2)
"cqR" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cqS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cqT" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -8712,6 +8712,7 @@
"dlB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
"dlC" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/space,/area/shuttle/constructionsite)
"dlD" = (/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_4)
+"dlE" = (/obj/structure/table,/obj/structure/bedsheetbin{pixel_x = -1; pixel_y = 2},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
(1,1,1) = {"
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8839,7 +8840,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbcSbnCbcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbcSbnGbcSbnFbcSbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCbpBbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbqtbpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbqtbpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbtTbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukbulbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index 1f170276c8f..1753045cb8c 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -26,20 +26,3 @@
#define MEMBER_PUBLIC 8192
#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC)
-
-#define BE_TRAITOR 1
-#define BE_OPERATIVE 2
-#define BE_CHANGELING 4
-#define BE_WIZARD 8
-#define BE_MALF 16
-#define BE_REV 32
-#define BE_ALIEN 64
-#define BE_PAI 128
-#define BE_CULTIST 256
-#define BE_NINJA 512
-#define BE_RAIDER 1024
-#define BE_VAMPIRE 2048
-#define BE_MUTINEER 4096
-#define BE_BLOB 8192
-#define BE_SHADOWLING 16384
-#define BE_REVENANT 32768
\ No newline at end of file
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
new file mode 100644
index 00000000000..86495432d0e
--- /dev/null
+++ b/code/__DEFINES/role_preferences.dm
@@ -0,0 +1,69 @@
+
+
+//Values for antag preferences, event roles, etc. unified here
+
+
+
+//These are synced with the Database, if you change the values of the defines
+//then you MUST update the database!
+// If you're adding a new role, remember to update modules/admin/topic.dm, so admins can dish out
+// justice if someone's abusing your role
+#define ROLE_TRAITOR "traitor"
+#define ROLE_OPERATIVE "operative"
+#define ROLE_CHANGELING "changeling"
+#define ROLE_WIZARD "wizard"
+#define ROLE_MALF "malf AI"
+#define ROLE_REV "revolutionary"
+#define ROLE_ALIEN "xenomorph"
+#define ROLE_PAI "pAI"
+#define ROLE_CULTIST "cultist"
+#define ROLE_BLOB "blob"
+#define ROLE_NINJA "space ninja"
+#define ROLE_MONKEY "monkey"
+#define ROLE_GANG "gangster"
+#define ROLE_SHADOWLING "shadowling"
+#define ROLE_ABDUCTOR "abductor"
+#define ROLE_REVENANT "revenant"
+#define ROLE_HOG_GOD "hand of god: god" // We're prolly gonna port this one day or another
+#define ROLE_HOG_CULTIST "hand of god: cultist"
+#define ROLE_RAIDER "vox raider"
+#define ROLE_VAMPIRE "vampire"
+#define ROLE_MUTINEER "mutineer"
+// Role tags for EVERYONE!
+#define ROLE_BORER "cortical borer"
+#define ROLE_DEMON "slaughter demon"
+#define ROLE_SENTIENT "sentient animal"
+#define ROLE_POSIBRAIN "positronic brain"
+#define ROLE_GUARDIAN "guardian"
+
+
+//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
+//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
+//(in game days played) to play that role
+var/global/list/special_roles = list(
+ ROLE_TRAITOR = /datum/game_mode/traitor,
+ ROLE_OPERATIVE = /datum/game_mode/nuclear,
+ ROLE_CHANGELING = /datum/game_mode/changeling,
+ ROLE_WIZARD = /datum/game_mode/wizard,
+ ROLE_MALF = /datum/game_mode/malfunction,
+ ROLE_REV = /datum/game_mode/revolution,
+ ROLE_ALIEN,
+ ROLE_PAI,
+ ROLE_CULTIST = /datum/game_mode/cult,
+ ROLE_BLOB = /datum/game_mode/blob,
+ ROLE_NINJA,
+// ROLE_MONKEY = /datum/game_mode/monkey, Sooner or later these are going to get ported
+// ROLE_GANG = /datum/game_mode/gang,
+ ROLE_SHADOWLING = /datum/game_mode/shadowling,
+// ROLE_ABDUCTOR = /datum/game_mode/abduction,
+// ROLE_HOG_GOD = /datum/game_mode/hand_of_god,
+// ROLE_HOG_CULTIST = /datum/game_mode/hand_of_god,
+ ROLE_RAIDER = /datum/game_mode/heist,
+ ROLE_VAMPIRE = /datum/game_mode/vampire,
+ ROLE_MUTINEER = /datum/game_mode/mutiny,
+ ROLE_BORER,
+ ROLE_DEMON,
+ ROLE_SENTIENT,
+ ROLE_POSIBRAIN,
+ ROLE_GUARDIAN,
+)
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 0d51ed39ec1..f821b19e665 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -290,17 +290,17 @@ proc/isInSight(var/atom/A, var/atom/B)
return M
return null
-/proc/get_candidates(be_special_flag=0, afk_bracket=3000, override_age=0, override_jobban=0)
- var/roletext = get_roletext(be_special_flag)
+/proc/get_candidates(be_special_type, afk_bracket=3000, override_age=0, override_jobban=0)
+ var/roletext = get_roletext(be_special_type)
var/list/candidates = list()
// Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000))
while(!candidates.len && afk_bracket < 6000)
for(var/mob/dead/observer/G in player_list)
if(G.client != null)
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
- if(!G.client.is_afk(afk_bracket) && (G.client.prefs.be_special & be_special_flag))
+ if(!G.client.is_afk(afk_bracket) && (be_special_type in G.client.prefs.be_special))
if(!override_jobban || (!jobban_isbanned(G, roletext) && !jobban_isbanned(G,"Syndicate")))
- if(override_age || player_old_enough_antag(G.client,be_special_flag))
+ if(override_age || player_old_enough_antag(G.client,be_special_type))
candidates += G.client
afk_bracket += 600 // Add a minute to the bracket, for every attempt
diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm
index 70c63dfc789..f490f71df43 100644
--- a/code/__HELPERS/sanitize_values.dm
+++ b/code/__HELPERS/sanitize_values.dm
@@ -44,10 +44,24 @@
if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase
else return default
return .
-
+
/proc/sanitize_ooccolor(color)
var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8)))
HSL[3] = min(HSL[3],0.4)
var/list/RGB = hsl2rgb(arglist(HSL))
return "#[num2hex(RGB[1],2)][num2hex(RGB[2],2)][num2hex(RGB[3],2)]"
-
+
+
+// Sanitize inputs to avoid SQL injection attacks
+/proc/sql_sanitize_text(var/text)
+ text = replacetext(text, "'", "''")
+ text = replacetext(text, ";", "")
+ text = replacetext(text, "&", "")
+ return text
+
+// Calls the above proc on each entry of a list to ensure its entries are clean
+/proc/sql_sanitize_text_list(var/list/l)
+ var/list/new_list = l.Copy()
+ for (var/text in new_list)
+ sql_sanitize_text(text)
+ return new_list
\ No newline at end of file
diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm
index 61bfd723241..4cfa038cd1e 100644
--- a/code/_globalvars/configuration.dm
+++ b/code/_globalvars/configuration.dm
@@ -31,25 +31,6 @@ var/MAX_EX_LIGHT_RANGE = 14
var/MAX_EX_FLASH_RANGE = 14
var/MAX_EX_FLAME_RANGE = 14
-var/list/be_special_flags = list(
- "traitor" = BE_TRAITOR,
- "operative" = BE_OPERATIVE,
- "changeling" = BE_CHANGELING,
- "wizard" = BE_WIZARD,
- "malf AI" = BE_MALF,
- "revolutionary" = BE_REV,
- "alien" = BE_ALIEN,
- "pAI" = BE_PAI,
- "cultist" = BE_CULTIST,
- "ninja" = BE_NINJA,
- "raider" = BE_RAIDER,
- "vampire" = BE_VAMPIRE,
- "mutineer" = BE_MUTINEER,
- "blob" = BE_BLOB,
- "shadowling" = BE_SHADOWLING,
- "revenant" = BE_REVENANT
-)
-
//Random event stuff, apparently used
var/eventchance = 10 //% per 5 mins
var/event = 0
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 712c1b41e1c..860ebdd01b9 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -180,7 +180,7 @@
else
text += "EMPLOYEE|headrev|rev"
- if(current && current.client && current.client.prefs.be_special & BE_REV)
+ if(current && current.client && (ROLE_REV in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
@@ -205,7 +205,7 @@
text += "EMPLOYEE|cultist"
- if(current && current.client && current.client.prefs.be_special & BE_CULTIST)
+ if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
@@ -225,7 +225,7 @@
else
text += "yes|NO"
- if(current && current.client && current.client.prefs.be_special & BE_WIZARD)
+ if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
@@ -246,7 +246,7 @@
else
text += "yes|NO"
- if(current && current.client && current.client.prefs.be_special & BE_CHANGELING)
+ if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
@@ -294,7 +294,7 @@
else
text += "operative|NANOTRASEN"
- if(current && current.client && current.client.prefs.be_special & BE_OPERATIVE)
+ if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
@@ -316,7 +316,7 @@
else
text += "traitor|EMPLOYEE"
- if(current && current.client && current.client.prefs.be_special & BE_TRAITOR)
+ if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
@@ -335,7 +335,7 @@
else
text += "shadowling|thrall|HUMAN"
- if(current && current.client && current.client.prefs.be_special & BE_SHADOWLING)
+ if(current && current.client && (ROLE_SHADOWLING in current.client.prefs.be_special))
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index ea7f5e2abbd..c8729b833b3 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -13,9 +13,9 @@ var/list/uplink_items = list()
var/datum/uplink_item/I = new item()
if(!I.item)
continue
- if(I.gamemodes.len && ticker && !(ticker.mode.name in I.gamemodes))
+ if(I.gamemodes.len && ticker && !(ticker.mode.type in I.gamemodes))
continue
- if(I.excludefrom.len && ticker && (ticker.mode.name in I.excludefrom))
+ if(I.excludefrom.len && ticker && (ticker.mode.type in I.excludefrom))
continue
if(I.last)
last += I
@@ -285,7 +285,7 @@ var/list/uplink_items = list()
desc = "A fully-loaded Scarborough Arms bullpup submachine gun that fires .45 rounds with a 20-round magazine and is compatible with suppressors."
item = /obj/item/weapon/gun/projectile/automatic/c20r
cost = 14
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 40
/datum/uplink_item/dangerous/carbine
@@ -294,7 +294,7 @@ var/list/uplink_items = list()
reference = "AR"
item = /obj/item/weapon/gun/projectile/automatic/m90
cost = 18
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 50
/datum/uplink_item/dangerous/machinegun
@@ -303,7 +303,7 @@ var/list/uplink_items = list()
reference = "LMG"
item = /obj/item/weapon/gun/projectile/automatic/l6_saw
cost = 40
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/dangerous/crossbow
@@ -312,7 +312,7 @@ var/list/uplink_items = list()
reference = "EC"
item = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
cost = 12
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
surplus = 50
/datum/uplink_item/dangerous/flamethrower
@@ -321,7 +321,7 @@ var/list/uplink_items = list()
reference = "FT"
item = /obj/item/weapon/flamethrower/full/tank
cost = 11
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 40
/datum/uplink_item/dangerous/sword
@@ -344,7 +344,7 @@ var/list/uplink_items = list()
reference = "VDG"
item = /obj/item/weapon/grenade/spawnergrenade/manhacks
cost = 8
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 35
/datum/uplink_item/ammo/bioterror
@@ -353,7 +353,7 @@ var/list/uplink_items = list()
reference = "BTS"
item = /obj/item/weapon/storage/box/syndie_kit/bioterror
cost = 6
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/dangerous/tabungrenades
name = "Tabun Gas Grenades"
@@ -361,7 +361,7 @@ var/list/uplink_items = list()
reference = "TGG"
item = /obj/item/weapon/storage/box/syndie_kit/tabun
cost = 15
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/dangerous/emp
@@ -385,7 +385,7 @@ var/list/uplink_items = list()
reference = "GE"
item = /obj/mecha/combat/gygax/dark/loaded
cost = 90
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/dangerous/mauler
@@ -394,7 +394,7 @@ var/list/uplink_items = list()
reference = "ME"
item = /obj/mecha/combat/marauder/mauler/loaded
cost = 140
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/dangerous/syndieborg
@@ -403,7 +403,7 @@ var/list/uplink_items = list()
reference = "SC"
item = /obj/item/weapon/antag_spawner/borg_tele
cost = 50
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
//for refunding the syndieborg teleporter
@@ -416,7 +416,7 @@ var/list/uplink_items = list()
name = "Holoparasites"
desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an organic host as a home base and source of fuel."
item = /obj/item/weapon/storage/box/syndie_kit/guardian
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
cost = 12
// Ammunition
@@ -445,7 +445,7 @@ var/list/uplink_items = list()
reference = "45"
item = /obj/item/ammo_box/magazine/smgm45
cost = 2
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/ammobag
name = "Ammo Duffelbag - Shotgun Ammo Grab Bag"
@@ -453,7 +453,7 @@ var/list/uplink_items = list()
reference = "SAGL"
item = /obj/item/weapon/storage/backpack/duffel/syndie/ammo/loaded
cost = 10 //bulk buyer's discount. Very useful if you're buying a mech and dont have TC left to buy people non-shotgun guns
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/bullslug
name = "Drum Magazine - 12g Slugs"
@@ -461,7 +461,7 @@ var/list/uplink_items = list()
reference = "12BSG"
item = /obj/item/ammo_box/magazine/m12g
cost = 2
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/bullbuck
name = "Drum Magazine - 12g buckshot"
@@ -469,7 +469,7 @@ var/list/uplink_items = list()
reference = "12BS"
item = /obj/item/ammo_box/magazine/m12g/buckshot
cost = 2
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/bullstun
name = "Drum Magazine - 12g Stun Slug"
@@ -477,7 +477,7 @@ var/list/uplink_items = list()
reference = "12SS"
item = /obj/item/ammo_box/magazine/m12g/stun
cost = 3
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/bulldragon
name = "Drum Magazine - 12g Dragon's Breath"
@@ -485,7 +485,7 @@ var/list/uplink_items = list()
reference = "12DB"
item = /obj/item/ammo_box/magazine/m12g/dragon
cost = 2
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/carbine
name = "Toploader Magazine - 5.56"
@@ -493,7 +493,7 @@ var/list/uplink_items = list()
reference = "556"
item = /obj/item/ammo_box/magazine/m556
cost = 2
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/a40mm
name = "Ammo Box - 40mm grenades"
@@ -501,7 +501,7 @@ var/list/uplink_items = list()
reference = "40MM"
item = /obj/item/ammo_box/a40mm
cost = 4
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/machinegun
name = "Box Magazine - 7.62x51mm"
@@ -509,7 +509,7 @@ var/list/uplink_items = list()
reference = "762"
item = /obj/item/ammo_box/magazine/m762
cost = 12
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
// STEALTHY WEAPONS
@@ -530,7 +530,7 @@ var/list/uplink_items = list()
reference = "SP"
item = /obj/item/weapon/pen/sleepy
cost = 8
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/soap
name = "Syndicate Soap"
@@ -605,14 +605,14 @@ var/list/uplink_items = list()
reference = "NSSS"
item = /obj/item/clothing/shoes/syndigaloshes
cost = 2
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
name = "Tactical No-Slip Brown Shoes"
desc = "These allow you to run on wet floors. They do not work on lubricated surfaces, and the maker swears they're better than normal ones, somehow."
reference = "NNSSS"
cost = 4 //but they aren't
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_tools/agent_card
name = "Agent ID Card"
@@ -691,7 +691,7 @@ var/list/uplink_items = list()
reference = "SBM"
item = /obj/item/weapon/storage/belt/military
cost = 3
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/medkit
name = "Syndicate Combat Medic Kit"
@@ -700,7 +700,7 @@ var/list/uplink_items = list()
reference = "SCMK"
item = /obj/item/weapon/storage/firstaid/tactical
cost = 9
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/space_suit
name = "Space Suit"
@@ -718,6 +718,17 @@ var/list/uplink_items = list()
item = /obj/item/weapon/storage/box/syndie_kit/hardsuit
cost = 8
+/datum/uplink_item/device_tools/elite_hardsuit
+ name = "Elite Syndicate Hardsuit"
+ desc = "The elite Syndicate hardsuit is worn by only the best nuclear agents. Features much better armoring and complete fireproofing, as well as a built in jetpack. \
+ When the built in helmet is deployed your identity will be protected, even in death, as the suit cannot be removed by outside forces. Toggling the suit into combat mode \
+ will allow you all the mobility of a loose fitting uniform without sacrificing armoring. Additionally the suit is collapsible, small enough to fit within a backpack. \
+ Nanotrasen crewmembers are trained to report red space suit sightings; these suits in particular are known to drive employees into a panic."
+ reference = "ESHS"
+ item = /obj/item/weapon/storage/box/syndie_kit/elite_hardsuit
+ cost = 8
+ gamemodes = list(/datum/game_mode/nuclear)
+
/datum/uplink_item/device_tools/thermal
name = "Thermal Imaging Glasses"
desc = "These glasses are thermals disguised as engineers' optical meson scanners. They allow you to see organisms through walls by capturing the upper portion of the infra-red light spectrum, emitted as heat and light by objects. Hotter objects, such as warm bodies, cybernetic organisms and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks."
@@ -755,7 +766,7 @@ var/list/uplink_items = list()
reference = "BRMB"
item = /obj/item/clothing/shoes/magboots/syndie
cost = 3
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/plastic_explosives
name = "Composition C-4"
@@ -793,7 +804,7 @@ var/list/uplink_items = list()
reference = "SD"
item = /obj/item/device/syndicatedetonator
cost = 3
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/advpinpointer
name = "Advanced Pinpointer"
@@ -815,7 +826,7 @@ var/list/uplink_items = list()
item = /obj/item/weapon/circuitboard/teleporter
reference = "TP"
cost = 40
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/device_tools/shield
@@ -824,7 +835,7 @@ var/list/uplink_items = list()
item = /obj/item/weapon/shield/energy
reference = "ESD"
cost = 16
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
surplus = 20
/datum/uplink_item/device_tools/medgun
@@ -833,7 +844,7 @@ var/list/uplink_items = list()
item = /obj/item/weapon/gun/medbeam
reference = "MBG"
cost = 15
- gamemodes = list("nuclear emergency")
+ gamemodes = list(/datum/game_mode/nuclear)
// IMPLANTS
@@ -903,7 +914,7 @@ var/list/uplink_items = list()
reference = "SYB"
item = /obj/item/weapon/storage/box/syndicate
cost = 20
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/badass/syndiecards
name = "Syndicate Playing Cards"
@@ -912,7 +923,7 @@ var/list/uplink_items = list()
reference = "SPC"
item = /obj/item/toy/cards/deck/syndicate
cost = 1
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
surplus = 40
/datum/uplink_item/badass/syndiecash
@@ -962,7 +973,7 @@ var/list/uplink_items = list()
reference = "SYSC"
cost = 20
item = /obj/item/weapon/storage/box/syndicate
- excludefrom = list("nuclear emergency")
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/badass/surplus_crate/spawn_item(turf/loc, obj/item/device/uplink/U)
var/obj/structure/closet/crate/C = new(loc)
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index cd09b5d7a9a..608d0d4061d 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -36,7 +36,7 @@
return
checking = 1
user << "The device is now checking for possible borgs."
- var/list/mob/dead/observer/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", "operative", 1, BE_OPERATIVE, 300)
+ var/list/mob/dead/observer/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", "operative", 1, ROLE_OPERATIVE, 300)
if(borg_candidates.len > 0 && !used)
checking = 0
used = 1
@@ -74,7 +74,7 @@
icon_state = "vial"
/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user as mob)
- var/list/demon_candidates = get_candidates(BE_ALIEN)
+ var/list/demon_candidates = get_candidates(ROLE_DEMON)
if(user.z == ZLEVEL_CENTCOMM)//this is to make sure the wizard does NOT summon a demon from the Den..
user << "You should probably wait until you reach the station."
return
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index 8a9e9cc54b2..06b09867e6e 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -18,7 +18,7 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- possible_traitors = get_players_for_role(BE_TRAITOR)
+ possible_traitors = get_players_for_role(ROLE_TRAITOR)
for(var/mob/new_player/P in world)
if(P.client && P.ready)
@@ -76,13 +76,13 @@
var/traitorcount = 0
var/possible_traitors[0]
for(var/mob/living/player in mob_list)
- if (player.client && player.stat != 2)
+ if (player.client && player.stat != DEAD)
playercount += 1
- if (player.client && player.mind && player.mind.special_role && player.stat != 2)
+ if (player.client && player.mind && player.mind.special_role && player.stat != DEAD)
traitorcount += 1
- if (player.client && player.mind && !player.mind.special_role && player.stat != 2)
+ if (player.client && player.mind && !player.mind.special_role && player.stat != DEAD)
if (ishuman(player) || isrobot(player) || isAI(player))
- if (player.client && player.client.prefs.be_special & BE_TRAITOR && !jobban_isbanned(player, "traitor") && !jobban_isbanned(player, "Syndicate"))
+ if (player.client && (ROLE_TRAITOR in player.client.prefs.be_special) && !jobban_isbanned(player, "traitor") && !jobban_isbanned(player, "Syndicate"))
possible_traitors += player.mind
for(var/datum/mind/player in possible_traitors)
for(var/job in restricted_jobs)
@@ -160,15 +160,15 @@
if(shuttle_master.emergency.mode >= SHUTTLE_ESCAPE)
return
//message_admins("Late Join Check")
- if((character.client && character.client.prefs.be_special & BE_TRAITOR) && !jobban_isbanned(character, "traitor") && !jobban_isbanned(character, "Syndicate"))
+ if(character.client && (ROLE_TRAITOR in character.client.prefs.be_special) && !jobban_isbanned(character, "traitor") && !jobban_isbanned(character, "Syndicate"))
//message_admins("Late Joiner has Be Syndicate")
//message_admins("Checking number of players")
var/playercount = 0
var/traitorcount = 0
for(var/mob/living/player in mob_list)
- if (player.client && player.stat != 2)
+ if (player.client && player.stat != DEAD)
playercount += 1
- if (player.client && player.mind && player.mind.special_role && player.stat != 2)
+ if (player.client && player.mind && player.mind.special_role && player.stat != DEAD)
traitorcount += 1
//message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]")
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index 1cbd8dd7a1e..4c8914b9131 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -29,7 +29,7 @@ var/list/blob_nodes = list()
/datum/game_mode/blob/pre_setup()
- var/list/possible_blobs = get_players_for_role(BE_BLOB)
+ var/list/possible_blobs = get_players_for_role(ROLE_BLOB)
// stop setup if no possible traitors
if(!possible_blobs.len)
@@ -58,7 +58,7 @@ var/list/blob_nodes = list()
/datum/game_mode/blob/proc/get_blob_candidates()
var/list/candidates = list()
for(var/mob/living/carbon/human/player in player_list)
- if(!player.stat && player.mind && !player.mind.special_role && !jobban_isbanned(player, "Syndicate") && (player.client.prefs.be_special & BE_BLOB))
+ if(!player.stat && player.mind && !player.mind.special_role && !jobban_isbanned(player, "Syndicate") && (ROLE_BLOB in player.client.prefs.be_special))
candidates += player
return candidates
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 4ccaa08d7be..5954a5b1dba 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -101,7 +101,7 @@
var/list/candidates = list()
if(!new_overmind)
- candidates = get_candidates(BE_BLOB)
+ candidates = get_candidates(ROLE_BLOB)
if(candidates.len)
C = pick(candidates)
else
diff --git a/code/game/gamemodes/borer/borer.dm b/code/game/gamemodes/borer/borer.dm
index 3a491c769df..bf381ef763d 100644
--- a/code/game/gamemodes/borer/borer.dm
+++ b/code/game/gamemodes/borer/borer.dm
@@ -29,7 +29,7 @@
// also make sure that there's at least one borer and one host
recommended_enemies = max(src.num_players() / 20 * 2, 2)
- var/list/datum/mind/possible_borers = get_players_for_role(BE_ALIEN)
+ var/list/datum/mind/possible_borers = get_players_for_role(ROLE_BORER)
if(possible_borers.len < 2)
log_admin("MODE FAILURE: BORER. NOT ENOUGH BORER CANDIDATES.")
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index d40402f0ae2..bc323d14c3c 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -46,7 +46,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING)
+ var/list/datum/mind/possible_changelings = get_players_for_role(ROLE_CHANGELING)
changeling_amount = 1 + round(num_players() / 10)
diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm
index 48ea01b1a29..8cb86e6cc3c 100644
--- a/code/game/gamemodes/changeling/traitor_chan.dm
+++ b/code/game/gamemodes/changeling/traitor_chan.dm
@@ -18,7 +18,7 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING)
+ var/list/datum/mind/possible_changelings = get_players_for_role(ROLE_CHANGELING)
for(var/mob/new_player/player in player_list)
if((player.mind in possible_changelings) && (player.client.prefs.species in protected_species_changeling))
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 457a9d85995..0ec4d72b5de 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -71,7 +71,7 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/cultists_possible = get_players_for_role(BE_CULTIST)
+ var/list/cultists_possible = get_players_for_role(ROLE_CULTIST)
for(var/cultists_number = 1 to max_cultists_to_start)
if(!cultists_possible.len)
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 3f1cd777310..8c1d97fef07 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -6,7 +6,7 @@
if(temp_vent.parent.other_atmosmch.len > 50) // Stops Aliens getting stuck in small networks. See: Security, Virology
vents += temp_vent
- var/list/candidates = get_candidates(BE_ALIEN,ALIEN_AFK_BRACKET)
+ var/list/candidates = get_candidates(ROLE_ALIEN,ALIEN_AFK_BRACKET)
if(prob(40)) spawncount++ //sometimes, have two larvae spawn instead of one
while((spawncount >= 1) && vents.len && candidates.len)
@@ -25,7 +25,7 @@
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
for(var/mob/M in player_list)
M << sound('sound/AI/aliens.ogg')
-
+
/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights
if(isEvent)
command_announcement.Announce("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert")
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 244ae984ac8..f2de8d413fd 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -254,7 +254,7 @@
// Get a list of all the people who want to be the antagonist for this round, except those with incompatible species
for(var/mob/new_player/player in players)
- if(player.client.prefs.be_special & role && !(player.client.prefs.species in protected_species))
+ if((role in player.client.prefs.be_special) && !(player.client.prefs.species in protected_species))
log_debug("[player.key] had [roletext] enabled, so we are drafting them.")
candidates += player.mind
players -= player
@@ -276,57 +276,6 @@
if(player.assigned_role == job)
candidates -= player
- /*if(candidates.len < recommended_enemies)
- for(var/mob/new_player/player in players)
- if(player.client && player.ready)
- if(!(player.client.prefs.be_special & role)) // We don't have enough people who want to be antagonist, make a seperate list of people who don't want to be one
- if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, roletext)) //Nodrak/Carn: Antag Job-bans
- drafted += player.mind
-
- if(restricted_jobs)
- for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist
- for(var/job in restricted_jobs)
- if(player.assigned_role == job)
- drafted -= player
-
- drafted = shuffle(drafted) // Will hopefully increase randomness, Donkie
-
- while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates
- if(drafted.len > 0)
- applicant = pick(drafted)
- if(applicant)
- candidates += applicant
- log_debug("[applicant.key] was force-drafted as [roletext], because there aren't enough candidates.")
- drafted.Remove(applicant)
-
- else // Not enough scrubs, ABORT ABORT ABORT
- break
-
- if(candidates.len < recommended_enemies && override_jobbans) //If we still don't have enough people, we're going to start drafting banned people.
- for(var/mob/new_player/player in players)
- if (player.client && player.ready)
- if(jobban_isbanned(player, "Syndicate") || jobban_isbanned(player, roletext)) //Nodrak/Carn: Antag Job-bans
- drafted += player.mind
-
- if(restricted_jobs)
- for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist
- for(var/job in restricted_jobs)
- if(player.assigned_role == job)
- drafted -= player
-
- drafted = shuffle(drafted) // Will hopefully increase randomness, Donkie
-
- while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates
- if(drafted.len > 0)
- applicant = pick(drafted)
- if(applicant)
- candidates += applicant
- drafted.Remove(applicant)
- log_debug("[applicant.key] was force-drafted as [roletext], because there aren't enough candidates.")
-
- else // Not enough scrubs, ABORT ABORT ABORT
- break
- */
return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than recommended_enemies
// recommended_enemies if the number of people with that role set to yes is less than recomended_enemies,
@@ -336,7 +285,7 @@
/datum/game_mode/proc/latespawn(var/mob)
/*
-/datum/game_mode/proc/check_player_role_pref(var/role, var/mob/new_player/player)
+/datum/game_mode/proc/check_player_role_pref(var/role, var/mob/player)
if(player.preferences.be_special & role)
return 1
return 0
@@ -489,22 +438,7 @@ proc/get_nt_opposed()
obj_count++
/proc/get_roletext(var/role)
- var/roletext
- switch(role)
- if(BE_CHANGELING) roletext="changeling"
- if(BE_TRAITOR) roletext="traitor"
- if(BE_OPERATIVE) roletext="operative"
- if(BE_WIZARD) roletext="wizard"
- if(BE_MALF) roletext="malf AI"
- if(BE_REV) roletext="revolutionary"
- if(BE_CULTIST) roletext="cultist"
- if(BE_NINJA) roletext="ninja"
- if(BE_RAIDER) roletext="raider"
- if(BE_VAMPIRE) roletext="vampire"
- if(BE_ALIEN) roletext="alien"
- if(BE_MUTINEER) roletext="mutineer"
- if(BE_BLOB) roletext="blob"
- return roletext
+ return role
/proc/get_nuke_code()
var/nukecode = "ERROR"
diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm
index e6d4914ad3a..229993ee50c 100644
--- a/code/game/gamemodes/heist/heist.dm
+++ b/code/game/gamemodes/heist/heist.dm
@@ -33,7 +33,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
if(!..())
return 0
- var/list/candidates = get_players_for_role(BE_RAIDER)
+ var/list/candidates = get_players_for_role(ROLE_RAIDER)
var/raider_num = 0
//Check that we have enough vox.
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index f206fee3591..4d436e29ca9 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -25,13 +25,13 @@
The AI on the satellite has malfunctioned and must be destroyed.
The AI satellite is deep in space and can only be accessed with the use of a teleporter! You have [AI_win_timeleft/60] minutes to disable it."}
-/datum/game_mode/malfunction/get_players_for_role(var/role = BE_MALF)
+/datum/game_mode/malfunction/get_players_for_role(var/role = ROLE_MALF)
var/roletext = get_roletext(role)
var/datum/job/ai/DummyAIjob = new
for(var/mob/new_player/player in player_list)
if(player.client && player.ready)
- if(player.client.prefs.be_special & BE_MALF)
+ if(ROLE_MALF in player.client.prefs.be_special)
if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, "AI") && !jobban_isbanned(player, roletext) && DummyAIjob.player_old_enough(player.client))
if(player_old_enough_antag(player.client,role))
antag_candidates += player.mind
@@ -39,7 +39,7 @@
return antag_candidates
/datum/game_mode/malfunction/pre_setup()
- get_players_for_role(BE_MALF)
+ get_players_for_role(ROLE_MALF)
var/datum/mind/chosen_ai
if(!antag_candidates.len)
diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm
index a198fb21eac..1d2faebe5ff 100644
--- a/code/game/gamemodes/mutiny/mutiny.dm
+++ b/code/game/gamemodes/mutiny/mutiny.dm
@@ -80,7 +80,7 @@ datum/game_mode/mutiny
proc/get_head_mutineer_candidates()
var/list/candidates[0]
for(var/mob/mutineer in player_list)
- if(mutineer.client.prefs.be_special & BE_MUTINEER)
+ if(ROLE_MUTINEER in mutineer.client.prefs.be_special)
if(!jobban_isbanned(mutineer, "mutineer") && !jobban_isbanned(mutineer,"Syndicate"))
for(var/job in command_positions - "Captain")
if(mutineer.mind && mutineer.mind.assigned_role == job)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 007e1c1da04..bfcb53db43c 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -31,7 +31,7 @@ proc/issyndicate(mob/living/M as mob)
if(!..())
return 0
- var/list/possible_syndicates = get_players_for_role(BE_OPERATIVE)
+ var/list/possible_syndicates = get_players_for_role(ROLE_OPERATIVE)
var/agent_number = 0
if(possible_syndicates.len < 1)
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 714ad3d5870..345114a4088 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -45,7 +45,7 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/datum/mind/possible_headrevs = get_players_for_role(BE_REV)
+ var/list/datum/mind/possible_headrevs = get_players_for_role(ROLE_REV)
for (var/i=1 to max_headrevs)
if(possible_headrevs.len==0)
diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm
index 3e9c18bca12..ef2ec130047 100644
--- a/code/game/gamemodes/revolution/rp_revolution.dm
+++ b/code/game/gamemodes/revolution/rp_revolution.dm
@@ -1,4 +1,5 @@
// BS12's less violent revolution mode
+// Isn't this basically mutiny but without any real reason
/datum/game_mode/revolution/rp_revolution
name = "rp-revolution"
@@ -29,7 +30,7 @@
max_headrevs = max(num_players / 4, 3)
recommended_enemies = max_headrevs
- var/list/datum/mind/possible_headrevs = get_players_for_role(BE_REV)
+ var/list/datum/mind/possible_headrevs = get_players_for_role(ROLE_REV)
var/head_check = 0
for(var/mob/new_player/player in player_list)
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index fd1ac61ef80..551fb869839 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -78,7 +78,7 @@ Made by Xhuis
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/datum/mind/possible_shadowlings = get_players_for_role(BE_SHADOWLING)
+ var/list/datum/mind/possible_shadowlings = get_players_for_role(ROLE_SHADOWLING)
if(!possible_shadowlings.len)
return 0
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index a94cda0f3cf..df18240e7bf 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -34,7 +34,7 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/possible_traitors = get_players_for_role(BE_TRAITOR)
+ var/list/possible_traitors = get_players_for_role(ROLE_TRAITOR)
// stop setup if no possible traitors
if(!possible_traitors.len)
diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm
index 14266ef9f15..0931adfe4ef 100644
--- a/code/game/gamemodes/vampire/vampire.dm
+++ b/code/game/gamemodes/vampire/vampire.dm
@@ -47,7 +47,7 @@
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- var/list/datum/mind/possible_vampires = get_players_for_role(BE_VAMPIRE)
+ var/list/datum/mind/possible_vampires = get_players_for_role(ROLE_VAMPIRE)
vampire_amount = 1 + round(num_players() / 10)
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 0a95335a99a..2adbf74726c 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -49,7 +49,7 @@
if (used)
H << "You already used this contract!"
return
- var/list/candidates = get_candidates(BE_WIZARD)
+ var/list/candidates = get_candidates(ROLE_WIZARD)
if(candidates.len)
src.used = 1
var/client/C = pick(candidates)
@@ -294,7 +294,7 @@ var/global/list/multiverse = list()
usr.mind.special_role = "[usr.real_name] Prime"
evil = FALSE
else
- var/list/candidates = get_candidates(BE_WIZARD)
+ var/list/candidates = get_candidates(ROLE_WIZARD)
if(candidates.len)
var/client/C = pick(candidates)
spawn_copy(C, get_turf(user.loc), user)
diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm
index 81684f83e37..30af14862cd 100644
--- a/code/game/gamemodes/wizard/raginmages.dm
+++ b/code/game/gamemodes/wizard/raginmages.dm
@@ -17,7 +17,7 @@
..()
if(!max_mages)
for(var/mob/living/player in mob_list)
- if (player.client && player.stat != 2)
+ if (player.client && player.stat != DEAD)
playercount += 1
max_mages = round(playercount / 5)
@@ -40,12 +40,12 @@
continue
if(istype(wizard.current,/mob/living/carbon/brain))
continue
- if(wizard.current.stat==2)
+ if(wizard.current.stat==DEAD)
continue
- if(wizard.current.stat==1)
+ if(wizard.current.stat==UNCONSCIOUS)
if(wizard.current.health < 0)
wizard.current << "\red The Space Wizard Federation is upset with your performance and have terminated your employment."
- wizard.current.stat = 2
+ wizard.current.death()
continue
wizards_alive++
@@ -73,7 +73,7 @@
var/mob/dead/observer/theghost = null
spawn(rand(200, 600))
message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.")
- candidates = get_candidates(BE_WIZARD)
+ candidates = get_candidates(ROLE_WIZARD)
if(!candidates.len)
message_admins("No applicable ghosts for the next ragin' mage, asking ghosts instead.")
var/time_passed = world.time
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index 8b7267408b9..45beb619642 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -23,7 +23,7 @@
/datum/game_mode/wizard/can_start()//This could be better, will likely have to recode it later
if(!..())
return 0
- var/list/datum/mind/possible_wizards = get_players_for_role(BE_WIZARD)
+ var/list/datum/mind/possible_wizards = get_players_for_role(ROLE_WIZARD)
if(possible_wizards.len==0)
return 0
var/datum/mind/wizard = pick(possible_wizards)
@@ -211,7 +211,7 @@
for(var/datum/mind/wizard in wizards)
if(!istype(wizard.current,/mob/living/carbon))
continue
- if(wizard.current.stat==2)
+ if(wizard.current.stat==DEAD)
continue
wizards_alive++
@@ -219,7 +219,7 @@
for(var/datum/mind/traitor in traitors)
if(!istype(traitor.current,/mob/living/carbon))
continue
- if(traitor.current.stat==2)
+ if(traitor.current.stat==DEAD)
continue
traitors_alive++
@@ -269,7 +269,7 @@
wizardwin = 0
count++
- if(wizard.current && wizard.current.stat!=2 && wizardwin)
+ if(wizard.current && wizard.current.stat!=DEAD && wizardwin)
text += "
The wizard was successful!"
feedback_add_details("wizard_success","SUCCESS")
else
diff --git a/code/game/gamemodes/xenos/xenos.dm b/code/game/gamemodes/xenos/xenos.dm
index f73b398c20d..f30debb7e98 100644
--- a/code/game/gamemodes/xenos/xenos.dm
+++ b/code/game/gamemodes/xenos/xenos.dm
@@ -25,7 +25,7 @@
if(!..())
return 0
- var/list/candidates = get_players_for_role(BE_ALIEN)
+ var/list/candidates = get_players_for_role(ROLE_ALIEN)
var/playersready = 0
var/xenos_num
for(var/mob/new_player/player in player_list)
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 9a34e2e1524..f5dc80dcae7 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -94,7 +94,7 @@ var/global/datum/controller/occupations/job_master
if(!job.player_old_enough(player.client))
Debug("FOC player not old enough, Player: [player]")
continue
- if(flag && (!player.client.prefs.be_special & flag))
+ if(flag && !(flag in player.client.prefs.be_special))
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
continue
if(player.mind && job.title in player.mind.restricted_roles)
diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm
index 3725a3e929d..49c1fb8d325 100644
--- a/code/game/machinery/Freezer.dm
+++ b/code/game/machinery/Freezer.dm
@@ -43,7 +43,7 @@
T += M.rating
min_temperature = max(0,T0C - (170 + (T*15)))
current_heat_capacity = 1000 * ((H - 1) ** 2)
-
+
/obj/machinery/atmospherics/unary/cold_sink/freezer/construction()
..(dir,dir)
@@ -62,8 +62,10 @@
if(!panel_open)
user << "Open the maintenance panel first."
return
+ var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH)
+ var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices
+ dir = choices[selected]
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- dir = pick(WEST,EAST,SOUTH,NORTH)
var/node_connect = dir
initialize_directions = dir
for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
@@ -84,7 +86,7 @@
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_ai(mob/user as mob)
attack_hand(user)
-
+
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_ghost(mob/user as mob)
attack_hand(user)
@@ -92,7 +94,7 @@
if(panel_open)
user << "Close the maintenance panel first."
return
-
+
src.ui_interact(user)
/obj/machinery/atmospherics/unary/cold_sink/freezer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
@@ -193,8 +195,8 @@
RefreshParts()
/obj/machinery/atmospherics/unary/heat_reservoir/heater/construction()
- ..(dir,dir)
-
+ ..(dir,dir)
+
/obj/machinery/atmospherics/unary/heat_reservoir/heater/RefreshParts()
var/H
var/T
@@ -220,8 +222,10 @@
if(!panel_open)
user << "Open the maintenance panel first."
return
+ var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH)
+ var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices
+ dir = choices[selected]
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- dir = pick(WEST,EAST,SOUTH,NORTH)
var/node_connect = dir
initialize_directions = dir
for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
@@ -242,9 +246,9 @@
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_ai(mob/user as mob)
attack_hand(user)
-
+
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_ghost(mob/user as mob)
- src.attack_hand(user)
+ src.attack_hand(user)
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_hand(mob/user as mob)
if(panel_open)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index f05ab015c49..0a87b6c61fd 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -865,10 +865,10 @@
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs."
vend_delay = 34
icon_state = "cigs"
- products = list(/obj/item/weapon/storage/fancy/cigarettes = 5,/obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3,/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2,/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3,/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1,/obj/item/weapon/storage/fancy/cigarettes/cigpack_random = 2,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 4,/obj/item/weapon/rollingpaperpack = 5)
+ products = list(/obj/item/weapon/storage/fancy/cigarettes = 5,/obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3,/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2,/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3,/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1,/obj/item/weapon/storage/fancy/cigarettes/cigpack_random = 2, /obj/item/weapon/reagent_containers/pill/patch/nicotine = 10, /obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 4,/obj/item/weapon/rollingpaperpack = 5)
contraband = list(/obj/item/weapon/lighter/zippo = 4)
premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2,/obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold = 1)
- prices = list(/obj/item/weapon/storage/fancy/cigarettes = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_random = 150,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 60, /obj/item/weapon/rollingpaperpack = 20)
+ prices = list(/obj/item/weapon/storage/fancy/cigarettes = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 60,/obj/item/weapon/storage/fancy/cigarettes/cigpack_random = 150, /obj/item/weapon/reagent_containers/pill/patch/nicotine = 15, /obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 60, /obj/item/weapon/rollingpaperpack = 20)
refill_canister = /obj/item/weapon/vending_refill/cigarette
/obj/machinery/vending/cigarette/New()
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index b8a90698e2a..eb0cb3abf63 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -198,7 +198,7 @@
S.faction = faction
S.master_commander = master_commander
if(player_spiders)
- var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET)
+ var/list/candidates = get_candidates(ROLE_ALIEN, ALIEN_AFK_BRACKET)
var/client/C = null
if(candidates.len)
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 50fb3e60ad8..7a0c29b3bfa 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -150,6 +150,17 @@
new /obj/item/clothing/head/helmet/space/rig/syndi(src)
return
+/obj/item/weapon/storage/box/syndie_kit/elite_hardsuit
+ name = "Boxed Elite Syndicate Hardsuit and Helmet"
+ can_hold = list("/obj/item/clothing/suit/space/rig/syndi/elite", "/obj/item/clothing/head/helmet/space/rig/syndi/elite")
+ max_w_class = 3
+
+/obj/item/weapon/storage/box/syndie_kit/elite_hardsuit/New()
+ ..()
+ new /obj/item/clothing/suit/space/rig/syndi/elite(src)
+ new /obj/item/clothing/head/helmet/space/rig/syndi/elite(src)
+ return
+
/obj/item/weapon/storage/box/syndie_kit/conversion
name = "box (CK)"
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index ad25fab49ce..798dd02b85f 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -33,7 +33,7 @@ client/proc/one_click_antag()
var/datum/mind/themind = null
for(var/mob/living/silicon/ai/ai in player_list)
- if(ai.client && ai.client.prefs.be_special & BE_MALF)
+ if(ai.client && (ROLE_MALF in ai.client.prefs.be_special))
AIs += ai
if(AIs.len)
@@ -57,8 +57,8 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/H = null
for(var/mob/living/carbon/human/applicant in player_list)
- if(applicant.client.prefs.be_special & BE_TRAITOR)
- if(player_old_enough_antag(applicant.client,BE_TRAITOR))
+ if(ROLE_TRAITOR in applicant.client.prefs.be_special)
+ if(player_old_enough_antag(applicant.client,ROLE_TRAITOR))
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
@@ -91,8 +91,8 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/H = null
for(var/mob/living/carbon/human/applicant in player_list)
- if(applicant.client.prefs.be_special & BE_CHANGELING)
- if(player_old_enough_antag(applicant.client,BE_CHANGELING))
+ if(ROLE_CHANGELING in applicant.client.prefs.be_special)
+ if(player_old_enough_antag(applicant.client,ROLE_CHANGELING))
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
@@ -123,8 +123,8 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/H = null
for(var/mob/living/carbon/human/applicant in player_list)
- if(applicant.client.prefs.be_special & BE_REV)
- if(player_old_enough_antag(applicant.client,BE_REV))
+ if(ROLE_REV in applicant.client.prefs.be_special)
+ if(player_old_enough_antag(applicant.client,ROLE_REV))
if(applicant.stat == CONSCIOUS)
if(applicant.mind)
if(!applicant.mind.special_role)
@@ -150,9 +150,9 @@ client/proc/one_click_antag()
var/time_passed = world.time
for(var/mob/G in respawnable_list)
- if(istype(G) && G.client && G.client.prefs.be_special & BE_WIZARD)
+ if(istype(G) && G.client && (ROLE_WIZARD in G.client.prefs.be_special))
if(!jobban_isbanned(G, "wizard") && !jobban_isbanned(G, "Syndicate"))
- if(player_old_enough_antag(G.client,BE_WIZARD))
+ if(player_old_enough_antag(G.client,ROLE_WIZARD))
spawn(0)
switch(G.timed_alert("Do you wish to be considered for the position of Space Wizard Foundation 'diplomat'?","Please answer in 30 seconds!","No",300,"Yes","No"))//alert(G, "Do you wish to be considered for the position of Space Wizard Foundation 'diplomat'?","Please answer in 30 seconds!","Yes","No"))
if("Yes")
@@ -192,8 +192,8 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/H = null
for(var/mob/living/carbon/human/applicant in player_list)
- if(applicant.client.prefs.be_special & BE_CULTIST)
- if(player_old_enough_antag(applicant.client,BE_CULTIST))
+ if(ROLE_CULTIST in applicant.client.prefs.be_special)
+ if(player_old_enough_antag(applicant.client,ROLE_CULTIST))
if(applicant.stat == CONSCIOUS)
if(applicant.mind)
if(!applicant.mind.special_role)
@@ -224,9 +224,9 @@ client/proc/one_click_antag()
var/time_passed = world.time
for(var/mob/G in respawnable_list)
- if(istype(G) && G.client && G.client.prefs.be_special & BE_OPERATIVE)
+ if(istype(G) && G.client && (ROLE_OPERATIVE in G.client.prefs.be_special))
if(!jobban_isbanned(G, "operative") && !jobban_isbanned(G, "Syndicate"))
- if(player_old_enough_antag(G.client,BE_OPERATIVE))
+ if(player_old_enough_antag(G.client,ROLE_OPERATIVE))
spawn(0)
switch(alert(G,"Do you wish to be considered for a nuke team being sent in?","Please answer in 30 seconds!","Yes","No"))
if("Yes")
@@ -442,8 +442,8 @@ client/proc/one_click_antag()
//Generates a list of candidates from active ghosts.
for(var/mob/G in respawnable_list)
- if(istype(G) && G.client && G.client.prefs.be_special & BE_RAIDER)
- if(player_old_enough_antag(G.client,BE_RAIDER))
+ if(istype(G) && G.client && (ROLE_RAIDER in G.client.prefs.be_special))
+ if(player_old_enough_antag(G.client,ROLE_RAIDER))
if(!jobban_isbanned(G, "raider") && !jobban_isbanned(G, "Syndicate"))
spawn(0)
switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No"))
@@ -543,8 +543,8 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/H = null
for(var/mob/living/carbon/human/applicant in player_list)
- if(applicant.client.prefs.be_special & BE_VAMPIRE)
- if(player_old_enough_antag(applicant.client,BE_VAMPIRE))
+ if(ROLE_VAMPIRE in applicant.client.prefs.be_special)
+ if(player_old_enough_antag(applicant.client,ROLE_VAMPIRE))
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 40d8bc80671..e428f25fc39 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -444,7 +444,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/list/candidates = list()
for(var/mob/M in player_list)
if(M.stat != DEAD) continue //we are not dead!
- if(!M.client.prefs.be_special & BE_ALIEN) continue //we don't want to be an alium
+ if(!(ROLE_ALIEN in M.client.prefs.be_special)) continue //we don't want to be an alium
if(jobban_isbanned(M, "alien") || jobban_isbanned(M, "Syndicate")) continue //we are jobbanned
if(M.client.is_afk()) continue //we are afk
if(M.mind && M.mind.current && M.mind.current.stat != DEAD) continue //we have a live body we are tied to
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index f37b8dd2e24..d82d029a530 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -204,6 +204,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
save_preferences(C)
save_character(C) //let's save this new random character so it doesn't keep generating new ones.
+
+// Hello I am a proc full of snowflake species checks how are you
/datum/preferences/proc/ShowChoices(mob/user)
if(!user || !user.client) return
update_preview_icon()
@@ -412,7 +414,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "