diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 1a5e715e..d3590cab 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -17713,7 +17713,7 @@ /obj/item/melee/classic_baton/telescopic, /obj/item/storage/box/survival, /obj/item/crowbar/red, -/obj/item/card/id/ert{ +/obj/item/card/id/centcom{ assignment = "Off-Duty Intelligence Officer"; desc = "An ID straight from Central Command."; name = "Kenshin Midori's ID Card (Off-Duty Intelligence Officer)"; @@ -21300,7 +21300,7 @@ /obj/item/clothing/under/syndicate{ has_sensor = 1 }, -/obj/item/card/id/ert{ +/obj/item/card/id/centcom{ assignment = "Intelligence Officer"; desc = "An ID straight from Central Command."; name = "Kenshin Midori's ID Card (Intelligence Officer)"; diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 5a1d0a43..8a9f6222 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -85,7 +85,7 @@ /obj/item/card/emag/bluespace name = "bluespace cryptographic sequencer" desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it." - color = rgb(40, 130, 255) + icon_state = "emag_bs" prox_check = FALSE /obj/item/card/emag/attack() @@ -165,13 +165,16 @@ slot_flags = ITEM_SLOT_ID armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF + var/id_type_name = "identification card" var/mining_points = 0 //For redeeming at mining equipment vendors var/list/access = list() var/registered_name = null // The name registered_name on the card var/assignment = null var/access_txt // mapping aid var/datum/bank_account/registered_account - + var/uses_overlays = TRUE + var/uses_assignment = TRUE + var/icon/cached_flat_icon /obj/item/card/id/Initialize(mapload) . = ..() @@ -206,14 +209,29 @@ /obj/item/card/id/RemoveID() return src -/* -Usage: -update_label() - Sets the id name to whatever registered_name and assignment is +/obj/item/card/id/update_icon() + . = ..() + if(!uses_overlays) + return + cached_flat_icon = null + var/job = assignment ? ckey(GetJobName()) : null + if(registered_name == "Captain") + job = "captain" + if(registered_name && registered_name != "Captain" && uses_assignment == TRUE) + overlays += mutable_appearance(icon, "assigned") + if(job) + overlays += mutable_appearance(icon, "id[job]") + +/obj/item/card/id/proc/get_cached_flat_icon() + if(!cached_flat_icon) + cached_flat_icon = getFlatIcon(src) + return cached_flat_icon + +/obj/item/card/id/get_examine_string(mob/user, thats = FALSE) + if(uses_overlays) + return "[icon2html(get_cached_flat_icon(), user)] [thats? "That's ":""][get_examine_name(user)]" //displays all overlays in chat + return ..() -update_label("John Doe", "Clowny") - Properly formats the name and occupation and sets the id name to the arguments -*/ /obj/item/card/id/proc/update_label(newname, newjob) if(newname || newjob) name = "[(!newname) ? "identification card" : "[newname]'s ID Card"][(!newjob) ? "" : " ([newjob])"]" @@ -231,12 +249,6 @@ update_label("John Doe", "Clowny") lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' -/obj/item/card/id/silver/reaper - name = "Thirteen's ID Card (Reaper)" - access = list(ACCESS_MAINT_TUNNELS) - assignment = "Reaper" - registered_name = "Thirteen" - /obj/item/card/id/gold name = "gold identification card" desc = "A golden card which shows power and might." @@ -249,6 +261,7 @@ update_label("John Doe", "Clowny") name = "agent card" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE) var/anyone = FALSE //Can anyone forge the ID or just syndicate? + var/forged = FALSE //have we set a custom name and job assignment, or will we use what we're given when we chameleon change? /obj/item/card/id/syndicate/Initialize() . = ..() @@ -264,45 +277,52 @@ update_label("John Doe", "Clowny") var/obj/item/card/id/I = O src.access |= I.access if(isliving(user) && user.mind) - if(user.mind.special_role) + if(user.mind.special_role || anyone) to_chat(usr, "The card's microscanners activate as you pass it over the ID, copying its access.") /obj/item/card/id/syndicate/attack_self(mob/user) if(isliving(user) && user.mind) - if(user.mind.special_role || anyone) - if(alert(user, "Action", "Agent ID", "Show", "Forge") == "Forge") - var/input_name = stripped_input(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name), MAX_NAME_LEN) - input_name = reject_bad_name(input_name, TRUE) - if(!input_name) - // Invalid/blank names give a randomly generated one. - if(user.gender == MALE) - input_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - else if(user.gender == FEMALE) - input_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" - else - input_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - var/target_occupation = stripped_input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", assignment ? assignment : "Assistant", MAX_MESSAGE_LEN) - if(!target_occupation) - return - registered_name = input_name - assignment = target_occupation - update_label() - to_chat(user, "You successfully forge the ID card.") - return - ..() + var/first_use = registered_name ? FALSE : TRUE + if(!(user.mind.special_role || anyone)) //Unless anyone is allowed, only syndies can use the card, to stop metagaming. + if(first_use) //If a non-syndie is the first to forge an unassigned agent ID, then anyone can forge it. + anyone = TRUE + else + return ..() + + var/popup_input + popup_input = alert(user, "Choose Action", "Agent ID", "Show", "Forge") + if(!user.canUseTopic(src, BE_CLOSE, FALSE)) + return + if(popup_input == "Forge") + var/input_name = stripped_input(user, "What name would you like to put on this card?", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name), MAX_NAME_LEN) + input_name = reject_bad_name(input_name) + var/target_occupation = stripped_input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", assignment ? assignment : "Assistant", MAX_MESSAGE_LEN) + if(!target_occupation) + return + registered_name = input_name + assignment = target_occupation + update_label() + to_chat(user, "You successfully forge the ID card.") + log_game("[key_name(user)] has forged \the [initial(name)] with name \"[registered_name]\" and occupation \"[assignment]\".") + return ..() /obj/item/card/id/syndicate/anyone anyone = TRUE /obj/item/card/id/syndicate/nuke_leader name = "lead agent card" + icon_state = "syndie" + assignment = "Nuclear Operative" + uses_assignment = FALSE access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) /obj/item/card/id/syndicate_command name = "syndicate ID card" desc = "An ID straight from the Syndicate." + icon_state = "syndie" registered_name = "Syndicate" assignment = "Syndicate Overlord" + uses_assignment = FALSE access = list(ACCESS_SYNDICATE) /obj/item/card/id/captains_spare @@ -326,49 +346,65 @@ update_label("John Doe", "Clowny") icon_state = "centcom" registered_name = "Central Command" assignment = "General" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/centcom/Initialize() - access = get_all_centcom_access() + access = get_all_accesses()+get_all_centcom_access() . = ..() /obj/item/card/id/ert name = "\improper CentCom ID" desc = "An ERT ID card." - icon_state = "centcom" + icon_state = "ert_commander" registered_name = "Emergency Response Team Commander" assignment = "Emergency Response Team Commander" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/ert/Initialize() access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS . = ..() /obj/item/card/id/ert/Security + icon_state = "ert_security" registered_name = "Security Response Officer" assignment = "Security Response Officer" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/ert/Security/Initialize() access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS . = ..() /obj/item/card/id/ert/Engineer + icon_state = "ert_engineer" registered_name = "Engineer Response Officer" assignment = "Engineer Response Officer" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/ert/Engineer/Initialize() access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS . = ..() /obj/item/card/id/ert/Medical + icon_state = "ert_medical" registered_name = "Medical Response Officer" assignment = "Medical Response Officer" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/ert/Medical/Initialize() access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS . = ..() /obj/item/card/id/ert/chaplain + icon_state = "ert_chaplain" registered_name = "Religious Response Officer" assignment = "Religious Response Officer" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/ert/chaplain/Initialize() access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS @@ -383,6 +419,8 @@ update_label("John Doe", "Clowny") righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' assignment = "Prisoner" access = list(ACCESS_ENTER_GENPOP) + uses_assignment = FALSE + uses_overlays = FALSE //Lavaland labor camp var/goal = 0 //How far from freedom? @@ -419,78 +457,116 @@ update_label("John Doe", "Clowny") . += "Your sentence is up! You're free!" /obj/item/card/id/prisoner/one + icon_state = "prisoner_001" name = "Prisoner #13-001" registered_name = "Prisoner #13-001" + uses_overlays = FALSE /obj/item/card/id/prisoner/two + icon_state = "prisoner_002" name = "Prisoner #13-002" registered_name = "Prisoner #13-002" + uses_overlays = FALSE /obj/item/card/id/prisoner/three + icon_state = "prisoner_003" name = "Prisoner #13-003" registered_name = "Prisoner #13-003" + uses_overlays = FALSE /obj/item/card/id/prisoner/four + icon_state = "prisoner_004" name = "Prisoner #13-004" registered_name = "Prisoner #13-004" + uses_overlays = FALSE /obj/item/card/id/prisoner/five + icon_state = "prisoner_005" name = "Prisoner #13-005" registered_name = "Prisoner #13-005" + uses_overlays = FALSE /obj/item/card/id/prisoner/six + icon_state = "prisoner_006" name = "Prisoner #13-006" registered_name = "Prisoner #13-006" + uses_overlays = FALSE /obj/item/card/id/prisoner/seven + icon_state = "prisoner_007" name = "Prisoner #13-007" registered_name = "Prisoner #13-007" + uses_overlays = FALSE /obj/item/card/id/mining name = "mining ID" + icon_state = "retro" access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) + uses_overlays = FALSE /obj/item/card/id/away name = "a perfectly generic identification card" desc = "A perfectly generic identification card. Looks like it could use some flavor." + icon_state = "retro" access = list(ACCESS_AWAY_GENERAL) + uses_overlays = FALSE /obj/item/card/id/away/hotel name = "Staff ID" desc = "A staff ID used to access the hotel's doors." access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT) + icon_state = "retrosrv" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/hotel/securty name = "Officer ID" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT, ACCESS_AWAY_SEC) + icon_state = "retrosec" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/old name = "a perfectly generic identification card" desc = "A perfectly generic identification card. Looks like it could use some flavor." icon_state = "centcom" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/old/sec name = "Charlie Station Security Officer's ID card" desc = "A faded Charlie Station ID card. You can make out the rank \"Security Officer\"." assignment = "Charlie Station Security Officer" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_SEC) + icon_state = "retrosec" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/old/sci name = "Charlie Station Scientist's ID card" desc = "A faded Charlie Station ID card. You can make out the rank \"Scientist\"." assignment = "Charlie Station Scientist" access = list(ACCESS_AWAY_GENERAL) + icon_state = "retrosci" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/old/eng name = "Charlie Station Engineer's ID card" desc = "A faded Charlie Station ID card. You can make out the rank \"Station Engineer\"." assignment = "Charlie Station Engineer" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_ENGINE) + icon_state = "retroeng" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/old/apc name = "APC Access ID" desc = "A special ID card that allows access to APC terminals." access = list(ACCESS_ENGINE_EQUIP) + icon_state = "retrosup" + uses_overlays = FALSE + uses_assignment = FALSE //Polychromatic Knight Badge @@ -499,6 +575,8 @@ update_label("John Doe", "Clowny") name = "knight badge" icon_state = "knight" desc = "A badge denoting the owner as a knight! It has a strip for swiping like an ID" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/knight/update_label(newname, newjob) if(newname || newjob) @@ -553,15 +631,35 @@ update_label("John Doe", "Clowny") desc = "A faded Arctic Station ID card. You can make out the rank \"Station Engineer\"." assignment = "Arctic Station Engineer" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_ENGINE, ACCESS_AWAY_MAINT) + icon_state = "retroeng" + uses_overlays = FALSE + uses_assignment = FALSE /obj/item/card/id/away/snowdin/sci name = "Arctic Station Scientist's ID card" desc = "A faded Arctic Station ID card. You can make out the rank \"Scientist\"." assignment = "Arctic Station Scientist" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT) - + icon_state = "retrosci" + uses_overlays = FALSE + uses_assignment = FALSE + /obj/item/card/id/away/snowdin/med name = "Arctic Station Doctor's ID card" desc = "A faded Arctic Station ID card. You can make out the rank \"Doctor\"." assignment = "Arctic Station Doctor" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MED, ACCESS_AWAY_MAINT) + icon_state = "retromed" + uses_overlays = FALSE + +/obj/item/card/id/debug + name = "\improper Debug ID" + desc = "A debug ID card. Has ALL the all access, you really shouldn't have this." + icon_state = "ert_janitor" + assignment = "Jannie" + uses_assignment = FALSE + uses_overlays = FALSE + +/obj/item/card/id/debug/Initialize() + access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() + . = ..() \ No newline at end of file diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index bb89aae2..55f1b686 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -224,8 +224,7 @@ var/obj/item/card/id/W = H.wear_id W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("CentCom Commander") + W.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() W.assignment = "CentCom Commander" W.registered_name = H.real_name W.update_label() @@ -406,7 +405,7 @@ var/obj/item/card/id/W = H.wear_id - W.icon_state = "centcom" + W.icon_state = "deathsquad" W.access = get_all_accesses()//They get full station access. W.access += get_centcom_access("Death Commando")//Let's add their alloted CentCom access. W.assignment = "Death Commando" @@ -435,8 +434,14 @@ mask = /obj/item/clothing/mask/gas/welding belt = /obj/item/storage/belt/utility/chief/full gloves = /obj/item/clothing/gloves/combat - id = /obj/item/card/id/ert + id = /obj/item/card/id/debug glasses = /obj/item/clothing/glasses/meson/night ears = /obj/item/radio/headset/headset_cent/commander back = /obj/item/storage/backpack/holding backpack_contents = list(/obj/item/card/emag=1, /obj/item/flashlight/emp/debug=1, /obj/item/construction/rcd/combat=1, /obj/item/gun/magic/wand/resurrection/debug=1, /obj/item/melee/transforming/energy/axe=1) + +/datum/outfit/debug/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + var/obj/item/card/id/W = H.wear_id + W.assignment = "Jannie" + W.registered_name = H.real_name + W.update_label(W.registered_name, W.assignment) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 60ba5695..cd8ac3df 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -366,7 +366,11 @@ return get_all_jobs() + list("Prisoner") /proc/get_all_centcom_jobs() - return list("VIP Guest","Custodian","Thunderdome Overseer","CentCom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","CentCom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","CentCom Bartender","Nuclear Waste Expert") + return list("VIP Guest","Custodian", "Jannie","Thunderdome Overseer","CentCom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","CentCom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","CentCom Bartender","Nuclear Waste Expert") + +/proc/get_all_syndie_jobs() + return list("Syndicate", "Syndicate Overlord", "Lone Operative", "Nuclear Operative") + /obj/item/proc/GetJobName() //Used in secHUD icon generation var/obj/item/card/id/I = GetID() @@ -377,4 +381,6 @@ return jobName if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a CentCom job return "CentCom" + if(jobName in get_all_syndie_jobs()) //Return with syndie logo if syndie job) + return "Syndicate" return "Unknown" //Return unknown if none of the above apply diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index c352d952..dc361ef8 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 50780184..8d1aa9d4 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ