diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm new file mode 100644 index 00000000000..12344ac930c --- /dev/null +++ b/code/modules/mapping/access_helpers.dm @@ -0,0 +1,538 @@ +/obj/effect/mapping_helpers/airlock/access + layer = DOOR_HELPER_LAYER + icon_state = "access_helper" + var/list/access_list = list() + +// These are mutually exclusive; can't have req_any and req_all +/obj/effect/mapping_helpers/airlock/access/any/payload(obj/machinery/door/airlock/airlock) + if(airlock.req_access_txt == "0") + // Overwrite if there is no access set, otherwise add onto existing access + if(airlock.req_one_access_txt == "0") + airlock.req_one_access_txt = access_list.Join(";") + else + airlock.req_one_access_txt += ";[access_list.Join(";")]" + else + log_mapping("[src] at [AREACOORD(src)] tried to set req_one_access, but req_access was already set!") + +/obj/effect/mapping_helpers/airlock/access/all/payload(obj/machinery/door/airlock/airlock) + if(airlock.req_one_access_txt == "0") + if(airlock.req_access_txt == "0") + airlock.req_access_txt = access_list.Join(";") + else + airlock.req_access_txt += ";[access_list.Join(";")]" + else + log_mapping("[src] at [AREACOORD(src)] tried to set req_access, but req_one_access was already set!") + +// -------------------- Req Any (Only requires ONE of the given accesses to open) +// -------------------- Command access helpers +/obj/effect/mapping_helpers/airlock/access/any/command + icon_state = "access_helper_com" + +/obj/effect/mapping_helpers/airlock/access/any/command/general/Initialize() + . = ..() + access_list += ACCESS_HEADS + +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload/Initialize() + . = ..() + access_list += ACCESS_AI_UPLOAD + +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter/Initialize() + . = ..() + access_list += ACCESS_TELEPORTER + +/obj/effect/mapping_helpers/airlock/access/any/command/eva/Initialize() + . = ..() + access_list += ACCESS_EVA + +/obj/effect/mapping_helpers/airlock/access/any/command/gateway/Initialize() + . = ..() + access_list += ACCESS_GATEWAY + +/obj/effect/mapping_helpers/airlock/access/any/command/hop/Initialize() + . = ..() + access_list += ACCESS_HOP + +/obj/effect/mapping_helpers/airlock/access/any/command/captain/Initialize() + . = ..() + access_list += ACCESS_CAPTAIN + +// -------------------- Engineering access helpers +/obj/effect/mapping_helpers/airlock/access/any/engineering + icon_state = "access_helper_eng" + +/obj/effect/mapping_helpers/airlock/access/any/engineering/general/Initialize() + . = ..() + access_list += ACCESS_ENGINE + +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction/Initialize() + . = ..() + access_list += ACCESS_CONSTRUCTION + +/obj/effect/mapping_helpers/airlock/access/any/engineering/aux_base/Initialize() + . = ..() + access_list += ACCESS_AUX_BASE + +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/Initialize() + . = ..() + access_list += ACCESS_MAINT_TUNNELS + +/obj/effect/mapping_helpers/airlock/access/any/engineering/external/Initialize() + . = ..() + access_list += ACCESS_EXTERNAL_AIRLOCKS + +/obj/effect/mapping_helpers/airlock/access/any/engineering/tech_storage/Initialize() + . = ..() + access_list += ACCESS_TECH_STORAGE + +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos/Initialize() + . = ..() + access_list += ACCESS_ATMOSPHERICS + +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms/Initialize() + . = ..() + access_list += ACCESS_TCOMSAT + +/obj/effect/mapping_helpers/airlock/access/any/engineering/ce/Initialize() + . = ..() + access_list += ACCESS_CE + +// -------------------- Medical access helpers +/obj/effect/mapping_helpers/airlock/access/any/medical + icon_state = "access_helper_med" + +/obj/effect/mapping_helpers/airlock/access/any/medical/general/Initialize() + . = ..() + access_list += ACCESS_MEDICAL + +/obj/effect/mapping_helpers/airlock/access/any/medical/morgue/Initialize() + . = ..() + access_list += ACCESS_MORGUE + +/obj/effect/mapping_helpers/airlock/access/any/medical/chemistry/Initialize() + . = ..() + access_list += ACCESS_CHEMISTRY + +/obj/effect/mapping_helpers/airlock/access/any/medical/virology/Initialize() + . = ..() + access_list += ACCESS_VIROLOGY + +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery/Initialize() + . = ..() + access_list += ACCESS_SURGERY + +/obj/effect/mapping_helpers/airlock/access/any/medical/cmo/Initialize() + . = ..() + access_list += ACCESS_CMO + +/obj/effect/mapping_helpers/airlock/access/any/medical/pharmacy/Initialize() + . = ..() + access_list += ACCESS_PHARMACY + +/obj/effect/mapping_helpers/airlock/access/any/medical/psychology/Initialize() + . = ..() + access_list += ACCESS_PSYCHOLOGY + +// -------------------- Science access helpers +/obj/effect/mapping_helpers/airlock/access/any/science + icon_state = "access_helper_sci" + +/obj/effect/mapping_helpers/airlock/access/any/science/general/Initialize() + . = ..() + access_list += ACCESS_RND + +/obj/effect/mapping_helpers/airlock/access/any/science/research/Initialize() + . = ..() + access_list += ACCESS_RESEARCH + +/obj/effect/mapping_helpers/airlock/access/any/science/ordnance/Initialize() + . = ..() + access_list += ACCESS_ORDNANCE + +/obj/effect/mapping_helpers/airlock/access/any/science/ordnance_storage/Initialize() + . = ..() + access_list += ACCESS_ORDNANCE_STORAGE + +/obj/effect/mapping_helpers/airlock/access/any/science/genetics/Initialize() + . = ..() + access_list += ACCESS_GENETICS + +/obj/effect/mapping_helpers/airlock/access/any/science/robotics/Initialize() + . = ..() + access_list += ACCESS_ROBOTICS + +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio/Initialize() + . = ..() + access_list += ACCESS_XENOBIOLOGY + +/obj/effect/mapping_helpers/airlock/access/any/science/minisat/Initialize() + . = ..() + access_list += ACCESS_MINISAT + +/obj/effect/mapping_helpers/airlock/access/any/science/rd/Initialize() + . = ..() + access_list += ACCESS_RD + +// -------------------- Security access helpers +/obj/effect/mapping_helpers/airlock/access/any/security + icon_state = "access_helper_sec" + +/obj/effect/mapping_helpers/airlock/access/any/security/general/Initialize() + . = ..() + access_list += ACCESS_SECURITY + +/obj/effect/mapping_helpers/airlock/access/any/security/doors/Initialize() + . = ..() + access_list += ACCESS_SEC_DOORS + +/obj/effect/mapping_helpers/airlock/access/any/security/brig/Initialize() + . = ..() + access_list += ACCESS_BRIG + +/obj/effect/mapping_helpers/airlock/access/any/security/armory/Initialize() + . = ..() + access_list += ACCESS_ARMORY + +/obj/effect/mapping_helpers/airlock/access/any/security/court/Initialize() + . = ..() + access_list += ACCESS_COURT + +/obj/effect/mapping_helpers/airlock/access/any/security/hos/Initialize() + . = ..() + access_list += ACCESS_HOS + +// -------------------- Service access helpers +/obj/effect/mapping_helpers/airlock/access/any/service + icon_state = "access_helper_serv" + +/obj/effect/mapping_helpers/airlock/access/any/service/general/Initialize() + . = ..() + access_list += ACCESS_SERVICE + +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen/Initialize() + . = ..() + access_list += ACCESS_KITCHEN + +/obj/effect/mapping_helpers/airlock/access/any/service/bar/Initialize() + . = ..() + access_list += ACCESS_BAR + +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics/Initialize() + . = ..() + access_list += ACCESS_HYDROPONICS + +/obj/effect/mapping_helpers/airlock/access/any/service/janitor/Initialize() + . = ..() + access_list += ACCESS_JANITOR + +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office/Initialize() + . = ..() + access_list += ACCESS_CHAPEL_OFFICE + +/obj/effect/mapping_helpers/airlock/access/any/service/crematorium/Initialize() + . = ..() + access_list += ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/access/any/service/crematorium/Initialize() + . = ..() + access_list += ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/access/any/service/library/Initialize() + . = ..() + access_list += ACCESS_LIBRARY + +/obj/effect/mapping_helpers/airlock/access/any/service/library/Initialize() + . = ..() + access_list += ACCESS_THEATRE + +/obj/effect/mapping_helpers/airlock/access/any/service/lawyer/Initialize() + . = ..() + access_list += ACCESS_LAWYER + +// -------------------- Supply access helpers +/obj/effect/mapping_helpers/airlock/access/any/supply + icon_state = "access_helper_sup" + +/obj/effect/mapping_helpers/airlock/access/any/supply/general/Initialize() + . = ..() + access_list += ACCESS_CARGO + +/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting/Initialize() + . = ..() + access_list += ACCESS_MAILSORTING + +/obj/effect/mapping_helpers/airlock/access/any/supply/mining/Initialize() + . = ..() + access_list += ACCESS_MINING + +/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station/Initialize() + . = ..() + access_list += ACCESS_MINING_STATION + +/obj/effect/mapping_helpers/airlock/access/any/supply/mineral_storage/Initialize() + . = ..() + access_list += ACCESS_MINERAL_STOREROOM + +/obj/effect/mapping_helpers/airlock/access/any/supply/qm/Initialize() + . = ..() + access_list += ACCESS_QM + +/obj/effect/mapping_helpers/airlock/access/any/supply/vault/Initialize() + . = ..() + access_list += ACCESS_VAULT + +// -------------------- Req All (Requires ALL of the given accesses to open) +// -------------------- Command access helpers +/obj/effect/mapping_helpers/airlock/access/all/command + icon_state = "access_helper_com" + +/obj/effect/mapping_helpers/airlock/access/all/command/general/Initialize() + . = ..() + access_list += ACCESS_HEADS + +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload/Initialize() + . = ..() + access_list += ACCESS_AI_UPLOAD + +/obj/effect/mapping_helpers/airlock/access/all/command/teleporter/Initialize() + . = ..() + access_list += ACCESS_TELEPORTER + +/obj/effect/mapping_helpers/airlock/access/all/command/eva/Initialize() + . = ..() + access_list += ACCESS_EVA + +/obj/effect/mapping_helpers/airlock/access/all/command/gateway/Initialize() + . = ..() + access_list += ACCESS_GATEWAY + +/obj/effect/mapping_helpers/airlock/access/all/command/hop/Initialize() + . = ..() + access_list += ACCESS_HOP + +/obj/effect/mapping_helpers/airlock/access/all/command/captain/Initialize() + . = ..() + access_list += ACCESS_CAPTAIN + +// -------------------- Engineering access helpers +/obj/effect/mapping_helpers/airlock/access/all/engineering + icon_state = "access_helper_eng" + +/obj/effect/mapping_helpers/airlock/access/all/engineering/general/Initialize() + . = ..() + access_list += ACCESS_ENGINE + +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction/Initialize() + . = ..() + access_list += ACCESS_CONSTRUCTION + +/obj/effect/mapping_helpers/airlock/access/all/engineering/aux_base/Initialize() + . = ..() + access_list += ACCESS_AUX_BASE + +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance/Initialize() + . = ..() + access_list += ACCESS_MAINT_TUNNELS + +/obj/effect/mapping_helpers/airlock/access/all/engineering/external/Initialize() + . = ..() + access_list += ACCESS_EXTERNAL_AIRLOCKS + +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage/Initialize() + . = ..() + access_list += ACCESS_TECH_STORAGE + +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos/Initialize() + . = ..() + access_list += ACCESS_ATMOSPHERICS + +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms/Initialize() + . = ..() + access_list += ACCESS_TCOMSAT + +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce/Initialize() + . = ..() + access_list += ACCESS_CE + +// -------------------- Medical access helpers +/obj/effect/mapping_helpers/airlock/access/all/medical + icon_state = "access_helper_med" + +/obj/effect/mapping_helpers/airlock/access/all/medical/general/Initialize() + . = ..() + access_list += ACCESS_MEDICAL + +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue/Initialize() + . = ..() + access_list += ACCESS_MORGUE + +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry/Initialize() + . = ..() + access_list += ACCESS_CHEMISTRY + +/obj/effect/mapping_helpers/airlock/access/all/medical/virology/Initialize() + . = ..() + access_list += ACCESS_VIROLOGY + +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery/Initialize() + . = ..() + access_list += ACCESS_SURGERY + +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo/Initialize() + . = ..() + access_list += ACCESS_CMO + +/obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy/Initialize() + . = ..() + access_list += ACCESS_PHARMACY + +/obj/effect/mapping_helpers/airlock/access/all/medical/psychology/Initialize() + . = ..() + access_list += ACCESS_PSYCHOLOGY + +// -------------------- Science access helpers +/obj/effect/mapping_helpers/airlock/access/all/science + icon_state = "access_helper_sci" + +/obj/effect/mapping_helpers/airlock/access/all/science/general/Initialize() + . = ..() + access_list += ACCESS_RND + +/obj/effect/mapping_helpers/airlock/access/all/science/research/Initialize() + . = ..() + access_list += ACCESS_RESEARCH + +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance/Initialize() + . = ..() + access_list += ACCESS_ORDNANCE + +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance_storage/Initialize() + . = ..() + access_list += ACCESS_ORDNANCE_STORAGE + +/obj/effect/mapping_helpers/airlock/access/all/science/genetics/Initialize() + . = ..() + access_list += ACCESS_GENETICS + +/obj/effect/mapping_helpers/airlock/access/all/science/robotics/Initialize() + . = ..() + access_list += ACCESS_ROBOTICS + +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio/Initialize() + . = ..() + access_list += ACCESS_XENOBIOLOGY + +/obj/effect/mapping_helpers/airlock/access/all/science/minisat/Initialize() + . = ..() + access_list += ACCESS_MINISAT + +/obj/effect/mapping_helpers/airlock/access/all/science/rd/Initialize() + . = ..() + access_list += ACCESS_RD + +// -------------------- Security access helpers +/obj/effect/mapping_helpers/airlock/access/all/security + icon_state = "access_helper_sec" + +/obj/effect/mapping_helpers/airlock/access/all/security/general/Initialize() + . = ..() + access_list += ACCESS_SECURITY + +/obj/effect/mapping_helpers/airlock/access/all/security/doors/Initialize() + . = ..() + access_list += ACCESS_SEC_DOORS + +/obj/effect/mapping_helpers/airlock/access/all/security/brig/Initialize() + . = ..() + access_list += ACCESS_BRIG + +/obj/effect/mapping_helpers/airlock/access/all/security/armory/Initialize() + . = ..() + access_list += ACCESS_ARMORY + +/obj/effect/mapping_helpers/airlock/access/all/security/court/Initialize() + . = ..() + access_list += ACCESS_COURT + +/obj/effect/mapping_helpers/airlock/access/all/security/hos/Initialize() + . = ..() + access_list += ACCESS_HOS + +// -------------------- Service access helpers +/obj/effect/mapping_helpers/airlock/access/all/service + icon_state = "access_helper_serv" + +/obj/effect/mapping_helpers/airlock/access/all/service/general/Initialize() + . = ..() + access_list += ACCESS_SERVICE + +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen/Initialize() + . = ..() + access_list += ACCESS_KITCHEN + +/obj/effect/mapping_helpers/airlock/access/all/service/bar/Initialize() + . = ..() + access_list += ACCESS_BAR + +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics/Initialize() + . = ..() + access_list += ACCESS_HYDROPONICS + +/obj/effect/mapping_helpers/airlock/access/all/service/janitor/Initialize() + . = ..() + access_list += ACCESS_JANITOR + +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office/Initialize() + . = ..() + access_list += ACCESS_CHAPEL_OFFICE + +/obj/effect/mapping_helpers/airlock/access/all/service/crematorium/Initialize() + . = ..() + access_list += ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/access/all/service/crematorium/Initialize() + . = ..() + access_list += ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/access/all/service/library/Initialize() + . = ..() + access_list += ACCESS_LIBRARY + +/obj/effect/mapping_helpers/airlock/access/all/service/library/Initialize() + . = ..() + access_list += ACCESS_THEATRE + +/obj/effect/mapping_helpers/airlock/access/all/service/lawyer/Initialize() + . = ..() + access_list += ACCESS_LAWYER + +// -------------------- Supply access helpers +/obj/effect/mapping_helpers/airlock/access/all/supply + icon_state = "access_helper_sup" + +/obj/effect/mapping_helpers/airlock/access/all/supply/general/Initialize() + . = ..() + access_list += ACCESS_CARGO + +/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting/Initialize() + . = ..() + access_list += ACCESS_MAILSORTING + +/obj/effect/mapping_helpers/airlock/access/all/supply/mining/Initialize() + . = ..() + access_list += ACCESS_MINING + +/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station/Initialize() + . = ..() + access_list += ACCESS_MINING_STATION + +/obj/effect/mapping_helpers/airlock/access/all/supply/mineral_storage/Initialize() + . = ..() + access_list += ACCESS_MINERAL_STOREROOM + +/obj/effect/mapping_helpers/airlock/access/all/supply/qm/Initialize() + . = ..() + access_list += ACCESS_QM + +/obj/effect/mapping_helpers/airlock/access/all/supply/vault/Initialize() + . = ..() + access_list += ACCESS_VAULT diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 39ae9224bae..9b0e5489619 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -101,17 +101,22 @@ //airlock helpers /obj/effect/mapping_helpers/airlock layer = DOOR_HELPER_LAYER + late = TRUE /obj/effect/mapping_helpers/airlock/Initialize(mapload) . = ..() if(!mapload) log_mapping("[src] spawned outside of mapload!") - return + return INITIALIZE_HINT_QDEL + +/obj/effect/mapping_helpers/airlock/LateInitialize() + . = ..() var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(!airlock) log_mapping("[src] failed to find an airlock at [AREACOORD(src)]") else payload(airlock) + qdel(src) /obj/effect/mapping_helpers/airlock/proc/payload(obj/machinery/door/airlock/payload) return diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index ea9170818f0..23e5e15f233 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 5f1a640ab7e..26936538ff3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3059,6 +3059,7 @@ #include "code\modules\mafia\map_pieces.dm" #include "code\modules\mafia\outfits.dm" #include "code\modules\mafia\roles.dm" +#include "code\modules\mapping\access_helpers.dm" #include "code\modules\mapping\map_template.dm" #include "code\modules\mapping\mapping_helpers.dm" #include "code\modules\mapping\preloader.dm"