diff --git a/code/datums/outfits/jobs/cargo.dm b/code/datums/outfits/jobs/cargo.dm
index 10ddb9b7b0..004ce87c22 100644
--- a/code/datums/outfits/jobs/cargo.dm
+++ b/code/datums/outfits/jobs/cargo.dm
@@ -23,7 +23,7 @@
l_ear = /obj/item/device/radio/headset/headset_mine
backpack = /obj/item/weapon/storage/backpack/industrial
satchel_one = /obj/item/weapon/storage/backpack/satchel/eng
- id_type = /obj/item/weapon/card/id/cargo
+ id_type = /obj/item/weapon/card/id/cargo/miner
pda_type = /obj/item/device/pda/shaftminer
backpack_contents = list(/obj/item/weapon/tool/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1)
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm
index a8a07e86e4..722a3fefb6 100644
--- a/code/datums/outfits/jobs/civilian.dm
+++ b/code/datums/outfits/jobs/civilian.dm
@@ -19,7 +19,7 @@
/decl/hierarchy/outfit/job/service/bartender
name = OUTFIT_JOB_NAME("Bartender")
uniform = /obj/item/clothing/under/rank/bartender
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/bartender
pda_type = /obj/item/device/pda/bar
backpack_contents = list(/obj/item/clothing/accessory/permit/gun/bar = 1)
@@ -38,7 +38,7 @@
uniform = /obj/item/clothing/under/rank/chef
suit = /obj/item/clothing/suit/chef
head = /obj/item/clothing/head/chefhat
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/chef
pda_type = /obj/item/device/pda/chef
/decl/hierarchy/outfit/job/service/chef/cook
@@ -54,13 +54,13 @@
backpack = /obj/item/weapon/storage/backpack/hydroponics
satchel_one = /obj/item/weapon/storage/backpack/satchel/hyd
messenger_bag = /obj/item/weapon/storage/backpack/messenger/hyd
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/botanist
pda_type = /obj/item/device/pda/botanist
/decl/hierarchy/outfit/job/service/janitor
name = OUTFIT_JOB_NAME("Janitor")
uniform = /obj/item/clothing/under/rank/janitor
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/janitor
pda_type = /obj/item/device/pda/janitor
/decl/hierarchy/outfit/job/librarian
@@ -70,6 +70,9 @@
id_type = /obj/item/weapon/card/id/civilian
pda_type = /obj/item/device/pda/librarian
+/decl/hierarchy/outfit/job/librarian/journalist
+ id_type = /obj/item/weapon/card/id/civilian/journalist
+
/decl/hierarchy/outfit/job/internal_affairs_agent
name = OUTFIT_JOB_NAME("Internal affairs agent")
l_ear = /obj/item/device/radio/headset/ia
@@ -78,14 +81,14 @@
shoes = /obj/item/clothing/shoes/brown
glasses = /obj/item/clothing/glasses/sunglasses/big
l_hand = /obj/item/weapon/clipboard
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/internal_affairs
pda_type = /obj/item/device/pda/lawyer
/decl/hierarchy/outfit/job/chaplain
name = OUTFIT_JOB_NAME("Chaplain")
uniform = /obj/item/clothing/under/rank/chaplain
l_hand = /obj/item/weapon/storage/bible
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/chaplain
pda_type = /obj/item/device/pda/chaplain
/decl/hierarchy/outfit/job/explorer
@@ -97,7 +100,7 @@
gloves = /obj/item/clothing/gloves/black
l_ear = /obj/item/device/radio/headset
id_slot = slot_wear_id
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/science/explorer
pda_slot = slot_belt
pda_type = /obj/item/device/pda/cargo // Brown looks more rugged
r_pocket = /obj/item/device/gps/explorer
diff --git a/code/datums/outfits/jobs/engineering.dm b/code/datums/outfits/jobs/engineering.dm
index 3da60103c2..a2aba61a96 100644
--- a/code/datums/outfits/jobs/engineering.dm
+++ b/code/datums/outfits/jobs/engineering.dm
@@ -30,5 +30,5 @@
name = OUTFIT_JOB_NAME("Atmospheric technician")
uniform = /obj/item/clothing/under/rank/atmospheric_technician
belt = /obj/item/weapon/storage/belt/utility/atmostech
- id_type = /obj/item/weapon/card/id/engineering
+ id_type = /obj/item/weapon/card/id/engineering/atmos
pda_type = /obj/item/device/pda/atmos
diff --git a/code/datums/outfits/jobs/medical.dm b/code/datums/outfits/jobs/medical.dm
index ae996b2f08..6622d3b285 100644
--- a/code/datums/outfits/jobs/medical.dm
+++ b/code/datums/outfits/jobs/medical.dm
@@ -65,7 +65,7 @@
suit = /obj/item/clothing/suit/storage/toggle/labcoat/chemist
backpack = /obj/item/weapon/storage/backpack/chemistry
satchel_one = /obj/item/weapon/storage/backpack/satchel/chem
- id_type = /obj/item/weapon/card/id/medical
+ id_type = /obj/item/weapon/card/id/medical/chemist
pda_type = /obj/item/device/pda/chemist
/decl/hierarchy/outfit/job/medical/geneticist
@@ -75,7 +75,7 @@
backpack = /obj/item/weapon/storage/backpack/genetics
r_pocket = /obj/item/device/flashlight/pen
satchel_one = /obj/item/weapon/storage/backpack/satchel/gen
- id_type = /obj/item/weapon/card/id/medical
+ id_type = /obj/item/weapon/card/id/medical/geneticist
pda_type = /obj/item/device/pda/geneticist
/decl/hierarchy/outfit/job/medical/psychiatrist
@@ -83,7 +83,7 @@
uniform = /obj/item/clothing/under/rank/psych
suit = /obj/item/clothing/suit/storage/toggle/labcoat
shoes = /obj/item/clothing/shoes/laceup
- id_type = /obj/item/weapon/card/id/medical
+ id_type = /obj/item/weapon/card/id/medical/psych
/decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
name = OUTFIT_JOB_NAME("Psychologist")
@@ -97,7 +97,7 @@
l_hand = /obj/item/weapon/storage/firstaid/regular
belt = /obj/item/weapon/storage/belt/medical/emt
pda_slot = slot_l_store
- id_type = /obj/item/weapon/card/id/medical
+ id_type = /obj/item/weapon/card/id/medical/emt
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
/decl/hierarchy/outfit/job/medical/paramedic/emt
diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm
index 9f127a2701..b1976b7f04 100644
--- a/code/datums/outfits/jobs/security.dm
+++ b/code/datums/outfits/jobs/security.dm
@@ -20,7 +20,7 @@
name = OUTFIT_JOB_NAME("Warden")
uniform = /obj/item/clothing/under/rank/warden
l_pocket = /obj/item/device/flash
- id_type = /obj/item/weapon/card/id/security
+ id_type = /obj/item/weapon/card/id/security/warden
pda_type = /obj/item/device/pda/warden
/decl/hierarchy/outfit/job/security/detective
@@ -31,7 +31,7 @@
l_pocket = /obj/item/weapon/flame/lighter/zippo
shoes = /obj/item/clothing/shoes/laceup
r_hand = /obj/item/weapon/storage/briefcase/crimekit
- id_type = /obj/item/weapon/card/id/security
+ id_type = /obj/item/weapon/card/id/security/detective
pda_type = /obj/item/device/pda/detective
backpack = /obj/item/weapon/storage/backpack
satchel_one = /obj/item/weapon/storage/backpack/satchel/norm
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 5e715b22e1..d08ba39915 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -205,6 +205,7 @@
// Librarian Alt Titles
/datum/alt_title/journalist
title = "Journalist"
+ title_outfit = /decl/hierarchy/outfit/job/librarian/journalist
title_blurb = "The Journalist uses the Library as a base of operations, from which they can report the news and goings-on on the station with their camera."
/datum/alt_title/writer
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index e806631bbd..3360647321 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -41,7 +41,7 @@
/obj/item/weapon/card/id/guest/attack_self(mob/living/user as mob)
if(user.a_intent == I_HURT)
- if(icon_state == "guest_invalid")
+ if(icon_state == "guest-invalid")
to_chat(user, "This guest pass is already deactivated!")
return
@@ -49,7 +49,8 @@
if(confirm == "Yes")
//rip guest pass 3
user.visible_message("\The [user] deactivates \the [src].")
- icon_state = "guest_invalid"
+ icon_state = "guest-invalid"
+ update_icon()
expiration_time = world.time
expired = 1
return ..()
@@ -66,7 +67,8 @@
/obj/item/weapon/card/id/guest/process()
if(expired == 0 && world.time >= expiration_time)
visible_message("\The [src] flashes a few times before turning red.")
- icon_state = "guest_invalid"
+ icon_state = "guest-invalid"
+ update_icon()
expired = 1
world.time = expiration_time
return
diff --git a/code/game/objects/items/weapons/id cards/cards.dm b/code/game/objects/items/weapons/id cards/cards.dm
index 38a1956f8b..2d4d5cfc10 100644
--- a/code/game/objects/items/weapons/id cards/cards.dm
+++ b/code/game/objects/items/weapons/id cards/cards.dm
@@ -13,19 +13,48 @@
*/
/obj/item/weapon/card
name = "card"
- desc = "Does card things."
- icon = 'icons/obj/card.dmi'
+ desc = "A tiny plaque of plastic. Does card things."
+ icon = 'icons/obj/card_new.dmi'
w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS
var/associated_account_number = 0
+ var/list/initial_sprite_stack = list("")
+ var/base_icon = "icons/obj/card_new.dmi"
+ var/list/sprite_stack
+
var/list/files = list( )
drop_sound = 'sound/items/drop/card.ogg'
pickup_sound = 'sound/items/pickup/card.ogg'
+/obj/item/weapon/card/New()
+ . = ..()
+ reset_icon()
+
+/obj/item/weapon/card/proc/reset_icon()
+ sprite_stack = initial_sprite_stack
+ update_icon()
+
+/obj/item/weapon/card/update_icon()
+ if(!sprite_stack || !istype(sprite_stack) || sprite_stack == list(""))
+ icon = base_icon
+ icon_state = initial(icon_state)
+
+ var/icon/I = null
+ for(var/iconstate in sprite_stack)
+ if(!iconstate)
+ iconstate = icon_state
+ if(I)
+ var/icon/IC = new(base_icon, iconstate)
+ I.Blend(IC, ICON_OVERLAY)
+ else
+ I = new/icon(base_icon, iconstate)
+ if(I)
+ icon = I
+
/obj/item/weapon/card/data
- name = "data disk"
- desc = "A disk of data."
+ name = "data card"
+ desc = "A solid-state storage card, used to back up or transfer information. What knowledge could it contain?"
icon_state = "data"
var/function = "storage"
var/data = "null"
@@ -35,20 +64,20 @@
pickup_sound = 'sound/items/pickup/disk.ogg'
/obj/item/weapon/card/data/verb/label(t as text)
- set name = "Label Disk"
+ set name = "Label Card"
set category = "Object"
set src in usr
if (t)
- src.name = text("data disk- '[]'", t)
+ src.name = text("data card- '[]'", t)
else
- src.name = "data disk"
+ src.name = "data card"
src.add_fingerprint(usr)
return
/obj/item/weapon/card/data/clown
name = "\proper the coordinates to clown planet"
- icon_state = "data"
+ icon_state = "rainbow"
item_state = "card-id"
level = 2
desc = "This card contains coordinates to the fabled Clown Planet. Handle with care."
@@ -62,7 +91,7 @@
/obj/item/weapon/card/emag_broken
desc = "It's a card with a magnetic strip attached to some circuitry. It looks too busted to be used for anything but salvage."
name = "broken cryptographic sequencer"
- icon_state = "emag"
+ icon_state = "emag-spent"
item_state = "card-id"
origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
diff --git a/code/game/objects/items/weapons/id cards/id_stacks.dm b/code/game/objects/items/weapons/id cards/id_stacks.dm
new file mode 100644
index 0000000000..c073f6cba3
--- /dev/null
+++ b/code/game/objects/items/weapons/id cards/id_stacks.dm
@@ -0,0 +1,96 @@
+// This is a defines file for card sprite stacks. If a new card set comes in, this file can just be disabled and a new one made to match the new sprites.
+// Generally, if the icon file is card_xxx.dmi, this filename should be sprite_stacks_xxx.dm
+// Please make sure that only the relevant sprite_stacks_xxx.file is included, if more are made.
+
+/obj/item/weapon/card
+ icon = 'icons/obj/card_new.dmi' // These are redefined here so that changing sprites is as easy as clicking the checkbox.
+ base_icon = "icons/obj/card_new.dmi"
+
+ // New sprite stacks can be defined here. You could theoretically change icon-states as well but right now this file compiles before station_ids.dm so those wouldn't be affected.
+ id
+ generic
+ initial_sprite_stack = list("base-stamp", "top-generic", "stamp-silhouette", "clip")
+ centcom
+ initial_sprite_stack = list("base-stamp", "top-blue", "stamp-n", "pips-gold")
+ vip
+ initial_sprite_stack = list("base-stamp-gold", "top-blue", "stamp-n", "pips-gold")
+ ERT
+ initial_sprite_stack = list("base-stamp", "top-blue", "stamp-n", "pips-red", "stripe-red")
+ silver
+ initial_sprite_stack = list("base-stamp-silver", "top-mime", "stamp-n-generic")
+ secretary
+ initial_sprite_stack = list("base-stamp", "top-blue", "stamp-n")
+ hop
+ initial_sprite_stack = list("base-stamp", "top-blue", "stamp-n", "stripe-white")
+ medical
+ initial_sprite_stack = list("base-stamp", "top-medblu", "stamp-n")
+ chemist
+ initial_sprite_stack = list("base-stamp", "top-medblu", "stamp-n", "pips-orange")
+ geneticist
+ initial_sprite_stack = list("base-stamp", "top-medblu", "stamp-n", "pips-purple")
+ psych
+ initial_sprite_stack = list("base-stamp", "top-medblu", "stamp-n", "pips-purple")
+ emt
+ initial_sprite_stack = list("base-stamp", "top-medblu", "stamp-n", "pips-blue")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-medblu", "stamp-n", "stripe-gold")
+ sar
+ initial_sprite_stack = list("base-stamp", "top-darkgreen", "stamp-n", "pips-medblu")
+ security
+ initial_sprite_stack = list("base-stamp", "top-red", "stamp-n")
+ detective
+ initial_sprite_stack = list("base-stamp", "top-red", "stamp-n", "pips-brown")
+ warden
+ initial_sprite_stack = list("base-stamp", "top-red", "stamp-n", "pips-white")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-red", "stamp-n", "stripe-gold")
+ engineering
+ initial_sprite_stack = list("base-stamp", "top-orange", "stamp-n")
+ atmos
+ initial_sprite_stack = list("base-stamp", "top-orange", "pips-medblu", "stamp-n")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-orange", "stamp-n", "stripe-gold")
+ science
+ initial_sprite_stack = list("base-stamp", "top-purple", "stamp-n")
+ roboticist
+ initial_sprite_stack = list("base-stamp", "top-purple", "stamp-n", "pips-orange")
+ explorer
+ initial_sprite_stack = list("base-stamp", "top-darkgreen", "stamp-n")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-purple", "stamp-n", "stripe-gold")
+ pathfinder
+ initial_sprite_stack = list("base-stamp-silver", "top-darkgreen", "stamp-n", "pips-purple") //not a true head, no gold stripe for you
+ cargo
+ initial_sprite_stack = list("base-stamp", "top-brown", "stamp-n")
+ miner
+ initial_sprite_stack = list("base-stamp", "top-brown", "stamp-n", "pips-purple")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-brown", "stamp-n", "pips-gold")
+ civilian
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n")
+ chaplain
+ initial_sprite_stack = list("base-stamp-silver", "top-dark", "stamp-cross", "pips-white")
+ internal_affairs
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n")
+ botanist
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n", "pips-brown")
+ bartender
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n", "pips-dark")
+ chef
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n", "pips-white")
+ janitor
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n", "pips-purple")
+ journalist
+ initial_sprite_stack = list("base-stamp", "top-green", "stamp-n")
+ clown
+ initial_sprite_stack = list("base-stamp", "top-rainbow", "stamp-n")
+ mime
+ initial_sprite_stack = list("base-stamp", "top-white", "stamp-n", "stripe-black")
+ pilot
+ initial_sprite_stack = list("base-stamp", "top-generic", "stamp-n", "pips-blue")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-blue", "stamp-n", "stripe-white")
+ syndicate
+ initial_sprite_stack = list("base-stamp-dark", "top-syndicate", "stamp-s")
+ officer
+ initial_sprite_stack = list("base-stamp-dark", "top-syndicate", "stamp-s", "pips-gold", "stripe-gold")
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/id cards/id_stacks_cit.dm b/code/game/objects/items/weapons/id cards/id_stacks_cit.dm
new file mode 100644
index 0000000000..a35b1febf9
--- /dev/null
+++ b/code/game/objects/items/weapons/id cards/id_stacks_cit.dm
@@ -0,0 +1,92 @@
+// This is a defines file for card sprite stacks. If a new card set comes in, this file can just be disabled and a new one made to match the new sprites.
+// Generally, if the icon file is card_xxx.dmi, this filename should be sprite_stacks_xxx.dm
+// Please make sure that only the relevant sprite_stacks_xxx.file is included, if more are made.
+
+
+
+/obj/item/weapon/card
+ icon = 'icons/obj/card_new.dmi' // These are redefined here so that changing sprites is as easy as clicking the checkbox.
+ base_icon = "icons/obj/card_new.dmi"
+
+ // New sprite stacks can be defined here. You could theoretically change icon-states as well but right now this file compiles before station_ids.dm so those wouldn't be affected.
+ id
+ centcom
+ initial_sprite_stack = list("base-stamp", "top-blue", "dept-nanotrasen", "letter-n-command", "pips-gold")
+ vip
+ initial_sprite_stack = list("base-stamp-gold", "top-blue", "dept-vip-gold", "letter-n-command", "pips-gold")
+ ERT
+ initial_sprite_stack = list("base-stamp", "top-dark", "dept-nanotrasen", "letter-n-command")
+ silver
+ initial_sprite_stack = list("base-stamp-silver", "top-mime", "letter-n-generic")
+ secretary
+ initial_sprite_stack = list("base-stamp", "top-blue", "dept-secretary", "letter-n-command")
+ hop
+ initial_sprite_stack = list("base-stamp-silver", "top-blue", "dept-hop", "letter-n-command", "pips-gold")
+ medical
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "letter-n-medical")
+ chemist
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "letter-n-medical", "pips-engineering")
+ geneticist
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "letter-n-medical", "pips-science")
+ psych
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "letter-n-medical", "pips-science")
+ emt
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "letter-n-medical", "pips-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-medblu", "dept-medical", "letter-n-command", "pips-gold")
+ sar
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-exploration", "letter-n-command", "pips-command")
+ security
+ initial_sprite_stack = list("base-stamp", "top-red", "dept-security", "letter-n-security")
+ detective
+ initial_sprite_stack = list("base-stamp", "top-red", "dept-security", "letter-n-security", "pips-cargo")
+ warden
+ initial_sprite_stack = list("base-stamp", "top-red", "dept-security", "letter-n-security", "pips-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-red", "dept-security", "letter-n-command", "pips-gold")
+ engineering
+ initial_sprite_stack = list("base-stamp", "top-orange", "dept-engineering", "letter-n-engineering")
+ atmos
+ initial_sprite_stack = list("base-stamp", "top-orange", "dept-engineering", "pips-medical", "letter-n-engineering")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-orange", "dept-engineering", "letter-n-command", "pips-gold")
+ science
+ initial_sprite_stack = list("base-stamp", "top-purple", "dept-science", "letter-n-science")
+ roboticist
+ initial_sprite_stack = list("base-stamp", "top-purple", "dept-science", "letter-n-science", "pips-engineering")
+ explorer
+ initial_sprite_stack = list("base-stamp", "top-blue", "dept-exploration", "letter-n-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-purple", "dept-science", "letter-n-command", "pips-gold")
+ pathfinder
+ initial_sprite_stack = list("base-stamp-silver", "top-blue", "dept-exploration", "letter-n-command", "pips-gold")
+ cargo
+ initial_sprite_stack = list("base-stamp", "top-brown", "dept-cargo", "letter-n-cargo")
+ miner
+ initial_sprite_stack = list("base-stamp", "top-brown", "dept-cargo", "letter-n-cargo", "pips-science")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-brown", "dept-cargo", "letter-n-command", "pips-gold")
+ civilian
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "letter-n-civilian")
+ chaplain
+ initial_sprite_stack = list("base-stamp-silver", "top-dark", "letter-cross", "pips-white")
+ internal_affairs
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-internal-affairs", "letter-n-command")
+ botanist
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "letter-n-civilian", "pips-cargo")
+ bartender
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "letter-n-civilian", "pips-dark")
+ chef
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "letter-n-civilian", "pips-white")
+ janitor
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "letter-n-civilian", "pips-science")
+ journalist
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-press", "letter-n-civilian")
+ clown
+ initial_sprite_stack = list("base-stamp", "top-pink", "dept-clown", "letter-n-clown")
+ mime
+ initial_sprite_stack = list("base-stamp", "top-white", "letter-n-mime")
+ pilot
+ initial_sprite_stack = list("base-stamp", "top-generic", "dept-pilot", "letter-n-command", "pips-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-command", "letter-n-command", "pips-civilian")
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/id cards/id_stacks_deptname.dm b/code/game/objects/items/weapons/id cards/id_stacks_deptname.dm
new file mode 100644
index 0000000000..bce7340ecc
--- /dev/null
+++ b/code/game/objects/items/weapons/id cards/id_stacks_deptname.dm
@@ -0,0 +1,92 @@
+// This is a defines file for card sprite stacks. If a new card set comes in, this file can just be disabled and a new one made to match the new sprites.
+// Generally, if the icon file is card_xxx.dmi, this filename should be sprite_stacks_xxx.dm
+// Please make sure that only the relevant sprite_stacks_xxx.file is included, if more are made.
+
+
+
+/obj/item/weapon/card
+ icon = 'icons/obj/card_new.dmi' // These are redefined here so that changing sprites is as easy as clicking the checkbox.
+ base_icon = "icons/obj/card_new.dmi"
+
+ // New sprite stacks can be defined here. You could theoretically change icon-states as well but right now this file compiles before station_ids.dm so those wouldn't be affected.
+ id
+ centcom
+ initial_sprite_stack = list("base-stamp", "top-blue", "dept-nanotrasen", "stamp-n", "pips-gold")
+ vip
+ initial_sprite_stack = list("base-stamp-gold", "dept-vip", "top-blue", "stamp-n", "pips-gold")
+ ERT
+ initial_sprite_stack = list("base-stamp", "top-dark", "dept-ert", "stamp-n")
+ silver
+ initial_sprite_stack = list("base-stamp-silver", "top-mime", "stamp-n-generic")
+ secretary
+ initial_sprite_stack = list("base-stamp", "top-blue", "dept-secretary", "stamp-n")
+ hop
+ initial_sprite_stack = list("base-stamp-silver", "top-blue", "dept-hop", "stamp-n", "pips-gold")
+ medical
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "stamp-n")
+ chemist
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "stamp-n", "pips-engineering")
+ geneticist
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "stamp-n", "pips-science")
+ psych
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "stamp-n", "pips-science")
+ emt
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-medical", "stamp-n", "pips-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-medblu", "dept-medical", "stamp-n", "pips-gold")
+ sar
+ initial_sprite_stack = list("base-stamp", "top-medblu", "dept-exploration", "stamp-n", "pips-command")
+ security
+ initial_sprite_stack = list("base-stamp", "top-red", "dept-security", "stamp-n")
+ detective
+ initial_sprite_stack = list("base-stamp", "top-red", "dept-security", "stamp-n", "pips-cargo")
+ warden
+ initial_sprite_stack = list("base-stamp", "top-red", "dept-security", "stamp-n", "pips-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-red", "dept-security", "stamp-n", "pips-gold")
+ engineering
+ initial_sprite_stack = list("base-stamp", "top-orange", "dept-engineering", "stamp-n")
+ atmos
+ initial_sprite_stack = list("base-stamp", "top-orange", "dept-engineering", "pips-medical", "stamp-n")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-orange", "dept-engineering", "stamp-n", "pips-gold")
+ science
+ initial_sprite_stack = list("base-stamp", "top-purple", "dept-science", "stamp-n")
+ roboticist
+ initial_sprite_stack = list("base-stamp", "top-purple", "dept-science", "stamp-n", "pips-engineering")
+ explorer
+ initial_sprite_stack = list("base-stamp", "top-blue", "dept-exploration", "stamp-n")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-purple", "dept-science", "stamp-n", "pips-gold")
+ pathfinder
+ initial_sprite_stack = list("base-stamp-silver", "top-blue", "dept-exploration", "stamp-n", "pips-gold")
+ cargo
+ initial_sprite_stack = list("base-stamp", "top-brown", "dept-cargo", "stamp-n")
+ miner
+ initial_sprite_stack = list("base-stamp", "top-brown", "dept-cargo", "stamp-n", "pips-science")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-brown", "dept-cargo", "stamp-n", "pips-gold")
+ civilian
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "stamp-n")
+ chaplain
+ initial_sprite_stack = list("base-stamp-silver", "top-dark", "letter-cross", "pips-white")
+ internal_affairs
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-internal-affairs", "stamp-n")
+ botanist
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "stamp-n", "pips-cargo")
+ bartender
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "stamp-n", "pips-dark")
+ chef
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "stamp-n", "pips-white")
+ janitor
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-civilian", "stamp-n", "pips-science")
+ journalist
+ initial_sprite_stack = list("base-stamp", "top-green", "dept-press", "stamp-n")
+ clown
+ initial_sprite_stack = list("base-stamp", "top-pink", "dept-clown", "stamp-n")
+ mime
+ initial_sprite_stack = list("base-stamp", "top-white", "stamp-n-mime")
+ pilot
+ initial_sprite_stack = list("base-stamp", "top-generic", "dept-pilot", "stamp-n", "pips-command")
+ head
+ initial_sprite_stack = list("base-stamp-silver", "top-command", "stamp-n", "pips-civilian")
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index 28f0b9c253..422b126262 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -1,7 +1,7 @@
/obj/item/weapon/card/id
name = "identification card"
desc = "A card used to provide ID and determine access across the station."
- icon_state = "id"
+ icon_state = "generic-nt"
item_state = "card-id"
sprite_sheets = list(
@@ -127,13 +127,13 @@
/obj/item/weapon/card/id/silver
name = "identification card"
desc = "A silver card which shows honour and dedication."
- icon_state = "silver"
+ icon_state = "silver-id"
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"
+ icon_state = "gold-id"
item_state = "gold_id"
preserve_item = 1
@@ -144,13 +144,14 @@
/obj/item/weapon/card/id/gold/captain/spare
name = "\improper Site Manager's spare ID"
desc = "The spare ID of the High Lord himself."
+ icon_state = "gold-id-alternate"
registered_name = "Site Manager"
/obj/item/weapon/card/id/synthetic
name = "\improper Synthetic ID"
desc = "Access module for NanoTrasen Synthetics"
icon_state = "id-robot"
- item_state = "tdgreen"
+ item_state = "idgreen"
assignment = "Synthetic"
/obj/item/weapon/card/id/synthetic/Initialize()
@@ -172,7 +173,7 @@
/obj/item/weapon/card/id/centcom
name = "\improper CentCom. ID"
desc = "An ID straight from Central Command."
- icon_state = "nanotrasen"
+ icon_state = "cc-id"
registered_name = "Central Command"
assignment = "General"
@@ -187,7 +188,7 @@
/obj/item/weapon/card/id/centcom/ERT
name = "\improper Emergency Response Team ID"
assignment = "Emergency Response Team"
- icon_state = "centcom"
+ icon_state = "ert-id"
/obj/item/weapon/card/id/centcom/ERT/Initialize()
. = ..()
@@ -197,14 +198,13 @@
/obj/item/weapon/card/id/medical
name = "identification card"
desc = "A card issued to station medical staff."
- icon_state = "med"
+ icon_state = "medical-id"
primary_color = rgb(189,237,237)
secondary_color = rgb(223,255,255)
/obj/item/weapon/card/id/medical/head
name = "identification card"
desc = "A card which represents care and compassion."
- icon_state = "medGold"
primary_color = rgb(189,237,237)
secondary_color = rgb(255,223,127)
assignment = "Chief Medical Officer"
@@ -213,14 +213,17 @@
/obj/item/weapon/card/id/security
name = "identification card"
desc = "A card issued to station security staff."
- icon_state = "sec"
+ icon_state = "security-id"
primary_color = rgb(189,47,0)
secondary_color = rgb(223,127,95)
+/obj/item/weapon/card/id/security/warden
+ assignment = "Warden"
+ rank = "Warden"
+
/obj/item/weapon/card/id/security/head
name = "identification card"
desc = "A card which represents honor and protection."
- icon_state = "secGold"
primary_color = rgb(189,47,0)
secondary_color = rgb(255,223,127)
assignment = "Head of Security"
@@ -229,14 +232,17 @@
/obj/item/weapon/card/id/engineering
name = "identification card"
desc = "A card issued to station engineering staff."
- icon_state = "eng"
+ icon_state = "engineering-id"
primary_color = rgb(189,94,0)
secondary_color = rgb(223,159,95)
+/obj/item/weapon/card/id/engineering/atmos
+ assignment = "Atmospheric Technician"
+ rank = "Atmospheric Technician"
+
/obj/item/weapon/card/id/engineering/head
name = "identification card"
desc = "A card which represents creativity and ingenuity."
- icon_state = "engGold"
primary_color = rgb(189,94,0)
secondary_color = rgb(255,223,127)
assignment = "Chief Engineer"
@@ -245,14 +251,13 @@
/obj/item/weapon/card/id/science
name = "identification card"
desc = "A card issued to station science staff."
- icon_state = "sci"
+ icon_state = "science-id"
primary_color = rgb(142,47,142)
secondary_color = rgb(191,127,191)
/obj/item/weapon/card/id/science/head
name = "identification card"
desc = "A card which represents knowledge and reasoning."
- icon_state = "sciGold"
primary_color = rgb(142,47,142)
secondary_color = rgb(255,223,127)
assignment = "Research Director"
@@ -261,14 +266,13 @@
/obj/item/weapon/card/id/cargo
name = "identification card"
desc = "A card issued to station cargo staff."
- icon_state = "cargo"
+ icon_state = "cargo-id"
primary_color = rgb(142,94,0)
secondary_color = rgb(191,159,95)
/obj/item/weapon/card/id/cargo/head
name = "identification card"
desc = "A card which represents service and planning."
- icon_state = "cargoGold"
primary_color = rgb(142,94,0)
secondary_color = rgb(255,223,127)
assignment = "Quartermaster"
@@ -297,7 +301,7 @@
/obj/item/weapon/card/id/civilian
name = "identification card"
desc = "A card issued to station civilian staff."
- icon_state = "civ"
+ icon_state = "civilian-id"
primary_color = rgb(0,94,142)
secondary_color = rgb(95,159,191)
assignment = "Civilian"
@@ -306,13 +310,12 @@
/obj/item/weapon/card/id/civilian/head //This is not the HoP. There's no position that uses this right now.
name = "identification card"
desc = "A card which represents common sense and responsibility."
- icon_state = "civGold"
primary_color = rgb(0,94,142)
secondary_color = rgb(255,223,127)
/obj/item/weapon/card/id/external
name = "identification card"
desc = "An identification card of some sort. It does not look like it is issued by NT."
- icon_state = "permit"
+ icon_state = "generic"
primary_color = rgb(142,94,0)
secondary_color = rgb(191,159,95)
diff --git a/code/game/objects/items/weapons/id cards/syndicate_ids.dm b/code/game/objects/items/weapons/id cards/syndicate_ids.dm
index 68cb0298a4..44f87390db 100644
--- a/code/game/objects/items/weapons/id cards/syndicate_ids.dm
+++ b/code/game/objects/items/weapons/id cards/syndicate_ids.dm
@@ -1,6 +1,6 @@
/obj/item/weapon/card/id/syndicate
name = "agent card"
- icon_state = "syndicate"
+ icon_state = "generic-s"
assignment = "Agent"
origin_tech = list(TECH_ILLEGAL = 3)
var/electronic_warfare = 1
@@ -108,6 +108,8 @@
if(choice && CanUseTopic(user, state))
src.icon_state = choice.icon_state
src.item_state = choice.item_state
+ src.sprite_stack = choice.sprite_stack
+ update_icon()
to_chat(usr, "Appearance changed to [choice].")
. = 1
if("Assignment")
@@ -177,6 +179,8 @@
electronic_warfare = initial(electronic_warfare)
fingerprint_hash = initial(fingerprint_hash)
icon_state = initial(icon_state)
+ sprite_stack = list("")
+ update_icon()
name = initial(name)
registered_name = initial(registered_name)
unset_registered_user()
@@ -192,11 +196,12 @@
if(!id_card_states)
id_card_states = list()
for(var/path in typesof(/obj/item/weapon/card/id))
- var/obj/item/weapon/card/id/ID = path
+ var/obj/item/weapon/card/id/ID = new path()
var/datum/card_state/CS = new()
CS.icon_state = initial(ID.icon_state)
CS.item_state = initial(ID.item_state)
- CS.name = initial(ID.name) + " - " + initial(ID.icon_state)
+ CS.sprite_stack = ID.initial_sprite_stack
+ CS.name = initial(ID.name)
id_card_states += CS
id_card_states = dd_sortedObjectList(id_card_states)
@@ -206,6 +211,7 @@
var/name
var/icon_state
var/item_state
+ var/sprite_stack
/datum/card_state/dd_SortValue()
return name
@@ -214,5 +220,6 @@
name = "syndicate ID card"
desc = "An ID straight from the Syndicate."
registered_name = "Syndicate"
- assignment = "Syndicate Overlord"
+ assignment = "Syndicate Commander"
+ icon_state = "syndicate-id"
access = list(access_syndicate, access_external_airlocks)
\ No newline at end of file
diff --git a/code/modules/clothing/under/accessories/permits.dm b/code/modules/clothing/under/accessories/permits.dm
index d7a5c3f396..c89d9ee019 100644
--- a/code/modules/clothing/under/accessories/permits.dm
+++ b/code/modules/clothing/under/accessories/permits.dm
@@ -3,8 +3,8 @@
/obj/item/clothing/accessory/permit
name = "permit"
desc = "A permit for something."
- icon = 'icons/obj/card.dmi'
- icon_state = "permit"
+ icon = 'icons/obj/card_new.dmi'
+ icon_state = "permit-generic"
w_class = ITEMSIZE_TINY
slot = ACCESSORY_SLOT_MEDAL
var/owner = 0 //To prevent people from just renaming the thing if they steal it
@@ -30,6 +30,7 @@
/obj/item/clothing/accessory/permit/gun
name = "weapon permit"
desc = "A card indicating that the owner is allowed to carry a firearm."
+ icon_state = "permit-security"
/obj/item/clothing/accessory/permit/gun/bar
name = "bar shotgun permit"
@@ -38,8 +39,9 @@
/obj/item/clothing/accessory/permit/gun/planetside
name = "planetside gun permit"
desc = "A card indicating that the owner is allowed to carry a firearm while on the surface."
+ icon_state = "permit-science"
/obj/item/clothing/accessory/permit/drone
name = "drone identification card"
desc = "A card issued by the EIO, indicating that the owner is a Drone Intelligence. Drones are mandated to carry this card within SolGov space, by law."
- icon_state = "permit_drone"
\ No newline at end of file
+ icon_state = "permit-drone"
\ No newline at end of file
diff --git a/icons/obj/card_cit.dmi b/icons/obj/card_cit.dmi
new file mode 100644
index 0000000000..165c0c0a5a
Binary files /dev/null and b/icons/obj/card_cit.dmi differ
diff --git a/icons/obj/card_new.dmi b/icons/obj/card_new.dmi
new file mode 100644
index 0000000000..f5b658ccd0
Binary files /dev/null and b/icons/obj/card_new.dmi differ
diff --git a/maps/southern_cross/job/outfits.dm b/maps/southern_cross/job/outfits.dm
index 544de59637..c89d4ae59d 100644
--- a/maps/southern_cross/job/outfits.dm
+++ b/maps/southern_cross/job/outfits.dm
@@ -14,7 +14,7 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
id_slot = slot_wear_id
pda_slot = slot_l_store
pda_type = /obj/item/device/pda/cargo // Brown looks more rugged
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/science/explorer
id_pda_assignment = "Explorer"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1)
@@ -48,7 +48,7 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
id_slot = slot_wear_id
pda_slot = slot_belt
pda_type = /obj/item/device/pda/cargo // Brown looks more rugged
- id_type = /obj/item/weapon/card/id/civilian
+ id_type = /obj/item/weapon/card/id/civilian/pilot
id_pda_assignment = "Pilot"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
@@ -61,6 +61,6 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
l_hand = /obj/item/weapon/storage/firstaid/regular
belt = /obj/item/weapon/storage/belt/medical/emt
pda_slot = slot_l_store
- id_type = /obj/item/weapon/card/id/medical
+ id_type = /obj/item/weapon/card/id/medical/sar
id_pda_assignment = "Search and Rescue"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
\ No newline at end of file
diff --git a/polaris.dme b/polaris.dme
index 1b97c31c02..d6d478d8d5 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1130,6 +1130,7 @@
#include "code\game\objects\items\weapons\grenades\spawnergrenade.dm"
#include "code\game\objects\items\weapons\grenades\supermatter.dm"
#include "code\game\objects\items\weapons\id cards\cards.dm"
+#include "code\game\objects\items\weapons\id cards\id_stacks.dm"
#include "code\game\objects\items\weapons\id cards\station_ids.dm"
#include "code\game\objects\items\weapons\id cards\syndicate_ids.dm"
#include "code\game\objects\items\weapons\implants\implant.dm"