From ad1f700ebac64d9672dd5a66d136d4b425e0832e Mon Sep 17 00:00:00 2001 From: lentye Date: Tue, 21 Apr 2026 20:00:00 +0400 Subject: [PATCH 1/8] First thing first --- baystation12.dme | 4 +- code/__defines/access_defs.dm | 16 + code/_global_vars/lists/locations.dm | 1 + code/datums/outfits/jobs/civilian.dm | 10 + code/game/jobs/access/access_security.dm | 18 + code/game/jobs/job/command.dm | 3 + code/game/jobs/job/engineering.dm | 3 + code/game/jobs/job/job.dm | 3 +- code/game/jobs/job/medical.dm | 9 + code/game/jobs/job/misc.dm | 23 + code/game/jobs/job/research.dm | 8 + code/game/jobs/job/security.dm | 51 +- code/game/objects/effects/landmarks.dm | 4 + code/game/objects/items/weapons/cards_ids.dm | 8 + .../items/weapons/cards_ids_hcz_scps.dm | 74 + .../items/weapons/cards_ids_lcz_scps.dm | 88 + code/game/objects/structures/safe.dm | 28 + .../modules/client/preferences_spawnpoints.dm | 9 + icons/obj/card.dmi | Bin 3938 -> 4390 bytes maps/site53/job/access/access_containment.dm | 77 + maps/site53/site53.dmm | 11157 +- maps/site53/site53areas.dm | 11 + maps/site53/site53old.dmm | 379301 +++++++++++++++ maps/site53/structures/closets/security.dm | 28 +- 24 files changed, 387361 insertions(+), 3573 deletions(-) create mode 100644 code/game/objects/items/weapons/cards_ids_hcz_scps.dm create mode 100644 code/game/objects/items/weapons/cards_ids_lcz_scps.dm create mode 100644 maps/site53/site53old.dmm diff --git a/baystation12.dme b/baystation12.dme index 857b39b37f..bb9a697f67 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -75,8 +75,8 @@ #include "code\__defines\languages.dm" #include "code\__defines\lighting.dm" #include "code\__defines\machinery.dm" -#include "code\__defines\map.dm" #include "code\__defines\magic.dm" +#include "code\__defines\map.dm" #include "code\__defines\mapping.dm" #include "code\__defines\materials.dm" #include "code\__defines\math.dm" @@ -1079,6 +1079,8 @@ #include "code\game\objects\items\weapons\beachball.dm" #include "code\game\objects\items\weapons\cane.dm" #include "code\game\objects\items\weapons\cards_ids.dm" +#include "code\game\objects\items\weapons\cards_ids_hcz_scps.dm" +#include "code\game\objects\items\weapons\cards_ids_lcz_scps.dm" #include "code\game\objects\items\weapons\cards_ids_syndicate.dm" #include "code\game\objects\items\weapons\clothingbag.dm" #include "code\game\objects\items\weapons\clown_items.dm" diff --git a/code/__defines/access_defs.dm b/code/__defines/access_defs.dm index 7f67c138a2..ed3fa07dc9 100644 --- a/code/__defines/access_defs.dm +++ b/code/__defines/access_defs.dm @@ -64,9 +64,11 @@ #define ACCESS_TORCH_FAX "ACCESS_TORCH_FAX" // SCP containment access defines +#define ACCESS_CONTAINMENT_SCP_008 "ACCESS_CONTAINMENT_SCP_008" #define ACCESS_CONTAINMENT_SCP_012 "ACCESS_CONTAINMENT_SCP_012" #define ACCESS_CONTAINMENT_SCP_013 "ACCESS_CONTAINMENT_SCP_013" #define ACCESS_CONTAINMENT_SCP_017 "ACCESS_CONTAINMENT_SCP_017" +#define ACCESS_CONTAINMENT_SCP_035 "ACCESS_CONTAINMENT_SCP_035" #define ACCESS_CONTAINMENT_SCP_049 "ACCESS_CONTAINMENT_SCP_049" #define ACCESS_CONTAINMENT_SCP_066 "ACCESS_CONTAINMENT_SCP_066" #define ACCESS_CONTAINMENT_SCP_078 "ACCESS_CONTAINMENT_SCP_078" @@ -80,17 +82,25 @@ #define ACCESS_CONTAINMENT_SCP_131 "ACCESS_CONTAINMENT_SCP_131" #define ACCESS_CONTAINMENT_SCP_151 "ACCESS_CONTAINMENT_SCP_151" #define ACCESS_CONTAINMENT_SCP_173 "ACCESS_CONTAINMENT_SCP_173" +#define ACCESS_CONTAINMENT_SCP_216 "ACCESS_CONTAINMENT_SCP_216" #define ACCESS_CONTAINMENT_SCP_247 "ACCESS_CONTAINMENT_SCP_247" #define ACCESS_CONTAINMENT_SCP_263 "ACCESS_CONTAINMENT_SCP_263" #define ACCESS_CONTAINMENT_SCP_280 "ACCESS_CONTAINMENT_SCP_280" #define ACCESS_CONTAINMENT_SCP_294 "ACCESS_CONTAINMENT_SCP_294" #define ACCESS_CONTAINMENT_SCP_343 "ACCESS_CONTAINMENT_SCP_343" +#define ACCESS_CONTAINMENT_SCP_347 "ACCESS_CONTAINMENT_SCP_347" #define ACCESS_CONTAINMENT_SCP_399 "ACCESS_CONTAINMENT_SCP_399" #define ACCESS_CONTAINMENT_SCP_409 "ACCESS_CONTAINMENT_SCP_409" +#define ACCESS_CONTAINMENT_SCP_457 "ACCESS_CONTAINMENT_SCP_457" +#define ACCESS_CONTAINMENT_SCP_500 "ACCESS_CONTAINMENT_SCP_500" #define ACCESS_CONTAINMENT_SCP_513 "ACCESS_CONTAINMENT_SCP_513" +#define ACCESS_CONTAINMENT_SCP_527 "ACCESS_CONTAINMENT_SCP_527" #define ACCESS_CONTAINMENT_SCP_529 "ACCESS_CONTAINMENT_SCP_529" #define ACCESS_CONTAINMENT_SCP_714 "ACCESS_CONTAINMENT_SCP_714" +#define ACCESS_CONTAINMENT_SCP_895 "ACCESS_CONTAINMENT_SCP_895" #define ACCESS_CONTAINMENT_SCP_896 "ACCESS_CONTAINMENT_SCP_896" +#define ACCESS_CONTAINMENT_SCP_912 "ACCESS_CONTAINMENT_SCP_912" +#define ACCESS_CONTAINMENT_SCP_914 "ACCESS_CONTAINMENT_SCP_914" #define ACCESS_CONTAINMENT_SCP_953 "ACCESS_CONTAINMENT_SCP_953" #define ACCESS_CONTAINMENT_SCP_966 "ACCESS_CONTAINMENT_SCP_966" #define ACCESS_CONTAINMENT_SCP_999 "ACCESS_CONTAINMENT_SCP_999" @@ -98,6 +108,9 @@ #define ACCESS_CONTAINMENT_SCP_1025 "ACCESS_CONTAINMENT_SCP_1025" #define ACCESS_CONTAINMENT_SCP_1366 "ACCESS_CONTAINMENT_SCP_1366" #define ACCESS_CONTAINMENT_SCP_1499 "ACCESS_CONTAINMENT_SCP_1499" +#define ACCESS_CONTAINMENT_SCP_1507 "ACCESS_CONTAINMENT_SCP_1507" +#define ACCESS_CONTAINMENT_SCP_2398 "ACCESS_CONTAINMENT_SCP_2398" +#define ACCESS_CONTAINMENT_SCP_5295 "ACCESS_CONTAINMENT_SCP_5295" //More normal access defines. @@ -118,6 +131,9 @@ #define ACCESS_COM_COMMS "ACCESS_COMMS_COMMAND" #define ACCESS_SECURITY "ACCESS_SECURITY" //1 +#define ACCESS_SECURITY_LCZ "ACCESS_LCZ" +#define ACCESS_SECURITY_HCZ "ACCESS_HCZ" +#define ACCESS_SECURITY_ECZ "ACCESS_ECZ" #define ACCESS_BRIG "ACCESS_BRIG" // Brig timers and permabrig 2 #define ACCESS_ARMORY "ACCESS_ARMORY" //3 #define ACCESS_FORENSICS_LOCKERS "ACCESS_FORENSICS" //4 diff --git a/code/_global_vars/lists/locations.dm b/code/_global_vars/lists/locations.dm index 2e39d26697..b6e769c9ce 100644 --- a/code/_global_vars/lists/locations.dm +++ b/code/_global_vars/lists/locations.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_EMPTY(latejoin_gateway) GLOBAL_LIST_EMPTY(latejoin_cryo) GLOBAL_LIST_EMPTY(latejoin_cyborg) GLOBAL_LIST_EMPTY(latejoin_dclass) +GLOBAL_LIST_EMPTY(latejoin_eclass) GLOBAL_LIST_EMPTY(latejoin_comms) GLOBAL_LIST_EMPTY(new_player) diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm index 7fba51330b..8bad3d2902 100644 --- a/code/datums/outfits/jobs/civilian.dm +++ b/code/datums/outfits/jobs/civilian.dm @@ -15,6 +15,16 @@ var/path = pick( /obj/item/wrench, /obj/item/screwdriver) H.equip_to_slot_or_store_or_drop(new path (H), slot_l_store) +/decl/hierarchy/outfit/job/civ/classe + name = OUTFIT_JOB_NAME("Class E") + uniform = /obj/item/clothing/under/redpyjamas + shoes = /obj/item/clothing/shoes/red + l_ear = null + l_pocket = null + id_type = /obj/item/card/id/classe + pda_type = null + back = /obj/item/storage/backpack/satchel/leather + /decl/hierarchy/outfit/job/civ/classd/high name = OUTFIT_JOB_NAME("High-Security Class D") uniform = /obj/item/clothing/under/scp/hdclass diff --git a/code/game/jobs/access/access_security.dm b/code/game/jobs/access/access_security.dm index ac1f28f32e..5a166b9328 100644 --- a/code/game/jobs/access/access_security.dm +++ b/code/game/jobs/access/access_security.dm @@ -32,6 +32,24 @@ // Station +/datum/access/securitylcz + id = ACCESS_SECURITY_LCZ + desc = "Light Containment Zone access" + region = ACCESS_REGION_SECURITY + access_type = ACCESS_TYPE_INNATE + +/datum/access/securityhcz + id = ACCESS_SECURITY_HCZ + desc = "Heavy Containment Zone access" + region = ACCESS_REGION_SECURITY + access_type = ACCESS_TYPE_INNATE + +/datum/access/securityecz + id = ACCESS_SECURITY_ECZ + desc = "Entrance Containment Zone access" + region = ACCESS_REGION_SECURITY + access_type = ACCESS_TYPE_INNATE + /datum/access/security id = ACCESS_SECURITY desc = "Security Equipment" diff --git a/code/game/jobs/job/command.dm b/code/game/jobs/job/command.dm index 61aaa7175a..933436eeae 100644 --- a/code/game/jobs/job/command.dm +++ b/code/game/jobs/job/command.dm @@ -129,6 +129,9 @@ ACCESS_ENGINEERING_LVL3, ACCESS_NETWORK, ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, ACCESS_SCIENCE_LVL1, ACCESS_SCIENCE_LVL2, ACCESS_SCIENCE_LVL3, diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 3d5084930f..f1e2f138f9 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -18,6 +18,9 @@ access = list( ACCESS_ENG_COMMS, ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, ACCESS_SCIENCE_LVL1, ACCESS_SCIENCE_LVL2, ACCESS_SCIENCE_LVL3, diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 61f3c57d23..3eacf87a42 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -156,7 +156,8 @@ H.mind.mana.mana_level = H.mind.mana.mana_level_max H.mind.mana.mana_recharge_speed *= 2 if(prob(higher_spell_points_chance)) - H.mind.mana.spell_points += pickweight(1 = 30, 2 = 12, 3 = 4, 4 = 1) + var/list/listy = list(1 = 30, 2 = 12, 3 = 4, 4 = 1) + H.mind.mana.spell_points += pickweight(listy) var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title) if(outfit) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index d2b9e1c0a0..b22b06459a 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -28,6 +28,9 @@ ACCESS_MEDICAL_LVL4, ACCESS_MEDICAL_LVL5, ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, ACCESS_SCIENCE_LVL1, ACCESS_ADMIN_LVL1, ACCESS_ADMIN_LVL2, @@ -81,6 +84,9 @@ ACCESS_MEDICAL_LVL3, ACCESS_MEDICAL_LVL4, ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_LCZ, ACCESS_SCIENCE_LVL1, ACCESS_ADMIN_LVL1, ACCESS_ADMIN_LVL2, @@ -295,6 +301,9 @@ ACCESS_MED_COMMS, ACCESS_MEDICAL_EQUIP, ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, ACCESS_SCIENCE_LVL1, ACCESS_ENGINEERING_LVL1, ACCESS_ADMIN_LVL1, diff --git a/code/game/jobs/job/misc.dm b/code/game/jobs/job/misc.dm index 2379ca3398..432c4a3b9e 100644 --- a/code/game/jobs/job/misc.dm +++ b/code/game/jobs/job/misc.dm @@ -33,6 +33,29 @@ var/obj/item/card/id/ID = H.wear_id ID.registered_name = "D-[used_numbers[used_numbers.len]]" +/datum/job/classe + title = "Class E" + department = "Civilian" + selection_color = "#E55700" + economic_power = 1 + total_positions = 0 + spawn_positions = 0 + supervisors = "all Foundation Personnel" + access = list() + minimal_access = list() + outfit_type = /decl/hierarchy/outfit/job/civ/classe + class = CLASS_E + hud_icon = "huddclass" + + max_skill = list( + SKILL_COMBAT = SKILL_TRAINED, + SKILL_WEAPONS = SKILL_TRAINED + ) + + roleplay_difficulty = "Variable" + mechanical_difficulty = "Variable" + duties = "You're a temporary dismissed personal. You're restricted from contact other personal without security." + // LOGISTICS DEPARTMENT /datum/job/qm title = "Logistics Officer" diff --git a/code/game/jobs/job/research.dm b/code/game/jobs/job/research.dm index 30af4d5640..364acf2d9c 100644 --- a/code/game/jobs/job/research.dm +++ b/code/game/jobs/job/research.dm @@ -25,6 +25,10 @@ ACCESS_SCIENCE_LVL3, ACCESS_SCIENCE_LVL2, ACCESS_SCIENCE_LVL1, + ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, ACCESS_MEDICAL_LVL1, ACCESS_ENGINEERING_LVL1, ACCESS_ADMIN_LVL1, @@ -80,6 +84,10 @@ ACCESS_SCIENCE_LVL3, ACCESS_SCIENCE_LVL2, ACCESS_SCIENCE_LVL1, + ACCESS_SECURITY_LVL1, + ACCESS_SECURITY_ECZ, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, ACCESS_MEDICAL_LVL1, ACCESS_ENGINEERING_LVL1, ACCESS_ADMIN_LVL1, diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index f3c41cce12..d7c6120b26 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -25,6 +25,9 @@ ACCESS_SECURITY_LVL3, ACCESS_SECURITY_LVL4, ACCESS_SECURITY_LVL5, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_ECZ, ACCESS_ADMIN_LVL1, ACCESS_ADMIN_LVL2, ACCESS_ADMIN_LVL3, @@ -92,10 +95,8 @@ ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, ACCESS_SECURITY_LVL4, + ACCESS_SECURITY_LCZ, ACCESS_ADMIN_LVL1, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, - ACCESS_SCIENCE_LVL3 ) minimal_access = list() @@ -140,11 +141,8 @@ ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, ACCESS_SECURITY_LVL4, + ACCESS_SECURITY_HCZ, ACCESS_ADMIN_LVL1, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, - ACCESS_SCIENCE_LVL3, - ACCESS_SCIENCE_LVL4 ) minimal_access = list() @@ -190,6 +188,9 @@ ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, ACCESS_SECURITY_LVL4, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_ECZ, ACCESS_ADMIN_LVL1, ACCESS_ADMIN_LVL2, ACCESS_ADMIN_LVL3, @@ -256,6 +257,9 @@ ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_ECZ, ACCESS_ADMIN_LVL1, ACCESS_ADMIN_LVL2, ACCESS_ADMIN_LVL3, @@ -302,8 +306,7 @@ ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, + ACCESS_SECURITY_LCZ, ACCESS_DCLASS_KITCHEN, ACCESS_DCLASS_BOTANY, ACCESS_DCLASS_MINING, @@ -351,9 +354,7 @@ ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, - ACCESS_SCIENCE_LVL3 + ACCESS_SECURITY_HCZ, ) minimal_access = list() @@ -400,6 +401,9 @@ ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, ACCESS_SECURITY_LVL3, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_ECZ, ACCESS_ADMIN_LVL1, ACCESS_ADMIN_LVL2, ACCESS_ADMIN_LVL3, @@ -448,8 +452,7 @@ ACCESS_SEC_COMMS, ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, + ACCESS_SECURITY_LCZ, ACCESS_DCLASS_KITCHEN, ACCESS_DCLASS_BOTANY, ACCESS_DCLASS_MINING, @@ -496,10 +499,7 @@ ACCESS_SEC_COMMS, ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, - ACCESS_SECURITY_LVL3, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, - ACCESS_SCIENCE_LVL3 + ACCESS_SECURITY_HCZ, ) minimal_access = list() @@ -542,6 +542,9 @@ ACCESS_SEC_COMMS, ACCESS_SECURITY_LVL1, ACCESS_SECURITY_LVL2, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_ECZ, ACCESS_ENGINEERING_LVL1, ACCESS_MEDICAL_LVL1, ACCESS_MEDICAL_LVL2, @@ -587,8 +590,7 @@ access = list( ACCESS_SEC_COMMS, ACCESS_SECURITY_LVL1, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2, + ACCESS_SECURITY_LCZ, ACCESS_DCLASS_KITCHEN, ACCESS_DCLASS_BOTANY, ACCESS_DCLASS_MINING, @@ -632,10 +634,7 @@ access = list( ACCESS_SEC_COMMS, ACCESS_SECURITY_LVL1, - ACCESS_SECURITY_LVL2, - ACCESS_SECURITY_LVL3, - ACCESS_SCIENCE_LVL1, - ACCESS_SCIENCE_LVL2 + ACCESS_SECURITY_HCZ, ) minimal_access = list() @@ -674,7 +673,9 @@ ACCESS_SCIENCE_LVL1, ACCESS_SEC_COMMS, ACCESS_SECURITY_LVL1, - ACCESS_SECURITY_LVL2, + ACCESS_SECURITY_LCZ, + ACCESS_SECURITY_HCZ, + ACCESS_SECURITY_ECZ, ACCESS_ENGINEERING_LVL1, ACCESS_MEDICAL_LVL1, ACCESS_MEDICAL_LVL2, diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index a993818267..1b6452f314 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -108,6 +108,10 @@ GLOB.latejoin_dclass += loc delete_me = 1 return + if("JoinLateEclass") + GLOB.latejoin_eclass += loc + delete_me = 1 + return if("JoinLateComms") GLOB.latejoin_comms += loc delete_me = 1 diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 8a8175e56d..2b642deb52 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -1014,6 +1014,14 @@ GLOBAL_LIST_EMPTY(conversion_cards) job_access_type = /datum/job/classd class = CLASS_D +/obj/item/card/id/classe + name = "Class-E ID" + desc = "An ID card issued to Class-E Foundation personnel." + icon_state = "classe" + item_state = "card-id" + job_access_type = /datum/job/classe + class = CLASS_E + // LOGISTICS /obj/item/card/id/logoff diff --git a/code/game/objects/items/weapons/cards_ids_hcz_scps.dm b/code/game/objects/items/weapons/cards_ids_hcz_scps.dm new file mode 100644 index 0000000000..15e028e6fb --- /dev/null +++ b/code/game/objects/items/weapons/cards_ids_hcz_scps.dm @@ -0,0 +1,74 @@ +/obj/item/card/id/hcz + name = "HCZ SCP Containment Card" + desc = "You should not see this" + +/obj/item/card/id/hcz/scp_008 //HCZ + name = "SCP 008 Containment Card" + desc = "SCP 008 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_008) + +/obj/item/card/id/hcz/scp_035 //hcz + name = "SCP 035 Containment Card" + desc = "SCP 035 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_035) + +/obj/item/card/id/hcz/scp_049 //hcz + name = "SCP 049 Containment Card" + desc = "SCP 049 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_049) + +/obj/item/card/id/hcz/scp_096 //hcz + name = "SCP 096 Containment Card" + desc = "SCP 096 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_096) + +/obj/item/card/id/hcz/scp_106 //hcz + name = "SCP 106 Containment Card" + desc = "SCP 106 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_106) + +/obj/item/card/id/hcz/scp_247 //hcz + name = "SCP 247 Containment Card" + desc = "SCP 247 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_247) + +/obj/item/card/id/hcz/scp_343 //hcz + name = "SCP 343 Containment Card" + desc = "SCP 343 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_343) + +/obj/item/card/id/hcz/scp_347 //hcz + name = "SCP 347 Containment Card" + desc = "SCP 347 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_347) + + +/obj/item/card/id/hcz/scp_457 //hcz + name = "SCP 457 Containment Card" + desc = "SCP 457 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_457) + +/obj/item/card/id/hcz/scp_500 //hcz + name = "SCP 500 Containment Card" + desc = "SCP 500 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_500) + +/obj/item/card/id/hcz/scp_527 //hcz + name = "SCP 527 Containment Card" + desc = "SCP 527 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_527) + +/obj/item/card/id/hcz/scp_895 //hcz + name = "SCP 895 Containment Card" + desc = "SCP 895 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_895) + +/obj/item/card/id/hcz/scp_1102_ru //HCZ + name = "SCP 1102-RU Containment Card" + desc = "SCP 1102-RU Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_1102_RU) + +/obj/item/card/id/hcz/scp_1507 //hcz + name = "SCP 1507 Containment Card" + desc = "SCP 1507 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_1507) diff --git a/code/game/objects/items/weapons/cards_ids_lcz_scps.dm b/code/game/objects/items/weapons/cards_ids_lcz_scps.dm new file mode 100644 index 0000000000..374b4a5a28 --- /dev/null +++ b/code/game/objects/items/weapons/cards_ids_lcz_scps.dm @@ -0,0 +1,88 @@ +/obj/item/card/id/lcz + name = "LCZ SCP Containment Card" + desc = "You should not see this" + +/obj/item/card/id/lcz/scp_012 + name = "SCP 012 Containment Card" + desc = "SCP 012 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_012) + +/obj/item/card/id/lcz/scp_013 + name = "SCP 013 Containment Card" + desc = "SCP 013 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_013) + +/obj/item/card/id/lcz/scp_066 + name = "SCP 066 Containment Card" + desc = "SCP 066 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_066) + +/obj/item/card/id/lcz/scp_113 + name = "SCP 113 Containment Card" + desc = "SCP 113 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_113) + +/obj/item/card/id/lcz/scp_131 + name = "SCP 131 Containment Card" + desc = "SCP 131 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_131) + +/obj/item/card/id/lcz/scp_151 + name = "SCP 151 Containment Card" + desc = "SCP 151 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_151) + +/obj/item/card/id/lcz/scp_173 + name = "SCP 173 Containment Card" + desc = "SCP 173 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_173) + +/obj/item/card/id/lcz/scp_216 + name = "SCP 216 Containment Card" + desc = "SCP 216 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_216) + +/obj/item/card/id/lcz/scp_263 + name = "SCP 263 Containment Card" + desc = "SCP 263 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_263) + +/obj/item/card/id/lcz/scp_294 + name = "SCP 294 Containment Card" + desc = "SCP 294 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_294) + +/obj/item/card/id/lcz/scp_513 + name = "SCP 513 Containment Card" + desc = "SCP 513 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_513) + +/obj/item/card/id/lcz/scp_529 + name = "SCP 529 Containment Card" + desc = "SCP 529 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_529) + +/obj/item/card/id/lcz/scp_912 + name = "SCP 912 Containment Card" + desc = "SCP 912 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_912) + +/obj/item/card/id/lcz/scp_914 + name = "SCP 914 Containment Card" + desc = "SCP 914 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_914) + +/obj/item/card/id/lcz/scp_999 + name = "SCP 999 Containment Card" + desc = "SCP 999 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_999) + +/obj/item/card/id/lcz/scp_2398 + name = "SCP 2398 Containment Card" + desc = "SCP 2398 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_2398) + +/obj/item/card/id/lcz/scp_5295 + name = "SCP 5295 Containment Card" + desc = "SCP 5295 Containment Card" + access = list(ACCESS_CONTAINMENT_SCP_5295) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 36e366fab7..b3592d4da0 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -157,6 +157,34 @@ FLOOR SAFES /obj/structure/safe/ex_act(severity) return +/obj/structure/safe/lcz + maxspace = 80 + +/obj/structure/safe/lcz/Initialize() + for (var/subtype in subtypesof(/obj/item/card/id/lcz)) + new subtype(src.loc) + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/structure/safe/lcz/LateInitialize() + . = ..() + var/obj/item/paper/P + P = new P(src.loc, "Safe combination is first tumbler at [tumbler_1_open] position
And second tumbler at [tumbler_2_open] position.
", "Safe Combination") + +/obj/structure/safe/hcz + maxspace = 80 + +/obj/structure/safe/hcz/Initialize() + for (var/subtype in subtypesof(/obj/item/card/id/hcz)) + new subtype(src.loc) + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/structure/safe/hcz/LateInitialize() + . = ..() + var/obj/item/paper/P + P = new P(src.loc, "Safe combination is first tumbler at [tumbler_1_open] position
And second tumbler at [tumbler_2_open] position.
", "Safe Combination") + //FLOOR SAFES /obj/structure/safe/floor name = "floor safe" diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index 9b4562f4de..2a391bbdf5 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -125,3 +125,12 @@ GLOBAL_VAR(spawntypes) /datum/spawnpoint/dclass/New() ..() turfs = GLOB.latejoin_dclass + +/datum/spawnpoint/eclass + display_name = "E-Cells" + msg = "has been delivered to the Class E Area" + restrict_job = list("Class E") + +/datum/spawnpoint/eclass/New() + ..() + turfs = GLOB.latejoin_eclass diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 5696fecf5f8b526f5dcd418ab669ae202bf3749e..d8f649c4abc33fc395020044ef33a2ba1c9382b4 100644 GIT binary patch delta 4072 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 E8xkDY&j0`b delta 3598 zcma)0_%jnFL>*CsLAD+x5<;Sk z8bpgQg6LgF8=Wz)eUekwIq!$F)^o3Gt>;?n`EcF8>%&thILDXB!Pr7W2?Bv6Y;qSt zAPR8|j)D!q8MMhlz%x&YtRsHZ?<&v}GEOYx;f<{e!Vg{aFyge@!NGK<+DzICYr@q{ zDkSOm*=Yk4X+N4KKW%)Y))w0A@vRRsFP_8Pd2({M5dn|=_Re{%or?Bk@uyA&&XaNB zt9>Dzw!r@4Ew&;MFXOu92m7mjgOj?3A#BoC&AtA>(QzZj%?*mnYrsz(x6I8X+~AF8 zHXijC|EX#_Thn9S_qNlL5`Z=p<^dpB%S{&6;UpIW(3%}k|3Wq zEY_R$2KulT<@24c^{-w>%Hbpy;mg9gE-A=Tv zF^IezcS0VKmzUp(02SSA0VGo~4iuu8BnnO-F@Ugko-l=viNQUP=F-?>5D4O+uLDB_ zjQ`AtGt1KBjJ$aLI@Jp|H`JS~_7R$FbIMWQ8ka4Px&z=YX(@^;*)FnVNISFbww78* zPk0nZeiYMt=i$P;SG-?Y|cvM%9{~(G-T#T-nSx~l*yrF z=q_lFdoC*KmCJ4bJl??2Q*b3>>V%13BQ$`Y=V-RbkfIw0ll2tHF03~&G%NNlva(Ca z5v!$~_WvQ^APa$Nd#eQBeHxczApk5V)maE!dbW5-O#3r8!O%*B2NH?2bF6Z%7?s~1T) zTPm)yPd2@?z>4z3c;=O80}l^iI!R5?!#Hoo;bI4u8aMUqOqiqW78Fyci~?5nc-ocx z=gZh`2qfm>Kr%^oEpj|x<;JcTT>z`&>iLnWN2S=!6F&VxFUo1ARj%@dB7p8}bV81@ zF=qxIV*LCmu7)UAj}{kN@j+o&yg(8f>TIXdb!n&|bzDYHD;%Bps8WwPpo1}UX;QON zlwtO7 TC48b;=kn@O!D(BAYAF;%Bb`t#>AZ0?xrVnz;c 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 xHCkMlB$I6MBFJqr`2Z-LRG*gmXM?a=ep