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 += "" dat += "

Special Role Settings

" -// dat += "

" +// dat += "

" if(jobban_isbanned(user, "Syndicate")) dat += "You are banned from special roles." src.be_special = list() @@ -434,7 +436,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Reset Setup" dat += "" -// user << browse(dat, "window=preferences;size=560x580") +// user << browse(dat, "window=preferences;size=560x580") var/datum/browser/popup = new(user, "preferences", "
Character Setup
", 640, 810) popup.set_content(dat) popup.open(0) @@ -1132,6 +1134,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts ha_style = "None" // No Vulp ears on Unathi m_style = "None" // No Unathi markings on Tajara + body_accessory = null //no vulpatail on humans damnit if("speciesprefs")//oldvox code speciesprefs = !speciesprefs @@ -1673,6 +1676,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.g_markings = g_markings character.b_markings = b_markings character.m_style = m_style + if(body_accessory) character.body_accessory = body_accessory_by_name["[body_accessory]"] @@ -1687,6 +1691,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.gender = MALE /datum/preferences/proc/open_load_dialog(mob/user) + var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM [format_table_name("characters")] WHERE ckey='[user.ckey]' ORDER BY slot") var/dat = "" diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index 8f763ac4edb..7f17b95674f 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -36,7 +36,7 @@ volume = text2num(query.item[10]) old_roles_to_new(C) - + //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) // lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) @@ -118,6 +118,8 @@ facial_style_name, marking_style_name, head_accessory_style_name, + hair_style_name, + facial_style_name, eyes_red, eyes_green, eyes_blue, @@ -150,7 +152,7 @@ speciesprefs, socks, body_accessory - FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' AND slot='[slot]'"}) + FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' AND slot='[slot]'"}) if(!query.Execute()) var/err = query.ErrorMsg() log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n") @@ -429,7 +431,6 @@ return return 1 - // If you see this proc lying around and don't know why it's there, expunge it, as this is for a short-term DB update, starting 27/12/2015 // 0 on failed update, 1 on success /datum/preferences/proc/old_roles_to_new(var/client/C) @@ -536,4 +537,4 @@ load_character(C) return 0 load_character(C,pick(saves)) - return 1*/ + return 1*/ \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 362d60e8dd9..f462bce2ee2 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -264,6 +264,7 @@ BLIND // can't see anything var/flash_protect = 0 var/tint = 0 var/HUDType = null + var/darkness_view = 0 var/vision_flags = 0 var/see_darkness = 1 diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index c96702b54b7..bc6d6f995cf 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -364,6 +364,27 @@ user.update_inv_wear_suit() user.update_inv_w_uniform() +//Elite Syndie suit +/obj/item/clothing/head/helmet/space/rig/syndi/elite + name = "elite syndicate hardsuit helmet" + desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders." + icon_state = "hardsuit0-syndielite" + item_color = "syndielite" + armor = list(melee = 80, bullet = 70, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70) + heat_protection = HEAD + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + sprite_sheets = null + +/obj/item/clothing/suit/space/rig/syndi/elite + name = "elite syndicate hardsuit" + desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in travel mode." + icon_state = "hardsuit0-syndielite" + item_color = "syndielite" + armor = list(melee = 80, bullet = 70, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70) + heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + sprite_sheets = null + //Wizard Rig /obj/item/clothing/head/helmet/space/rig/wizard name = "gem-encrusted hardsuit helmet" diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index a59f4eeac42..ccc0ef94191 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -21,7 +21,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) while(spawncount > 0 && vents.len && candidates.len) var/obj/vent = pick_n_take(vents) @@ -33,4 +33,4 @@ spawncount-- successSpawn = 1 - + diff --git a/code/modules/events/borers.dm b/code/modules/events/borers.dm index d1620e45be7..d716b1df6c5 100644 --- a/code/modules/events/borers.dm +++ b/code/modules/events/borers.dm @@ -22,7 +22,7 @@ if(temp_vent.parent.other_atmosmch.len > 50) vents += temp_vent - var/list/candidates = get_candidates(BE_ALIEN,ALIEN_AFK_BRACKET) + var/list/candidates = get_candidates(ROLE_BORER,ALIEN_AFK_BRACKET) while(spawncount > 0 && vents.len && candidates.len) var/obj/vent = pick_n_take(vents) var/client/C = pick_n_take(candidates) @@ -32,4 +32,4 @@ spawncount-- successSpawn = 1 - + diff --git a/code/modules/events/slaughterevent.dm b/code/modules/events/slaughterevent.dm index c0f1ae75184..0889f8d8136 100644 --- a/code/modules/events/slaughterevent.dm +++ b/code/modules/events/slaughterevent.dm @@ -4,7 +4,7 @@ /datum/event/spawn_slaughter/proc/get_slaughter(var/end_if_fail = 0) key_of_slaughter = null if(!key_of_slaughter) - var/list/candidates = get_candidates(BE_ALIEN) + var/list/candidates = get_candidates(ROLE_DEMON) if(!candidates.len) if(end_if_fail) return 0 @@ -55,4 +55,3 @@ return 0 message_admins("Unfortunately, no candidates were available for becoming a Slaugter Demon. Shutting down.") kill() - \ No newline at end of file diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm index b7fd3b4fdfd..57579a3a797 100644 --- a/code/modules/hydroponics/seed_mobs.dm +++ b/code/modules/hydroponics/seed_mobs.dm @@ -2,80 +2,4 @@ var/list/currently_querying // Used to avoid asking the same ghost repeatedly. // The following procs are used to grab players for mobs produced by a seed (mostly for dionaea). -/datum/seed/proc/handle_living_product(var/mob/living/host) -/* - if(!host || !istype(host)) return - - spawn(0) - request_player(host) - if(istype(host,/mob/living/simple_animal)) - return - spawn(75) - if(!host.ckey && !host.client) - host.death() // This seems redundant, but a lot of mobs don't - host.stat = DEAD // handle death() properly. Better safe than etc. - host.visible_message("[host] is malformed and unable to survive. It expires pitifully, leaving behind some seeds.") - - var/total_yield = rand(1,3) - for(var/j = 0;j<=total_yield;j++) - var/obj/item/seeds/S = new(get_turf(host)) - S.seed_type = name - S.update_seed() - -/datum/seed/proc/request_player(var/mob/living/host) - if(!host) return - for(var/mob/dead/observer/O in player_list) - if(jobban_isbanned(O, "Dionaea")) - continue - if(O.client) - if(O.client.prefs.be_special & BE_PLANT && !(O.client in currently_querying)) - currently_querying |= O.client - question(O.client,host) - -/datum/seed/proc/question(var/client/C,var/mob/living/host) - spawn(0) - - if(!C || !host || !(C.mob && istype(C.mob,/mob/dead))) return // We don't want to spam them repeatedly if they're already in a mob. - - var/response = alert(C, "Someone is harvesting [display_name]. Would you like to play as one?", "Sentient plant harvest", "Yes", "No", "Never for this round.") - - if(!C || !host || !(C.mob && istype(C.mob,/mob/dead))) return // ...or accidentally accept an invalid argument for transfer. - - if(response == "Yes") - transfer_personality(C,host) - else if (response == "Never for this round") - C.prefs.be_special ^= BE_PLANT - - currently_querying -= C - -/datum/seed/proc/transfer_personality(var/client/player,var/mob/living/host) - - //Something is wrong, abort. - if(!player || !host) return - - //Host already has a controller, pike off slowpoke. - if(host.client && host.ckey) return - - //Transfer them over. - host.ckey = player.ckey - if(player.mob && player.mob.mind) - player.mob.mind.transfer_to(host) - - if(host.dna) host.dna.real_name = host.real_name - - // Update mode specific HUD icons. - callHook("harvest_podman", list(host)) - - host << "\green You awaken slowly, stirring into sluggish motion as the air caresses you." - - // This is a hack, replace with some kind of species blurb proc. - if(istype(host,/mob/living/simple_animal/diona)) - host << "You are [host], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders." - host << "Too much darkness will send you into shock and starve you, but light will help you heal." - - var/newname = input(host,"Enter a name, or leave blank for the default name.", "Name change","") as text - newname = sanitize(newname) - if (newname != "") - host.real_name = newname - host.name = host.real_name -*/ \ No newline at end of file +/datum/seed/proc/handle_living_product(var/mob/living/host) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 5494b199a87..5ffe45a8123 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -83,7 +83,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds AttemptGrow() /obj/item/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) - var/list/candidates = get_candidates(BE_ALIEN,ALIEN_AFK_BRACKET,1) + var/list/candidates = get_candidates(ROLE_ALIEN,ALIEN_AFK_BRACKET,1) var/client/C = null // To stop clientless larva, we will check that our host has a client diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 67caeb2788c..d76b7dea569 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -32,8 +32,9 @@ /obj/item/device/mmi/posibrain/proc/request_player() for(var/mob/dead/observer/O in player_list) if(check_observer(O)) - O << "\blue \A [src] has been activated. (Teleport | Sign Up)" - //question(O.client) + O << "\A [src] has been activated. (Teleport | Sign Up)" +// if(ROLE_POSIBRAIN in O.client.prefs.be_special) The Guardian implementation looks cleaner +// question(O.client) /obj/item/device/mmi/posibrain/proc/check_observer(var/mob/dead/observer/O) if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) @@ -52,7 +53,7 @@ if(response == "Yes") transfer_personality(C.mob) else if (response == "Never for this round") - C.prefs.be_special ^= BE_PAI + C.prefs.be_special -= ROLE_POSIBRAIN // This should not ever happen, but let's be safe /obj/item/device/mmi/posibrain/dropbrain(var/turf/dropspot) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index bf0702f5f9e..6cff7f5f7a0 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -413,6 +413,7 @@ if(H.client) H.client.screen += global_hud.darkMask + var/minimum_darkness_view = INFINITY if(H.glasses) if(istype(H.glasses, /obj/item/clothing/glasses)) var/obj/item/clothing/glasses/G = H.glasses @@ -420,6 +421,7 @@ if(G.darkness_view) H.see_in_dark = G.darkness_view + minimum_darkness_view = G.darkness_view if(!G.see_darkness) H.see_invisible = SEE_INVISIBLE_MINIMUM @@ -437,6 +439,9 @@ var/obj/item/clothing/head/hat = H.head H.sight |= hat.vision_flags + if(hat.darkness_view && hat.darkness_view < minimum_darkness_view) // Pick the lowest of the two darkness_views between the glasses and helmet. + H.see_in_dark = hat.darkness_view + if(!hat.see_darkness) H.see_invisible = SEE_INVISIBLE_MINIMUM diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 4abae727c73..96680de98b8 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -789,7 +789,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 user << "You offer the sentience potion to [M]..." being_used = 1 - var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET) + var/list/candidates = get_candidates(ROLE_SENTIENT, ALIEN_AFK_BRACKET) shuffle(candidates) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 768b46c2283..fe785adf929 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -348,15 +348,15 @@ var/datum/paiController/paiController // Global handler for pAI candidates 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(O.client && (ROLE_PAI in O.client.prefs.be_special)) + if(player_old_enough_antag(O.client,ROLE_PAI)) if(check_recruit(O)) 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")) return 0 - if(!player_old_enough_antag(O.client,BE_PAI)) + if(!player_old_enough_antag(O.client,ROLE_PAI)) return 0 if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) return 0 diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 4b38f79c2cc..005b1194821 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -259,7 +259,7 @@ if(jobban_isbanned(O,"nonhumandept") || jobban_isbanned(O,"Drone")) continue if(O.client) - if(O.client.prefs.be_special & BE_PAI) + if(ROLE_PAI in O.client.prefs.be_special) question(O.client,O) /mob/living/silicon/robot/drone/proc/question(var/client/C,var/mob/M) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index ab593967725..34ec44a4245 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -16,7 +16,7 @@ if (!message) return log_say("[key_name(src)] : [message]") - if (stat == 2) + if (stat == DEAD) return say_dead(message) var/mob/living/simple_animal/borer/B = src.loc src << "You whisper silently, \"[message]\"" @@ -302,7 +302,7 @@ detatch() leave_host() -mob/living/simple_animal/borer/proc/detatch() +/mob/living/simple_animal/borer/proc/detatch() if(!host) return @@ -416,7 +416,7 @@ mob/living/simple_animal/borer/proc/detatch() src << "You cannot infest a target in your current state." return - if(M.stat == 2) + if(M.stat == DEAD) src << "That is not an appropriate target." return @@ -457,15 +457,15 @@ mob/living/simple_animal/borer/proc/detatch() return //Procs for grabbing players. -mob/living/simple_animal/borer/proc/request_player() +/mob/living/simple_animal/borer/proc/request_player() for(var/mob/O in respawnable_list) if(jobban_isbanned(O, "Syndicate")) continue if(O.client) - if(O.client.prefs.be_special & BE_ALIEN && !jobban_isbanned(O, "alien")) + if((ROLE_BORER in O.client.prefs.be_special) && !jobban_isbanned(O, "alien")) question(O.client) -mob/living/simple_animal/borer/proc/question(var/client/C) +/mob/living/simple_animal/borer/proc/question(var/client/C) spawn(0) if(!C) return var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round") @@ -474,9 +474,9 @@ mob/living/simple_animal/borer/proc/question(var/client/C) if(response == "Yes") transfer_personality(C) else if (response == "Never for this round") - C.prefs.be_special ^= BE_ALIEN + C.prefs.be_special -= ROLE_BORER -mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) +/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) if(!candidate) return diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index fefd94092b0..b202fd9bf81 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -641,7 +641,7 @@ return used = TRUE user << "[use_message]" - var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the [mob_name] of [user.real_name]?",BE_PAI, null, FALSE, 100) + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the [mob_name] of [user.real_name]?",ROLE_GUARDIAN, null, FALSE, 100) var/mob/dead/observer/theghost = null if(candidates.len) diff --git a/code/modules/mob/living/simple_animal/revenant/revenant.dm b/code/modules/mob/living/simple_animal/revenant/revenant.dm index 70edbc27dd3..dfe8d1838e0 100644 --- a/code/modules/mob/living/simple_animal/revenant/revenant.dm +++ b/code/modules/mob/living/simple_animal/revenant/revenant.dm @@ -442,7 +442,7 @@ if(!key_of_revenant) message_admins("The new revenant's old client either could not be found or is in a new, living mob - grabbing a random candidate instead...") - var/list/candidates = get_candidates(BE_REVENANT) + var/list/candidates = get_candidates(ROLE_REVENANT) if(!candidates.len) qdel(R) message_admins("No candidates were found for the new revenant. Oh well!") diff --git a/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm b/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm index 0f1b3545391..57ebb983e72 100644 --- a/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm +++ b/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm @@ -13,7 +13,7 @@ return key_of_revenant = null if(!key_of_revenant) - var/list/candidates = get_candidates(BE_REVENANT) + var/list/candidates = get_candidates(ROLE_REVENANT) if(!candidates.len) if(end_if_fail) return 0 diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/newchem/drugs.dm index c27bef559ae..69679560ef8 100644 --- a/code/modules/reagents/newchem/drugs.dm +++ b/code/modules/reagents/newchem/drugs.dm @@ -15,7 +15,7 @@ /datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.") + var/smoke_message = pick("You feel relaxed.", "You feel calmed.", "You feel less stressed.", "You feel more placid.", "You feel more undivided.") if(prob(5)) M << "[smoke_message]" if(prob(50)) @@ -27,8 +27,6 @@ return /datum/reagent/nicotine/overdose_process(var/mob/living/M as mob) - if(prob(20)) - M << "You feel like you smoked too much." M.adjustToxLoss(1*REM) M.adjustOxyLoss(1*REM) ..() diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm index a3dc47f26a4..92aa05c0280 100644 --- a/code/modules/reagents/newchem/newchem_procs.dm +++ b/code/modules/reagents/newchem/newchem_procs.dm @@ -45,7 +45,6 @@ datum/reagents/proc/metabolize(var/mob/M) if(M && R) if(R.volume >= R.overdose_threshold && !R.overdosed && R.overdose_threshold > 0) R.overdosed = 1 - M << "You feel like you took too much [R.name]!" R.overdose_start(M) if(R.volume < R.overdose_threshold && R.overdosed) R.overdosed = 0 diff --git a/code/modules/reagents/newchem/patch.dm b/code/modules/reagents/newchem/patch.dm index 1e71a84d304..7901c97cbc0 100644 --- a/code/modules/reagents/newchem/patch.dm +++ b/code/modules/reagents/newchem/patch.dm @@ -36,4 +36,11 @@ desc = "Helps with burn injuries." New() ..() - reagents.add_reagent("synthflesh", 20) \ No newline at end of file + reagents.add_reagent("synthflesh", 20) + +/obj/item/weapon/reagent_containers/pill/patch/nicotine + name = "nicotine patch" + desc = "Helps temporarily curb the cravings of nicotine dependency." + New() + ..() + reagents.add_reagent("nicotine", 20) \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 0dd38567ccc..81ed8f644ac 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -144,13 +144,16 @@ confused_start = 100 //copy paste from LSD... shoot me -/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/M) +/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/living/M) if(!M) M = holder.my_atom if(!data) data = 1 data++ - M:hallucination += 5 - if(volume > overdose_threshold) - M:adjustToxLoss(1) + M.hallucination += 5 + ..() + return + +/datum/reagent/ethanol/absinthe/overdose_process(mob/living/M) + M.adjustToxLoss(1) ..() return @@ -164,8 +167,11 @@ /datum/reagent/ethanol/rum/on_mob_life(var/mob/living/M as mob) ..() M.dizziness +=5 - if(volume > overdose_threshold) - M:adjustToxLoss(1) + return + +/datum/reagent/ethanol/rum/overdose_process(mob/living/M) + M.adjustToxLoss(1) + ..() return /datum/reagent/ethanol/mojito diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 34a10b97f1d..7159f83ab0d 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -309,12 +309,6 @@ var/obj/machinery/blackbox_recorder/blackbox var/DBQuery/query_insert = dbcon.NewQuery(sql) query_insert.Execute() -// Sanitize inputs to avoid SQL injection attacks -proc/sql_sanitize_text(var/text) - text = replacetext(text, "'", "''") - text = replacetext(text, ";", "") - text = replacetext(text, "&", "") - return text proc/feedback_set(var/variable,var/value) if(!blackbox) return diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 33e1e3dcaa4..240314dbb85 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 9735f614804..4086b325986 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 492d22ce3df..e16c5188681 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index b1d3fa7b8ef..41ba51b9107 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/paradise.dme b/paradise.dme index d3a4fd5c68b..56a61d6fa1a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -34,6 +34,7 @@ #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\process_scheduler.dm" #include "code\__DEFINES\qdel.dm" +#include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\sight.dm" #include "code\__DEFINES\stat.dm" #include "code\__HELPERS\_string_lists.dm"