diff --git a/code/datums/quirks/negative.dm b/code/datums/quirks/negative.dm
index 23a18602024..d05aac51753 100644
--- a/code/datums/quirks/negative.dm
+++ b/code/datums/quirks/negative.dm
@@ -123,104 +123,33 @@
desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!"
value = -2
mood_quirk = TRUE
- var/obj/item/heirloom
- var/where
medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom."
hardcore_value = 1
+ /// A reference to our heirloom.
+ var/obj/item/heirloom
+ /// Where our heirloom is spawning.
+ var/heirloom_spawn_loc
/datum/quirk/family_heirloom/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
+ /// The quirk holder, casted to human
+ var/mob/living/carbon/human/human_holder = quirk_holder
+ /// The heirloom we will spawn
var/obj/item/heirloom_type
- if(ismoth(H) && prob(50))
- heirloom_type = /obj/item/flashlight/lantern/heirloom_moth
- else if(isfelinid(H) && prob(50))
- heirloom_type = /obj/item/toy/cattoy
+ /// The quirk holder's species - we have a 50% chance, if we have a species with a set heirloom, to choose a species heirloom.
+ var/datum/species/holder_species = human_holder.dna?.species
+ if(holder_species && LAZYLEN(holder_species.family_heirlooms) && prob(50))
+ heirloom_type = pick(holder_species.family_heirlooms)
else
- switch(quirk_holder.mind.assigned_role)
- //Service jobs
- if("Clown")
- heirloom_type = /obj/item/bikehorn/golden
- if("Mime")
- heirloom_type = /obj/item/food/baguette
- if("Janitor")
- heirloom_type = pick(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap)
- if("Cook")
- heirloom_type = pick(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat)
- if("Botanist")
- heirloom_type = pick(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie)
- if("Bartender")
- heirloom_type = pick(/obj/item/reagent_containers/glass/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker)
- if("Curator")
- heirloom_type = pick(/obj/item/pen/fountain, /obj/item/storage/pill_bottle/dice)
- if("Chaplain")
- heirloom_type = pick(/obj/item/toy/windup_toolbox, /obj/item/reagent_containers/food/drinks/bottle/holywater)
- if("Assistant")
- heirloom_type = pick(/obj/item/storage/toolbox/mechanical/old/heirloom, /obj/item/clothing/gloves/cut/heirloom)
- //Security/Command
- if("Captain")
- heirloom_type = /obj/item/reagent_containers/food/drinks/flask/gold
- if("Head of Security")
- heirloom_type = /obj/item/book/manual/wiki/security_space_law
- if("Head of Personnel")
- heirloom_type = /obj/item/reagent_containers/food/drinks/trophy/silver_cup
- if("Warden")
- heirloom_type = /obj/item/book/manual/wiki/security_space_law
- if("Security Officer")
- heirloom_type = pick(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
- if("Detective")
- heirloom_type = /obj/item/reagent_containers/food/drinks/bottle/whiskey
- if("Lawyer")
- heirloom_type = pick(/obj/item/gavelhammer, /obj/item/book/manual/wiki/security_space_law)
- if("Prisoner")
- heirloom_type = /obj/item/pen/blue
- //RnD
- if("Research Director")
- heirloom_type = /obj/item/toy/plush/slimeplushie
- if("Scientist")
- heirloom_type = /obj/item/toy/plush/slimeplushie
- if("Roboticist")
- heirloom_type = pick(subtypesof(/obj/item/toy/prize) + /obj/item/toy/plush/pkplush) //look at this nerd
- if("Geneticist")
- heirloom_type = /obj/item/clothing/under/shorts/purple
- //Medical
- if("Chief Medical Officer")
- heirloom_type = /obj/item/storage/firstaid/ancient/heirloom
- if("Medical Doctor")
- heirloom_type = /obj/item/storage/firstaid/ancient/heirloom
- if("Paramedic")
- heirloom_type = /obj/item/storage/firstaid/ancient/heirloom
- if("Psychologist")
- heirloom_type = /obj/item/storage/pill_bottle
- if("Chemist")
- heirloom_type = pick(/obj/item/book/manual/wiki/chemistry, /obj/item/ph_booklet)
- if("Virologist")
- heirloom_type = /obj/item/reagent_containers/syringe
- //Engineering
- if("Chief Engineer")
- heirloom_type = pick(/obj/item/clothing/head/hardhat/white, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters)
- if("Station Engineer")
- heirloom_type = pick(/obj/item/clothing/head/hardhat, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters)
- if("Atmospheric Technician")
- heirloom_type = pick(/obj/item/lighter, /obj/item/lighter/greyscale, /obj/item/storage/box/matches)
- //Supply
- if("Quartermaster")
- heirloom_type = pick(/obj/item/stamp, /obj/item/stamp/denied)
- if("Cargo Technician")
- heirloom_type = /obj/item/clipboard
- if("Shaft Miner")
- heirloom_type = pick(/obj/item/pickaxe/mini, /obj/item/shovel)
- //SKYRAT EDIT ADDITION BEGIN - SEC_HAUL
- if("Brig Physician")
- heirloom_type = pick(/obj/item/clothing/neck/stethoscope, /obj/item/roller, /obj/item/book/manual/wiki/security_space_law)
- if("Security Sergeant")
- heirloom_type = pick(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
- //SKYRAT EDIT END
+ /// Our quirk holder's job
+ var/datum/job/holder_job = SSjob.GetJob(human_holder.mind?.assigned_role)
+ if(holder_job && LAZYLEN(holder_job.family_heirlooms))
+ heirloom_type = pick(holder_job.family_heirlooms)
+
+ // If we didn't find an heirloom somehow, throw them a generic one
if(!heirloom_type)
- heirloom_type = pick(
- /obj/item/toy/cards/deck,
- /obj/item/lighter,
- /obj/item/dice/d20)
+ heirloom_type = pick(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20)
+
heirloom = new heirloom_type(get_turf(quirk_holder))
var/list/slots = list(
LOCATION_LPOCKET = ITEM_SLOT_LPOCKET,
@@ -228,14 +157,14 @@
LOCATION_BACKPACK = ITEM_SLOT_BACKPACK,
LOCATION_HANDS = ITEM_SLOT_HANDS
)
- where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet"
+ heirloom_spawn_loc = human_holder.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet"
/datum/quirk/family_heirloom/post_add()
- if(where == LOCATION_BACKPACK)
+ if(heirloom_spawn_loc == LOCATION_BACKPACK)
var/mob/living/carbon/human/H = quirk_holder
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
- to_chat(quirk_holder, "There is a precious family [heirloom.name] [where], passed down from generation to generation. Keep it safe!")
+ to_chat(quirk_holder, "There is a precious family [heirloom.name] [heirloom_spawn_loc], passed down from generation to generation. Keep it safe!")
var/list/names = splittext(quirk_holder.real_name, " ")
var/family_name = names[names.len]
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 9f6098c2680..dbf3c521465 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -70,6 +70,9 @@
/// Should this job be allowed to be picked for the bureaucratic error event?
var/allow_bureaucratic_error = TRUE
+ /// List of family heirlooms this job can get with the family heirloom quirk. List of types.
+ var/list/family_heirlooms
+
/datum/job/New()
. = ..()
var/list/jobs_changes = get_map_changes()
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index fc84ab2d867..ca8ba9de09d 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -18,6 +18,8 @@ Assistant
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_ASSISTANT
+ family_heirlooms = list(/obj/item/storage/toolbox/mechanical/old/heirloom, /obj/item/clothing/gloves/cut/heirloom)
+
/datum/outfit/job/assistant
name = "Assistant"
jobtype = /datum/job/assistant
diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm
index c42726ac58f..9b6696228e1 100644
--- a/code/modules/jobs/job_types/atmospheric_technician.dm
+++ b/code/modules/jobs/job_types/atmospheric_technician.dm
@@ -20,6 +20,8 @@
bounty_types = CIV_JOB_ENG
departments = DEPARTMENT_ENGINEERING
+ family_heirlooms = list(/obj/item/lighter, /obj/item/lighter/greyscale, /obj/item/storage/box/matches)
+
/datum/outfit/job/atmos
name = "Atmospheric Technician"
jobtype = /datum/job/atmospheric_technician
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index 00b261e8e3d..76c467b07a7 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -15,6 +15,8 @@
bounty_types = CIV_JOB_DRINK
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/reagent_containers/glass/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker)
+
/datum/outfit/job/bartender
name = "Bartender"
jobtype = /datum/job/bartender
diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm
index 29f37048475..e150d6f9dc0 100644
--- a/code/modules/jobs/job_types/botanist.dm
+++ b/code/modules/jobs/job_types/botanist.dm
@@ -15,6 +15,8 @@
bounty_types = CIV_JOB_GROW
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie)
+
/datum/outfit/job/botanist
name = "Botanist"
jobtype = /datum/job/botanist
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
old mode 100644
new mode 100755
index 2603e8ff151..038ff25dd62
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -23,6 +23,8 @@
display_order = JOB_DISPLAY_ORDER_CAPTAIN
departments = DEPARTMENT_COMMAND
+ family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
+
/datum/job/captain/announce(mob/living/carbon/human/H, announce_captaincy = TRUE)
..()
if(announce_captaincy)
diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm
index cecf006b905..e5ae4dd82fc 100644
--- a/code/modules/jobs/job_types/cargo_technician.dm
+++ b/code/modules/jobs/job_types/cargo_technician.dm
@@ -17,6 +17,8 @@
bounty_types = CIV_JOB_RANDOM
departments = DEPARTMENT_CARGO
+ family_heirlooms = list(/obj/item/clipboard)
+
/datum/outfit/job/cargo_tech
name = "Cargo Technician"
jobtype = /datum/job/cargo_technician
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index 3f2da02d779..8c5f90d925f 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -15,6 +15,8 @@
display_order = JOB_DISPLAY_ORDER_CHAPLAIN
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/toy/windup_toolbox, /obj/item/reagent_containers/food/drinks/bottle/holywater)
+
/datum/job/chaplain/after_spawn(mob/living/H, mob/M)
. = ..()
diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm
index 721d7019645..21f0c38c002 100644
--- a/code/modules/jobs/job_types/chemist.dm
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -20,6 +20,8 @@
bounty_types = CIV_JOB_CHEM
departments = DEPARTMENT_MEDICAL
+ family_heirlooms = list(/obj/item/book/manual/wiki/chemistry, /obj/item/ph_booklet)
+
/datum/outfit/job/chemist
name = "Chemist"
jobtype = /datum/job/chemist
@@ -40,4 +42,3 @@
chameleon_extras = /obj/item/gun/syringe
id_trim = /datum/id_trim/job/chemist
-
diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm
index 8c7e0297511..efc7d54d138 100644
--- a/code/modules/jobs/job_types/chief_engineer.dm
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -25,6 +25,8 @@
display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER
bounty_types = CIV_JOB_ENG
+ family_heirlooms = list(/obj/item/clothing/head/hardhat/white, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters)
+
/datum/job/chief_engineer/announce(mob/living/carbon/human/H, announce_captaincy = FALSE)
..()
if(announce_captaincy)
diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm
index bf0e4f4a671..359963e1e23 100644
--- a/code/modules/jobs/job_types/chief_medical_officer.dm
+++ b/code/modules/jobs/job_types/chief_medical_officer.dm
@@ -25,6 +25,8 @@
display_order = JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER
bounty_types = CIV_JOB_MED
+ family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
+
/datum/job/chief_medical_officer/announce(mob/living/carbon/human/H, announce_captaincy = FALSE)
..()
if(announce_captaincy)
@@ -63,4 +65,3 @@
suit = /obj/item/clothing/suit/space/hardsuit/medical
suit_store = /obj/item/tank/internals/oxygen
r_pocket = /obj/item/flashlight/pen/paramedic
-
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
index 6aa04273f56..90cc989e87a 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -17,6 +17,7 @@
display_order = JOB_DISPLAY_ORDER_CLOWN
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/bikehorn/golden)
/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
. = ..()
diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm
index a4085b8e7a2..be05dfb19d1 100644
--- a/code/modules/jobs/job_types/cook.dm
+++ b/code/modules/jobs/job_types/cook.dm
@@ -19,6 +19,8 @@
bounty_types = CIV_JOB_CHEF
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat)
+
/datum/outfit/job/cook
name = "Cook"
jobtype = /datum/job/cook
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index bc11268c004..3c06b3b0109 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -15,6 +15,8 @@
display_order = JOB_DISPLAY_ORDER_CURATOR
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/pen/fountain, /obj/item/storage/pill_bottle/dice)
+
/datum/outfit/job/curator
name = "Curator"
jobtype = /datum/job/curator
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 22de3dcc970..93a450b2ffe 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -22,6 +22,8 @@
display_order = JOB_DISPLAY_ORDER_DETECTIVE
+ family_heirlooms = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey)
+
/datum/outfit/job/detective
name = "Detective"
jobtype = /datum/job/detective
@@ -55,4 +57,3 @@
if(visualsOnly)
return
-
diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm
index 77eae91e6bd..2d24870e837 100644
--- a/code/modules/jobs/job_types/geneticist.dm
+++ b/code/modules/jobs/job_types/geneticist.dm
@@ -18,6 +18,8 @@
display_order = JOB_DISPLAY_ORDER_GENETICIST
bounty_types = CIV_JOB_SCI
+ family_heirlooms = list(/obj/item/clothing/under/shorts/purple)
+
/datum/outfit/job/geneticist
name = "Geneticist"
jobtype = /datum/job/geneticist
diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm
index 7e337b3d712..8a9822fb276 100644
--- a/code/modules/jobs/job_types/head_of_personnel.dm
+++ b/code/modules/jobs/job_types/head_of_personnel.dm
@@ -26,6 +26,8 @@
display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL
+ family_heirlooms = list(/obj/item/reagent_containers/food/drinks/trophy/silver_cup)
+
/datum/job/head_of_personnel/announce(mob/living/carbon/human/H, announce_captaincy = FALSE)
..()
if(announce_captaincy)
@@ -46,14 +48,11 @@
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
- id_trim = /datum/id_trim/job/head_of_personnel
-
/datum/outfit/job/hop/pre_equip(mob/living/carbon/human/H)
..()
if(locate(/datum/holiday/ianbirthday) in SSevents.holidays)
undershirt = /datum/sprite_accessory/undershirt/ian
-
/obj/item/paper/fluff/ids_for_dummies
name = "Memo: New IDs and You"
desc = "It looks like this was left by the last Head of Personnel to man this station. It explains some information about new IDs."
diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm
index ba71101fd23..c01abc2c75c 100644
--- a/code/modules/jobs/job_types/head_of_security.dm
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -26,6 +26,8 @@
display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY
bounty_types = CIV_JOB_SEC
+ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
+
/datum/job/head_of_security/announce(mob/living/carbon/human/H, announce_captaincy = FALSE)
..()
if(announce_captaincy)
@@ -67,4 +69,3 @@
suit = /obj/item/clothing/suit/space/hardsuit/security/hos
suit_store = /obj/item/tank/internals/oxygen
backpack_contents = list(/obj/item/melee/baton/loaded=1)
-
diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm
index 1db8a299a4e..9dbb7cb0725 100644
--- a/code/modules/jobs/job_types/janitor.dm
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -15,6 +15,8 @@
display_order = JOB_DISPLAY_ORDER_JANITOR
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap)
+
/datum/outfit/job/janitor
name = "Janitor"
jobtype = /datum/job/janitor
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
index 73fd263e5be..7b63d26207e 100644
--- a/code/modules/jobs/job_types/lawyer.dm
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -19,6 +19,8 @@
display_order = JOB_DISPLAY_ORDER_LAWYER
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/gavelhammer, /obj/item/book/manual/wiki/security_space_law)
+
/datum/outfit/job/lawyer
name = "Lawyer"
jobtype = /datum/job/lawyer
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
index 993d811d106..fa107a8e439 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -18,6 +18,8 @@
bounty_types = CIV_JOB_MED
departments = DEPARTMENT_MEDICAL
+ family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
+
/datum/outfit/job/doctor
name = "Medical Doctor"
jobtype = /datum/job/doctor
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index a142cd58cba..007a8320330 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -15,6 +15,8 @@
display_order = JOB_DISPLAY_ORDER_MIME
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/food/baguette)
+
/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M)
H.apply_pref_name("mime", M.client)
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index 0daf982d7c3..09c905c612f 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -18,6 +18,8 @@
bounty_types = CIV_JOB_MED
departments = DEPARTMENT_MEDICAL
+ family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
+
/datum/outfit/job/paramedic
name = "Paramedic"
jobtype = /datum/job/paramedic
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index b44a91f6b4b..9f89a20227f 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -11,6 +11,8 @@
display_order = JOB_DISPLAY_ORDER_PRISONER
+ family_heirlooms = list(/obj/item/pen/blue)
+
/datum/outfit/job/prisoner
name = "Prisoner"
jobtype = /datum/job/prisoner
diff --git a/code/modules/jobs/job_types/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm
index 59df39cfc72..0ac44a8d738 100644
--- a/code/modules/jobs/job_types/psychologist.dm
+++ b/code/modules/jobs/job_types/psychologist.dm
@@ -17,6 +17,8 @@
display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST
departments = DEPARTMENT_SERVICE
+ family_heirlooms = list(/obj/item/storage/pill_bottle)
+
/datum/outfit/job/psychologist
name = "Psychologist"
jobtype = /datum/job/psychologist
diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm
index bec299433a0..d116f485a6e 100644
--- a/code/modules/jobs/job_types/quartermaster.dm
+++ b/code/modules/jobs/job_types/quartermaster.dm
@@ -26,6 +26,8 @@
if(announce_captaincy)
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Due to extreme staffing shortages, newly promoted Acting Captain [H.real_name] on deck!"))
+ family_heirlooms = list(/obj/item/stamp, /obj/item/stamp/denied)
+
/datum/outfit/job/quartermaster
name = "Quartermaster"
jobtype = /datum/job/quartermaster
diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm
index fd50251fd2a..5c02d75ee4f 100644
--- a/code/modules/jobs/job_types/research_director.dm
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -23,6 +23,8 @@
display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR
bounty_types = CIV_JOB_SCI
+ family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
+
/datum/job/research_director/announce(mob/living/carbon/human/H, announce_captaincy = FALSE)
..()
if(announce_captaincy)
diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm
index fae4e6ce51c..ecb7822f535 100644
--- a/code/modules/jobs/job_types/roboticist.dm
+++ b/code/modules/jobs/job_types/roboticist.dm
@@ -18,6 +18,12 @@
display_order = JOB_DISPLAY_ORDER_ROBOTICIST
+ family_heirlooms = list(/obj/item/toy/plush/pkplush)
+
+/datum/job/roboticist/New()
+ . = ..()
+ family_heirlooms += subtypesof(/obj/item/toy/prize)
+
/datum/outfit/job/roboticist
name = "Roboticist"
jobtype = /datum/job/roboticist
diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm
index 574fdfdb95e..14a5cd2a5b9 100644
--- a/code/modules/jobs/job_types/scientist.dm
+++ b/code/modules/jobs/job_types/scientist.dm
@@ -18,6 +18,8 @@
bounty_types = CIV_JOB_SCI
departments = DEPARTMENT_SCIENCE
+ family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
+
/datum/outfit/job/scientist
name = "Scientist"
jobtype = /datum/job/scientist
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
index 724d305f70e..295a8b57837 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -23,6 +23,8 @@
bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_SECURITY
+ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
+
GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
/datum/job/security_officer/after_spawn(mob/living/carbon/human/H, mob/M)
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 71dae6cfebe..5b8c28514d6 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -16,6 +16,8 @@
bounty_types = CIV_JOB_MINE
departments = DEPARTMENT_CARGO
+ family_heirlooms = list(/obj/item/pickaxe/mini, /obj/item/shovel)
+
/datum/outfit/job/miner
name = "Shaft Miner"
jobtype = /datum/job/shaft_miner
diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm
index fff1cf42b87..d229e01acf5 100644
--- a/code/modules/jobs/job_types/station_engineer.dm
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -20,6 +20,8 @@
bounty_types = CIV_JOB_ENG
departments = DEPARTMENT_ENGINEERING
+ family_heirlooms = list(/obj/item/clothing/head/hardhat, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters)
+
/datum/outfit/job/engineer
name = "Station Engineer"
jobtype = /datum/job/station_engineer
diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm
index ff5e3443bbe..dd26e52f504 100644
--- a/code/modules/jobs/job_types/virologist.dm
+++ b/code/modules/jobs/job_types/virologist.dm
@@ -20,6 +20,8 @@
bounty_types = CIV_JOB_VIRO
departments = DEPARTMENT_MEDICAL
+ family_heirlooms = list(/obj/item/reagent_containers/syringe)
+
/datum/outfit/job/virologist
name = "Virologist"
jobtype = /datum/job/virologist
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
index 3db07a71e45..fb01e1e30bd 100644
--- a/code/modules/jobs/job_types/warden.dm
+++ b/code/modules/jobs/job_types/warden.dm
@@ -23,6 +23,8 @@
bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_SECURITY
+ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
+
/datum/outfit/job/warden
name = "Warden"
jobtype = /datum/job/warden
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 1101f298563..3fa6d2328ea 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -190,6 +190,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
///For custom overrides for species ass images
var/icon/ass_image
+ /// List of family heirlooms this species can get with the family heirloom quirk. List of types.
+ var/list/family_heirlooms
+
///List of results you get from knife-butchering. null means you cant butcher it. Associated by resulting type - value of amount
var/list/knife_butcher_results
diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm
index c296b3509fa..d1afcdce055 100644
--- a/code/modules/mob/living/carbon/human/species_types/felinid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm
@@ -14,6 +14,7 @@
var/original_felinid = TRUE //set to false for felinids created by mass-purrbation
payday_modifier = 0.75
ass_image = 'icons/ass/asscat.png'
+ family_heirlooms = list(/obj/item/toy/cattoy)
//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 9f1b5915216..98e7925b9ee 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -19,6 +19,7 @@
wings_icons = list("Megamoth", "Mothra")
has_innate_wings = TRUE
payday_modifier = 0.75
+ family_heirlooms = list(/obj/item/flashlight/lantern/heirloom_moth)
/datum/species/moth/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE,list/excluded_zones)
. = ..()
diff --git a/modular_skyrat/modules/blueshield/code/modules/jobs/job_types/blueshield.dm b/modular_skyrat/modules/blueshield/code/modules/jobs/job_types/blueshield.dm
index 526c0ad80c0..f8d70752dbd 100644
--- a/modular_skyrat/modules/blueshield/code/modules/jobs/job_types/blueshield.dm
+++ b/modular_skyrat/modules/blueshield/code/modules/jobs/job_types/blueshield.dm
@@ -16,6 +16,8 @@
display_order = JOB_DISPLAY_ORDER_BLUESHIELD
outfit = /datum/outfit/job/blueshield
+ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
+
/datum/outfit/job/blueshield
name = "Blueshield"
jobtype = /datum/job/blueshield
diff --git a/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm b/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm
index 018f89c02e7..ac0f22ef108 100644
--- a/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm
+++ b/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm
@@ -23,6 +23,8 @@
display_order = JOB_DISPLAY_ORDER_SECURITY_MEDIC
bounty_types = CIV_JOB_SEC
+ family_heirlooms = list(/obj/item/clothing/neck/stethoscope, /obj/item/roller, /obj/item/book/manual/wiki/security_space_law)
+
/datum/outfit/job/security_medic
name = "Security Medic"
diff --git a/modular_skyrat/modules/sec_haul/code/security_sergeant/security_sergeant.dm b/modular_skyrat/modules/sec_haul/code/security_sergeant/security_sergeant.dm
index 28b0574d20d..10196d8f6a1 100644
--- a/modular_skyrat/modules/sec_haul/code/security_sergeant/security_sergeant.dm
+++ b/modular_skyrat/modules/sec_haul/code/security_sergeant/security_sergeant.dm
@@ -22,6 +22,7 @@
display_order = JOB_DISPLAY_ORDER_SECURITY_SERGEANT
bounty_types = CIV_JOB_SEC
+ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
/datum/outfit/job/security_sergeant
name = "Security Sergeant"