Files
vgstation13/code/game/objects/items/weapons/cards_ids.dm
2021-08-21 16:04:48 -05:00

876 lines
28 KiB
Plaintext

/* Cards
* Contains:
* DATA CARD
* ID CARD
* FINGERPRINT CARD HOLDER
* FINGERPRINT CARD
*/
/*
* DATA CARDS - Used for the teleporter
*/
/obj/item/weapon/card
name = "card"
desc = "Does card things."
icon = 'icons/obj/card.dmi'
w_class = W_CLASS_TINY
var/associated_account_number = 0
var/list/files = list( )
/obj/item/weapon/card/data
name = "data disk"
desc = "A disk of data."
icon_state = "data"
var/function = "storage"
var/data = "null"
var/special = null
item_state = "card-id"
/obj/item/weapon/card/data/verb/label(t as text)
set name = "Label Disk"
set category = "Object"
set src in usr
if (t)
src.name = text("Data Disk- '[]'", t)
else
src.name = "Data Disk"
src.add_fingerprint(usr)
return
/obj/item/weapon/card/data/clown
name = "Coordinates to Clown Planet"
icon_state = "data"
item_state = "card-id"
level = 2
desc = "This card contains coordinates to the fabled Clown Planet. Handle with care."
function = "teleporter"
data = "Clown Planet"
/*
* ID CARDS
*/
/obj/item/weapon/card/emag
desc = "It's a card with a magnetic strip attached to some circuitry."
name = "cryptographic sequencer"
icon_state = "emag"
item_state = "card-id"
origin_tech = Tc_MAGNETS + "=2;" + Tc_SYNDICATE + "=2"
/**
* Number of uses left. -1 = infinite
* (Note: Some devices can use more than 1 use, so this is just called "energy")
* @since 10-28-2014
*/
var/energy = -1
/**
* Max energy per emag. -1 = infinite
* @since 10-28-2014
*/
var/max_energy = -1
/**
* Every X ticks, add [recharge_rate] energy.
* @since 10-28-2014
*/
var/recharge_ticks = 0
/**
* Every [recharge_ticks] ticks, add X energy.
* @since 10-28-2014
*/
var/recharge_rate = 0
var/nticks=0
/obj/item/weapon/card/emag/New(var/loc, var/disable_tuning=0)
..(loc)
// For standardized subtypes, once they're established.
if(disable_tuning)
return
if(ticker)
initialize()
return
/obj/item/weapon/card/emag/initialize()
// Tuning tools.
//////////////////
if(config.emag_energy != -1)
max_energy = config.emag_energy
if(config.emag_starts_charged)
energy = max_energy
if(config.emag_recharge_rate != 0)
recharge_rate = config.emag_recharge_rate
if(config.emag_recharge_ticks > 0)
recharge_ticks = config.emag_recharge_ticks
/obj/item/weapon/card/emag/process()
if(loc && loc:timestopped)
return
if(energy < max_energy)
// Specified number of ticks has passed? Add charge.
if(nticks >= recharge_ticks)
nticks = 0
energy = min(energy + recharge_rate, max_energy)
nticks ++
else
nticks = 0
processing_objects.Remove(src)
/obj/item/weapon/card/emag/proc/canUse(var/mob/user, var/obj/machinery/M)
// We've already checked for emaggability. All we do here is check cost.
// Infinite uses? Just return true.
if(energy < 0)
return 1
var/cost=M.getEmagCost(user,src)
// Free to emag? Return true every time.
if(cost == 0)
return 1
if(energy >= cost)
energy -= cost
// Start recharging, if we're supposed to.
if(energy < max_energy && recharge_rate && recharge_ticks)
if(!(src in processing_objects))
processing_objects.Add(src)
return 1
return 0
/obj/item/weapon/card/emag/examine(mob/user)
..()
if(energy==-1)
to_chat(user, "<span class=\"info\">\The [name] has a tiny fusion generator for power.</span>")
else
var/class="info"
if(energy/max_energy < 0.1 /* 10% energy left */)
class="warning"
to_chat(user, "<span class=\"[class]\">This [name] has [energy]MJ left in its capacitor ([max_energy]MJ capacity).</span>")
if(recharge_rate && recharge_ticks)
to_chat(user, "<span class=\"info\">A small label on a thermocouple notes that it recharges at a rate of [recharge_rate]MJ for every [recharge_ticks<=1?"":"[recharge_ticks] "]oscillator tick[recharge_ticks>1?"s":""].</span>")
//don't perform emag_act() stuff in this method
/obj/item/weapon/card/emag/attack()
return
//perform individual emag_act() stuff on children overriding the method here
/obj/item/weapon/card/emag/afterattack(var/atom/target, mob/user, proximity)
if(!proximity)
return
if (istype(target, /mob/living/carbon/human))
var/mob/living/carbon/target_living = target
//get target zone with 0% chance of missing
var/zone = ran_zone(user.zone_sel.selecting, 100)
var/datum/organ/external/organ = target_living.get_organ(zone)
target_living.emag_act(user, organ, src)
return
target.emag_act(user)
/obj/item/weapon/card/id
name = "identification card"
desc = "A card used to provide ID and determine access across the station. Features a virtual wallet accessible by PDA."
icon_state = "id"
item_state = "card-id"
var/list/access = list()
var/list/base_access = list() //Access that can't be overwritten by ID computers
var/registered_name = "Unknown" // The name registered_name on the card
slot_flags = SLOT_ID
var/blood_type = "\[UNSET\]"
var/dna_hash = "\[UNSET\]"
var/fingerprint_hash = "\[UNSET\]"
var/bans = null
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
var/assignment = null //can be alt title or the actual job
var/rank = null //actual job
var/dorm = 0 // determines if this ID has claimed a dorm already
var/datum/money_account/virtual_wallet = 1 //money! If 0, don't create a wallet. Otherwise create one!
/obj/item/weapon/card/id/New()
..()
if(virtual_wallet)
update_virtual_wallet()
spawn(30) //AWFULNESS AHOY
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
SetOwnerInfo(H)
update_virtual_wallet()
/obj/item/weapon/card/id/examine(mob/user)
..()
if(Adjacent(user))
user.show_message(text("The current assignment on the card is [src.assignment]."),1)
user.show_message("The blood type on the card is [blood_type].",1)
user.show_message("The DNA hash on the card is [dna_hash].",1)
user.show_message("The fingerprint hash on the card is [fingerprint_hash].",1)
/obj/item/weapon/card/id/attack_self(var/mob/user)
if(user.attack_delayer.blocked())
return
user.visible_message("[user] shows you: [bicon(src)] [name]: assignment: [assignment]",\
"You flash your ID card: [bicon(src)] [name]: assignment: [assignment]")
user.delayNextAttack(1 SECONDS)
add_fingerprint(user)
/obj/item/weapon/card/id/GetAccess()
return (access | base_access)
/obj/item/weapon/card/id/GetID()
return src
/obj/item/weapon/card/id/get_owner_name_from_ID()
return registered_name
/obj/item/weapon/card/id/proc/update_virtual_wallet(var/new_funds=0)
if(!istype(virtual_wallet))
virtual_wallet = new()
virtual_wallet.virtual = 1
virtual_wallet.owner_name = registered_name
if(new_funds)
virtual_wallet.money = new_funds
//Virtual wallet accounts are tied to an ID card, not an account database, thus they don't need an acount number.
//For now using the virtual wallet doesn't require a PIN either.
if(!virtual_wallet.account_number)
virtual_wallet.account_number = next_account_number
next_account_number += rand(1,25)
/obj/item/weapon/card/id/proc/add_to_virtual_wallet(var/added_funds=0, var/mob/user, var/atom/source)
if(!virtual_wallet)
return 0
virtual_wallet.money += added_funds
var/datum/transaction/T = new()
if(user)
T.target_name = user.name
T.purpose = "Currency deposit"
T.amount = added_funds
if(source)
T.source_terminal = source.name
T.date = current_date_string
T.time = worldtime2text()
virtual_wallet.transaction_log.Add(T)
return 1
/obj/item/weapon/card/id/proc/UpdateName()
name = "[src.registered_name]'s ID Card ([src.assignment])"
/obj/item/weapon/card/id/proc/SetOwnerInfo(var/mob/living/carbon/human/H)
if(!H || !H.dna)
return
blood_type = H.dna.b_type
dna_hash = H.dna.unique_enzymes
fingerprint_hash = md5(H.dna.uni_identity)
/obj/item/weapon/card/id/proc/GetBalance(var/format=0)
var/amt = 0
var/datum/money_account/acct = get_card_account(src)
if(acct)
amt = acct.money
if(format)
amt = "$[num2septext(amt)]"
return amt
/obj/item/weapon/card/id/proc/GetJobName()
var/jobName = src.assignment //what the card's job is called
var/alt_jobName = src.rank //what the card's job ACTUALLY IS: determines access, etc.
if(jobName in get_all_job_icons()) //Check if the job name has a hud icon
return jobName
if(alt_jobName in get_all_job_icons()) //Check if the base job has a hud icon
return alt_jobName
if(jobName in get_all_centcom_jobs() || (alt_jobName in get_all_centcom_jobs())) //Return with the NT logo if it is a Centcom job
return "Centcom"
return "Unknown" //Return unknown if none of the above apply
/obj/item/weapon/card/id/proc/GetJobRealName()
if( rank in get_all_jobs() )
return rank
if( assignment in get_all_jobs() )
return assignment
return "Unknown"
/obj/item/weapon/card/id/silver
name = "identification card"
desc = "A silver card which shows honour and dedication."
icon_state = "silver"
item_state = "silver_id"
/obj/item/weapon/card/id/gold
name = "identification card"
desc = "A golden card which shows power and might."
icon_state = "gold"
item_state = "gold_id"
/obj/item/weapon/card/id/nt_disguise
name = "\improper Nanotrasen undercover ID"
access = list(access_weapons, access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_eva)
registered_name = null
var/registered_user = null
var/static/list/gimmick_names = list(
"A. N. Other",
"Guy Incognito",
"Hugh Zasking",
"Ivan Gottasecret"
)
/obj/item/weapon/card/id/nt_disguise/attack_self(mob/user)
if(!src.registered_name)
if (ishuman(user))
var/mob/living/carbon/human/H = user
SetOwnerInfo(H)
alert(user,"Personal data gathered successfully; this includes: blood type, DNA, and fingerprints.\nYou may now proceed with the rest.","Nanotrasen undercover ID: notification","Ok")
var/n = input(user, "What name would you like to put on this card?", "Nanotrasen undercover ID: name") in gimmick_names
if(!n)
return
if (!Adjacent(user) || user.incapacitated())
return
src.registered_name = n
var/u = sanitize(stripped_input(user, "What occupation would you like to put on this card?\nNote: this will not grant or remove any access levels.", "Nanotrasen undercover ID: occupation", "Detective", MAX_MESSAGE_LEN))
if(!u)
alert("Invalid assignment.")
src.registered_name = null
return
if (!Adjacent(user) || user.incapacitated())
src.registered_name = null
return
src.assignment = u
src.name = "[src.registered_name]'s ID Card ([src.assignment])"
to_chat(user, "<span class='notice'>You successfully configured the NT ID card.</span>")
if(ishuman(user))
var/mob/living/carbon/human/H = user
registered_user = H.dna.unique_enzymes
else if (!registered_user || user.dna && registered_user == user.dna.unique_enzymes)
if (!registered_user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
registered_user = H.dna.unique_enzymes
switch(alert(user,"Would you like to display \the [src] or edit it?","Nanotrasen undercover ID","Show","Edit"))
if ("Show")
return ..()
if ("Edit")
switch(alert(user,"What would you like to edit on \the [src]?", "Nanotrasen undercover ID", "Name", "Occupation"))
if ("Name")
var/new_name = input(user, "What name would you like to put on this card?", "Nanotrasen undercover ID: name") in gimmick_names
if (!Adjacent(user) || user.incapacitated())
return
if (!new_name)
return
src.registered_name = new_name
UpdateName()
to_chat(user, "Name changed to [new_name].")
if("Occupation")
var/new_job = sanitize(stripped_input(user,"What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.","Nanotrasen undercover ID: occupation", "Detective", MAX_MESSAGE_LEN))
if (!Adjacent(user) || user.incapacitated())
return
if (!new_job)
alert("Invalid assignment.")
return
src.assignment = new_job
UpdateName()
to_chat(user, "Occupation changed to [new_job].")
else
..()
#define AGENT_CARD_DEFAULT_ACCESS list(access_maint_tunnels, access_syndicate, access_external_airlocks)
/obj/item/weapon/card/id/syndicate
name = "agent card"
access = AGENT_CARD_DEFAULT_ACCESS
base_access = list(access_syndicate)
origin_tech = Tc_SYNDICATE + "=3"
var/registered_user=null
/obj/item/weapon/card/id/syndicate/commando
name = "Hacked syndie card"
/obj/item/weapon/card/id/syndicate/commando/New()
..()
access = get_all_accesses()
/obj/item/weapon/card/id/syndicate/afterattack(var/obj/item/weapon/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = O
to_chat(user, "<span class='notice'>The [src]'s microscanners activate as you pass it over \the [I], copying its access.</span>")
access |= I.access
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
if(!src.registered_name)
//Stop giving the players unsanitized unputs! You are giving ways for players to intentionally crash clients! -Nodrak
var t = reject_bad_name(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name))
if(!t) //Same as mob/new_player/prefrences.dm
alert("Invalid name.")
return
src.registered_name = t
var u = sanitize(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", "Agent", MAX_MESSAGE_LEN))
if(!u)
alert("Invalid assignment.")
src.registered_name = ""
return
src.assignment = u
src.name = "[src.registered_name]'s ID Card ([src.assignment])"
to_chat(user, "<span class='notice'>You successfully forge the ID card.</span>")
registered_user = user
else if(!registered_user || registered_user == user)
if(!registered_user)
registered_user = user //
switch(alert(user,"Would you like to display \the [src] or edit it?","Choose.","Show","Edit"))
if("Show")
return ..()
if("Edit")
switch(input(user,"What would you like to edit on \the [src]?") in list("Name","Appearance","Occupation","Money account","Blood type","DNA hash","Fingerprint hash","Reset card"))
if("Name")
var/new_name = reject_bad_name(input(user,"What name would you like to put on this card?","Agent card name", ishuman(user) ? user.real_name : user.name))
if(!Adjacent(user))
return
src.registered_name = new_name
UpdateName()
to_chat(user, "Name changed to [new_name].")
if("Appearance")
var/list/appearances = list(
"data",
"id",
"gold",
"silver",
"centcom_old",
"centcom",
"HoS",
"CMO",
"RD",
"CE",
"security",
"medical",
"research",
"engineering",
"cargo",
"clown",
"mime",
"trader",
"syndie",
"deathsquad",
"creed",
"ERT_leader",
"ERT_security",
"ERT_engineering",
"ERT_medical",
"ERT_empty",
)
var/choice = input(user, "Select the appearance for this card.", "Choose.") in appearances
if(!Adjacent(user))
return
if(!choice)
return
src.icon_state = choice
to_chat(usr, "Appearance changed to [choice].")
if("Occupation")
var/new_job = sanitize(stripped_input(user,"What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.","Agent card occupation", "Assistant", MAX_MESSAGE_LEN))
if(!Adjacent(user))
return
src.assignment = new_job
to_chat(user, "Occupation changed to [new_job].")
UpdateName()
if("Money account")
var/new_account = input(user,"What money account would you like to link to this card?","Agent card account",11111) as num
if(!Adjacent(user))
return
associated_account_number = new_account
to_chat(user, "Linked money account changed to [new_account].")
if("Blood type")
var/default = "\[UNSET\]"
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna)
default = H.dna.b_type
var/new_blood_type = sanitize(input(user,"What blood type would you like to be written on this card?","Agent card blood type",default) as text)
if(!Adjacent(user))
return
src.blood_type = new_blood_type
to_chat(user, "Blood type changed to [new_blood_type].")
if("DNA hash")
var/default = "\[UNSET\]"
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna)
default = H.dna.unique_enzymes
var/new_dna_hash = sanitize(input(user,"What DNA hash would you like to be written on this card?","Agent card DNA hash",default) as text)
if(!Adjacent(user))
return
src.dna_hash = new_dna_hash
to_chat(user, "DNA hash changed to [new_dna_hash].")
if("Fingerprint hash")
var/default = "\[UNSET\]"
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna)
default = md5(H.dna.uni_identity)
var/new_fingerprint_hash = sanitize(input(user,"What fingerprint hash would you like to be written on this card?","Agent card fingerprint hash",default) as text)
if(!Adjacent(user))
return
src.fingerprint_hash = new_fingerprint_hash
to_chat(user, "Fingerprint hash changed to [new_fingerprint_hash].")
if("Reset card")
name = initial(name)
registered_name = initial(registered_name)
icon_state = initial(icon_state)
assignment = initial(assignment)
associated_account_number = initial(associated_account_number)
blood_type = initial(blood_type)
dna_hash = initial(dna_hash)
fingerprint_hash = initial(fingerprint_hash)
access = AGENT_CARD_DEFAULT_ACCESS
registered_user = null
to_chat(user, "<span class='notice'>All information has been deleted from \the [src].</span>")
else
..()
/obj/item/weapon/card/id/syndicate/raider
access = list(access_syndicate, access_trade)
assignment = "Trader"
#undef AGENT_CARD_DEFAULT_ACCESS
/obj/item/weapon/card/id/syndicate_command
name = "syndicate ID card"
desc = "An ID straight from the Syndicate."
registered_name = "Syndicate"
icon_state = "syndie"
assignment = "Syndicate Overlord"
access = list(access_syndicate, access_external_airlocks)
base_access = list(access_syndicate, access_external_airlocks)
/obj/item/weapon/card/id/captains_spare
name = "captain's spare ID"
desc = "The spare ID of the High Lord himself."
icon_state = "gold"
item_state = "gold_id"
registered_name = "Captain"
assignment = "Captain"
/obj/item/weapon/card/id/captains_spare/New()
var/datum/job/captain/J = new/datum/job/captain
access = J.get_access()
..()
/obj/item/weapon/card/id/admin
name = "Admin ID"
icon_state = "admin"
item_state = "gold_id"
registered_name = "Admin"
assignment = "Testing Shit"
/obj/item/weapon/card/id/admin/New()
access = get_absolutely_all_accesses()
..()
/obj/item/weapon/card/id/centcom
name = "\improper CentCom. ID"
desc = "An ID awarded only to the best brown nosers."
icon_state = "centcom"
registered_name = "Central Command"
assignment = "General"
/obj/item/weapon/card/id/centcom/New()
access = get_all_centcom_access()
..()
/obj/item/weapon/card/id/salvage_captain
name = "Captain's ID"
registered_name = "Captain"
icon_state = "centcom"
desc = "Finders, keepers."
access = list(access_salvage_captain)
base_access = list(access_salvage_captain)
/obj/item/weapon/card/id/medical
name = "Medical ID"
registered_name = "Medic"
icon_state = "medical"
desc = "A card covered in the blood stains of the wild ride."
access = list(access_medical, access_genetics, access_morgue, access_chemistry, access_paramedic, access_virology, access_surgery, access_cmo)
/obj/item/weapon/card/id/security
name = "Security ID"
registered_name = "Officer"
icon_state = "security"
desc = "Some say these cards are drowned in the tears of assistants, forged in the burning bodies of clowns."
access = list(access_sec_doors, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos)
/obj/item/weapon/card/id/research
name = "Research ID"
registered_name = "Scientist"
icon_state = "research"
desc = "The pinnacle of name technology."
access = list(access_science, access_rnd, access_tox_storage, access_robotics, access_xenobiology, access_rd)
/obj/item/weapon/card/id/supply
name = "Supply ID"
registered_name = "Cargonian"
icon_state = "cargo"
desc = "ROH ROH! HEIL THE QUARTERMASTER!"
access = list(access_mailsorting, access_mining, access_mining_station, access_cargo, access_qm)
/obj/item/weapon/card/id/engineering
name = "Engineering ID"
registered_name = "Engineer"
icon_state = "engineering"
desc = "Shame it's going to be lost in the void of a black hole."
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, access_construction)
/obj/item/weapon/card/id/hos
name = "Head of Security ID"
registered_name = "HoS"
icon_state = "HoS"
desc = "An ID awarded to only the most robust shits in the business."
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_science, access_engine, access_mining, access_medical, access_construction, access_mailsorting, access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway)
/obj/item/weapon/card/id/cmo
name = "Chief Medical Officer ID"
registered_name = "CMO"
icon_state = "CMO"
desc = "It gives off the faint smell of chloral hydrate, mixed with a backdraft of equipment abuse."
access = list(access_medical, access_morgue, access_genetics, access_heads, access_chemistry, access_virology, access_biohazard, access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_sec_doors, access_paramedic, access_maint_tunnels)
/obj/item/weapon/card/id/rd
name = "Research Director ID"
registered_name = "RD"
icon_state = "RD"
desc = "If you put your ear to the card, you can faintly hear screaming, glomping, and mechs. What the fuck?"
access = list(access_rd, access_heads, access_rnd, access_genetics, access_morgue, access_tox_storage, access_teleporter, access_sec_doors, access_science, access_robotics, access_xenobiology, access_ai_upload, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway)
/obj/item/weapon/card/id/ce
name = "Chief Engineer ID"
registered_name = "CE"
icon_state = "CE"
desc = "The card has a faint aroma of autism."
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, access_heads, access_construction, access_sec_doors, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
/obj/item/weapon/card/id/clown
name = "Pink ID"
registered_name = "HONK!"
icon_state = "clown"
desc = "Just looking at the card strikes you with deep fear."
access = list(access_clown, access_theatre, access_maint_tunnels)
/obj/item/weapon/card/id/mime
name = "Black and White ID"
registered_name = "..."
icon_state = "mime"
desc = "..."
access = list(access_clown, access_theatre, access_maint_tunnels)
/obj/item/weapon/card/id/thunderdome/red
name = "Thunderdome Red ID"
registered_name = "Red Team Fighter"
assignment = "Red Team Fighter"
icon_state = "TDred"
desc = "This ID card is given to those who fought inside the thunderdome for the Red Team. Not many have lived to see one of these, and even fewer lived to keep them."
/obj/item/weapon/card/id/thunderdome/green
name = "Thunderdome Green ID"
registered_name = "Green Team Fighter"
assignment = "Green Team Fighter"
icon_state = "TDgreen"
desc = "This ID card is given to those who fought inside the thunderdome for the Green Team. Not many have lived to see one of these, and even fewer lived to keep them."
/obj/item/weapon/card/id/vox
name = "traveler's ID"
desc = "A traveler's ID card, required to legally travel in human-controlled territories. It shows signs of wear and the photo is almost unrecognizable."
registered_name = "traveler"
assignment = "visitor"
icon_state = "trader"
access = list(access_trade)
base_access = list(access_trade)
/obj/item/weapon/card/id/hobo
name = "worn ID"
desc = "A worn ID card, long since of any use. The only thing others may use to recognise you. It shows signs of wear and the photo is almost unrecognizable."
registered_name = "traveler"
assignment = "visitor"
icon_state = "trader"
access = list()
base_access = list()
/obj/item/weapon/card/id/tunnel_clown
name = "Tunnel Clown ID card"
assignment = "Tunnel Clown!"
/obj/item/weapon/card/id/tunnel_clown/New()
..()
access = get_all_accesses()
/obj/item/weapon/card/id/syndicate/assassin
name = "Reaper ID card"
assignment = "Reaper"
/obj/item/weapon/card/id/syndicate/assassin/New()
..()
access = get_all_accesses()
/obj/item/weapon/card/id/death_commando
name = "Reaper ID card"
assignment = "Death Commando"
icon_state = "deathsquad"
/obj/item/weapon/card/id/death_commando/New()
. = ..()
access = get_centcom_access("Death Commando")
/obj/item/weapon/card/id/death_commando_leader
name = "Sgt.Reaper ID card"
assignment = "Death Commander"
icon_state = "creed"
/obj/item/weapon/card/id/death_commando_leader/New()
. = ..()
access = get_centcom_access("Creed Commander")
/obj/item/weapon/card/id/syndicate/commando
name = "Syndicate Commando ID card"
assignment = "Syndicate Commando"
icon_state = "id"
/obj/item/weapon/card/id/syndicate/commando/New()
..()
access = get_all_accesses()
access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate)
/obj/item/weapon/card/id/nt_rep
name = "Nanotrasen Navy Representative ID card"
assignment = "Nanotrasen Navy Representative"
icon_state = "centcom"
item_state = "id_inv"
/obj/item/weapon/card/id/nt_rep/New()
..()
access = get_all_accesses()
access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer")
/obj/item/weapon/card/id/centcom/nt_officer
name = "Nanotrasen Navy Officer ID card"
assignment = "Nanotrasen Navy Officer"
/obj/item/weapon/card/id/centcom/nt_officer/New()
..()
access = get_all_accesses()
access += get_all_centcom_access()
/obj/item/weapon/card/id/centcom/nt_captain
name = "Nanotrasen Navy Captain ID card"
assignment = "Nanotrasen Navy Captain"
/obj/item/weapon/card/id/centcom/nt_captain/New()
..()
access = get_all_accesses()
access += get_all_centcom_access()
/obj/item/weapon/card/id/centcom/nt_supreme
name = "Nanotrasen Supreme Commander ID card"
assignment = "Nanotrasen Supreme Commander"
/obj/item/weapon/card/id/centcom/nt_supreme/New()
..()
access = get_all_accesses()
access += get_all_centcom_access()
/obj/item/weapon/card/id/emergency_responder
name = "Emergency Responder ID card"
assignment = "Emergency Responder"
icon_state = "ERT_empty"
/obj/item/weapon/card/id/emergency_responder/New()
..()
access = get_centcom_access("Emergency Responder")
/obj/item/weapon/card/id/emergency_responder_leader
name = "Emergency Responder Leader ID card"
assignment = "Emergency Responder Leader"
icon_state = "ERT_leader"
/obj/item/weapon/card/id/emergency_responder_leader/New()
..()
access = get_centcom_access("Emergency Responders Leader")
/obj/item/weapon/card/id/special_operations
name = "Special Operations Officer ID card"
assignment = "Special Operations Officer"
icon_state = "centcom"
/obj/item/weapon/card/id/special_operations/New()
..()
access = get_all_accesses()
access += get_all_centcom_access()
/obj/item/weapon/card/id/soviet_admiral
name = "Admiral ID card"
assignment = "Admiral"
icon_state = "centcom"
/obj/item/weapon/card/id/soviet_admiral/New()
..()
access = get_all_accesses()
access += get_all_centcom_access()
/obj/item/weapon/card/id/judge
name = "Judge ID card"
assignment = "Judge"
icon_state = "ERT_empty"
/obj/item/weapon/card/id/judge/New()
..()
access = get_centcom_access("Emergency Responder")