From d90fa375e1aee2fc4d0fef795f9074f94258c2e6 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Wed, 4 Jan 2023 13:57:54 -0500 Subject: [PATCH] Move heirloom lists to relevant files Port of the current TG heirloom system. Heirlooms are now stored in job_types and species_types instead of a global list. Items used as heirlooms match their modern TG counterparts when possible. Also fixes the ancient first aid kit, which is used for a heirloom. --- code/_globalvars/lists/flavor_misc.dm | 35 ------------- code/datums/traits/negative.dm | 49 +++++++++++++----- code/game/objects/items/storage/firstaid.dm | 9 +++- code/modules/jobs/job_types/_job.dm | 3 ++ code/modules/jobs/job_types/assistant.dm | 5 ++ .../jobs/job_types/atmospheric_technician.dm | 6 +++ code/modules/jobs/job_types/bartender.dm | 6 +++ code/modules/jobs/job_types/botanist.dm | 6 +++ code/modules/jobs/job_types/captain.dm | 5 ++ .../jobs/job_types/cargo_technician.dm | 4 ++ code/modules/jobs/job_types/chaplain.dm | 5 ++ code/modules/jobs/job_types/chemist.dm | 5 ++ code/modules/jobs/job_types/chief_engineer.dm | 9 ++++ .../jobs/job_types/chief_medical_officer.dm | 9 ++++ code/modules/jobs/job_types/clown.dm | 4 ++ code/modules/jobs/job_types/cook.dm | 6 +++ code/modules/jobs/job_types/curator.dm | 5 ++ code/modules/jobs/job_types/detective.dm | 4 ++ code/modules/jobs/job_types/geneticist.dm | 4 ++ .../jobs/job_types/head_of_personnel.dm | 4 ++ .../jobs/job_types/head_of_security.dm | 4 ++ code/modules/jobs/job_types/janitor.dm | 7 +++ code/modules/jobs/job_types/lawyer.dm | 5 ++ code/modules/jobs/job_types/medical_doctor.dm | 9 ++++ code/modules/jobs/job_types/mime.dm | 4 ++ code/modules/jobs/job_types/paramedic.dm | 4 ++ code/modules/jobs/job_types/prisoner.dm | 4 ++ code/modules/jobs/job_types/quartermaster.dm | 5 ++ .../jobs/job_types/research_director.dm | 4 ++ code/modules/jobs/job_types/roboticist.dm | 4 ++ code/modules/jobs/job_types/scientist.dm | 4 ++ .../jobs/job_types/security_officer.dm | 5 ++ code/modules/jobs/job_types/shaft_miner.dm | 5 ++ .../jobs/job_types/station_engineer.dm | 9 ++++ code/modules/jobs/job_types/virologist.dm | 4 ++ code/modules/jobs/job_types/warden.dm | 4 ++ .../mob/living/carbon/human/species.dm | 3 ++ .../carbon/human/species_types/bugmen.dm | 4 ++ .../carbon/human/species_types/dwarves.dm | 5 ++ .../carbon/human/species_types/felinid.dm | 1 + .../living/carbon/human/species_types/ipc.dm | 5 ++ .../carbon/human/species_types/jellypeople.dm | 4 ++ .../human/species_types/lizardpeople.dm | 4 ++ .../carbon/human/species_types/synthliz.dm | 5 ++ icons/obj/storage.dmi | Bin 73695 -> 74107 bytes 45 files changed, 245 insertions(+), 50 deletions(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 162eeffe78..fa239e0ea4 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -350,41 +350,6 @@ GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant //body ids that have prosthetic sprites GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon")) -//FAMILY HEIRLOOM LIST -//this works by using the first number for the species as a probability to choose one of the items in the following list for their family heirloom -//if the probability fails, or the species simply isn't in the list, then it defaults to the next global list, which has its own list of items for each job -//the first item in the list is for if your job isn't in that list - -//species-heirloom list (we categorise them by the species id var) -GLOBAL_LIST_INIT(species_heirlooms, list( - "dwarf" = list(25, list(/obj/item/reagent_containers/food/drinks/dwarf_mug)), //example: 25% chance for dwarves to get a dwarf mug as their heirloom (normal container but has manly dorf icon) - "insect" = list(25, list(/obj/item/flashlight/lantern/heirloom_moth)), - "ipc" = list(25, list(/obj/item/stock_parts/cell/family)), //gives a broken powercell for flavor text! - "synthliz" = list(25, list(/obj/item/stock_parts/cell/family)), //they're also robots - "slimeperson" = list(25, list(/obj/item/toy/plush/slimeplushie)), - "lizard" = list(25, list(/obj/item/toy/plush/lizardplushie)), - )) - -//job-heirloom list -GLOBAL_LIST_INIT(job_heirlooms, list( - "NO_JOB" = list(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20), - "Clown" = list(/obj/item/paint/anycolor, /obj/item/bikehorn/golden), - "Mime" = list(/obj/item/paint/anycolor, /obj/item/toy/dummy), - "Cook" = list(/obj/item/kitchen/knife/scimitar), - "Botanist" = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie), - "Medical Doctor" = list(/obj/item/healthanalyzer), - "Paramedic" = list(/obj/item/lighter), //..why? - "Station Engineer" = list(/obj/item/wirecutters/brass/family, /obj/item/crowbar/brass/family, /obj/item/screwdriver/brass/family, /obj/item/wrench/brass/family), //brass tools but without the tool speed modifier - "Atmospheric Technician" = list(/obj/item/extinguisher/mini/family), - "Lawyer" = list(/obj/item/storage/briefcase/lawyer/family), - "Janitor" = list(/obj/item/mop), - "Scientist" = list(/obj/item/toy/plush/slimeplushie), - "Assistant" = list(/obj/item/clothing/gloves/cut/family), - "Prisoner" = list (/obj/item/pen/blue), - "Chaplain" = list(/obj/item/camera/spooky/family), - "Head of Personnel" = list(/obj/item/pinpointer/ian) - )) - //body ids that have non-gendered bodyparts GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem")) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 8d3acf0f6d..a30e27c8f8 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -43,27 +43,38 @@ GLOBAL_LIST_EMPTY(family_heirlooms) -/datum/quirk/family_heirloom/on_spawn() - var/mob/living/carbon/human/H = quirk_holder +/datum/quirk/family_heirloom/on_spawn() + // Define holder and type + var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/heirloom_type - var/species_heirloom_entry = GLOB.species_heirlooms[H.dna.species.id] - if(species_heirloom_entry) - if(prob(species_heirloom_entry[1])) - heirloom_type = pick(species_heirloom_entry[2]) + + // 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 + // Our quirk holder's job + var/datum/job/holder_job = SSjob.GetJob(human_holder.last_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) - var/job_heirloom_entry = GLOB.job_heirlooms[quirk_holder.mind.assigned_role] - if(!job_heirloom_entry) - heirloom_type = pick(GLOB.job_heirlooms["NO_JOB"]) //consider: should this be a define? - else - heirloom_type = pick(job_heirloom_entry) + heirloom_type = pick(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20) + + // Create the heirloom item heirloom = new heirloom_type(get_turf(quirk_holder)) + + // Add to global list GLOB.family_heirlooms += heirloom + + // Determine and assign item location var/list/slots = list( "in your left pocket" = ITEM_SLOT_LPOCKET, "in your right pocket" = ITEM_SLOT_RPOCKET, "in your backpack" = ITEM_SLOT_BACKPACK ) - where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" + where = human_holder.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" /datum/quirk/family_heirloom/post_add() if(where == "in your backpack") @@ -75,13 +86,25 @@ GLOBAL_LIST_EMPTY(family_heirlooms) heirloom.name = "\improper [family_name[family_name.len]] family [heirloom.name]" /datum/quirk/family_heirloom/on_process() - if(heirloom in quirk_holder.GetAllContents()) + // Ignore for dead holder + if(quirk_holder.stat == DEAD) + return + + // When held: Positive mood + if(heirloom && (heirloom in quirk_holder.GetAllContents())) SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom) + + // When not held: Negative mood else SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom_missing", /datum/mood_event/family_heirloom_missing) +/datum/quirk/item_quirk/family_heirloom/remove() + // Clear mood events when removing this quirk + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") + /datum/quirk/family_heirloom/clone_data() return heirloom diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index bcfcbe20f8..0381779531 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -55,8 +55,9 @@ generate_items_inside(items_inside,src) /obj/item/storage/firstaid/ancient - icon_state = "firstaid" - desc = "A first aid kit with the ability to heal common types of injuries." + name = "ancient first-aid kit" + icon_state = "oldfirstaid" + desc = "A first aid kit with the ability to heal common types of injuries. You start thinking of the good old days just by looking at it." /obj/item/storage/firstaid/ancient/PopulateContents() if(empty) @@ -69,6 +70,10 @@ new /obj/item/stack/medical/mesh(src) new /obj/item/stack/medical/mesh(src) +/obj/item/storage/firstaid/ancient/heirloom + // Long since been ransacked by hungry powergaming assistants breaking into med storage + empty = TRUE + /obj/item/storage/firstaid/brute name = "trauma treatment kit" desc = "A first aid kit for when you get toolboxed." diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index e297df8238..9a05f97cc7 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -69,6 +69,9 @@ ///Is this job affected by weird spawns like the ones from station traits var/random_spawns_possible = TRUE + /// List of family heirlooms this job can get with the family heirloom quirk. List of types. + var/list/family_heirlooms + var/display_order = JOB_DISPLAY_ORDER_DEFAULT var/bounty_types = CIV_JOB_BASIC diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index db5390f323..7ce29db178 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -20,6 +20,11 @@ Assistant dresscodecompliant = FALSE always_can_respawn_as = TRUE threat = 0.2 + + family_heirlooms = list( + /obj/item/storage/toolbox/mechanical/old/heirloom, + /obj/item/clothing/gloves/cut/family + ) /datum/job/assistant/get_access() if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index 9aa8ea07c4..551ac63d00 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -26,6 +26,12 @@ display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN threat = 0.5 + + family_heirlooms = list( + /obj/item/lighter, + /obj/item/lighter/greyscale, + /obj/item/storage/box/matches + ) /datum/outfit/job/atmos name = "Atmospheric Technician" diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 70ca762f39..40a1b20cb1 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -20,6 +20,12 @@ bounty_types = CIV_JOB_DRINK display_order = JOB_DISPLAY_ORDER_BARTENDER threat = 0.5 + + family_heirlooms = list( + /obj/item/reagent_containers/rag, + /obj/item/clothing/head/that, + /obj/item/reagent_containers/food/drinks/shaker + ) /datum/outfit/job/bartender name = "Bartender" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 53502ee30e..7a43837cf4 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -20,6 +20,12 @@ display_order = JOB_DISPLAY_ORDER_BOTANIST threat = 1.5 // lol powergame + family_heirlooms = list( + /obj/item/cultivator, + /obj/item/reagent_containers/glass/bucket, // Watering cans don't exist yet + /obj/item/toy/plush/beeplushie, + ) + /datum/outfit/job/botanist name = "Botanist" jobtype = /datum/job/hydro diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index c3765260cc..65811d40a0 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -32,6 +32,11 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/flask/gold, + /obj/item/toy/figure/captain + ) /datum/job/captain/get_access() return get_all_accesses() diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index f8e2f74d80..1188669db5 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN bounty_types = CIV_JOB_RANDOM threat = 0.2 + + family_heirlooms = list( + /obj/item/clipboard + ) /datum/outfit/job/cargo_tech name = "Cargo Technician" diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index ef4f20765c..e7d602bd22 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -19,6 +19,11 @@ display_order = JOB_DISPLAY_ORDER_CHAPLAIN threat = 0.5 + + family_heirlooms = list( + /obj/item/toy/windupToolbox, + /obj/item/reagent_containers/food/drinks/bottle/holywater + ) /datum/job/chaplain/after_spawn(mob/living/H, client/C) diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index 209b3f82d0..9f830ba43c 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -24,6 +24,11 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/book/manual/wiki/chemistry, + /obj/item/fermichem/pHbooklet + ) /datum/outfit/job/chemist name = "Chemist" diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 60b963d7ec..2949758d8a 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -37,6 +37,15 @@ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity) threat = 2 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) /datum/outfit/job/ce name = "Chief Engineer" diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 401b503110..f5170fc745 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -35,6 +35,15 @@ threat = 2 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/circular_saw, + /obj/item/retractor, + /obj/item/cautery + ) /datum/outfit/job/cmo name = "Chief Medical Officer" diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 380215a93b..5631ce4624 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_CLOWN threat = 0 // honk + + family_heirlooms = list( + /obj/item/bikehorn/golden + ) /datum/outfit/job/clown name = "Clown" diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 2a021e6575..9947c27ba9 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -22,6 +22,12 @@ display_order = JOB_DISPLAY_ORDER_COOK threat = 0.2 + 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 254fc15bd4..e6e9394109 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -19,6 +19,11 @@ display_order = JOB_DISPLAY_ORDER_CURATOR threat = 0.3 + + family_heirlooms = list( + /obj/item/pen/fountain, + /obj/item/storage/dice + ) /datum/outfit/job/curator name = "Curator" diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index b56ebed191..2330e93147 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -27,6 +27,10 @@ display_order = JOB_DISPLAY_ORDER_DETECTIVE blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/monophobia) threat = 1 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/flask/det + ) /datum/outfit/job/detective name = "Detective" diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 611c3f99cd..2529eaa024 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -24,6 +24,10 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/clothing/under/shorts/purple + ) /datum/outfit/job/geneticist name = "Geneticist" diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 4c38fc4cf2..6371aaaa9f 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -39,6 +39,10 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity) threat = 2 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/trophy/silver_cup + ) /datum/outfit/job/hop diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 5339b5927c..cfe1057f8d 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -38,6 +38,10 @@ display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia, /datum/quirk/insanity) threat = 3 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law + ) /datum/outfit/job/hos name = "Head of Security" diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index c62c2e5b26..59c6997398 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -19,6 +19,13 @@ display_order = JOB_DISPLAY_ORDER_JANITOR threat = 0.2 + + family_heirlooms = list( + /obj/item/mop, + /obj/item/clothing/suit/caution, + /obj/item/reagent_containers/glass/bucket, + /obj/item/soap + ) /datum/outfit/job/janitor name = "Janitor" diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index 17c376a5de..4105bd4e6e 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -22,6 +22,11 @@ display_order = JOB_DISPLAY_ORDER_LAWYER threat = 0.3 + + family_heirlooms = list( + /obj/item/gavelhammer, + /obj/item/book/manual/wiki/security_space_law + ) /datum/outfit/job/lawyer name = "Lawyer" diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 75a85c88d1..b0a0375517 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -22,6 +22,15 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/circular_saw, + /obj/item/retractor, + /obj/item/cautery + ) /datum/outfit/job/doctor name = "Medical Doctor" diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index 171e0cef8a..84d6bcb1a7 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -20,6 +20,10 @@ display_order = JOB_DISPLAY_ORDER_MIME threat = 0 + + family_heirlooms = list( + /obj/item/reagent_containers/food/snacks/baguette + ) /datum/job/mime/after_spawn(mob/living/carbon/human/H, client/C) . = ..() diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 2b374921be..73f6c5da5e 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -23,6 +23,10 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom + ) /datum/outfit/job/paramedic name = "Paramedic" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 06eafe649b..20a2f463f5 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -13,6 +13,10 @@ plasma_outfit = /datum/outfit/plasmaman/prisoner display_order = JOB_DISPLAY_ORDER_PRISONER + + family_heirlooms = list( + /obj/item/pen/blue + ) /datum/job/prisoner/get_latejoin_spawn_point() return get_roundstart_spawn_point() diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 8ea7579127..dd79768282 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -32,6 +32,11 @@ display_order = JOB_DISPLAY_ORDER_QUARTERMASTER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 0.5 + + family_heirlooms = list( + /obj/item/stamp, + /obj/item/stamp/denied + ) /datum/outfit/job/quartermaster name = "Quartermaster" diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 178bcc3188..606c34af5e 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -38,6 +38,10 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring) blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) /datum/outfit/job/rd name = "Research Director" diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 6f7b91571b..0e48467d91 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -24,6 +24,10 @@ display_order = JOB_DISPLAY_ORDER_ROBOTICIST threat = 1 + + family_heirlooms = list( + /obj/item/toy/figure/borg + ) /datum/outfit/job/roboticist name = "Roboticist" diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 10e3f58594..4bdbe6833b 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -22,6 +22,10 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) display_order = JOB_DISPLAY_ORDER_SCIENTIST threat = 1.2 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) /datum/outfit/job/scientist name = "Scientist" diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 1b06d050b7..b1f7475da5 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -28,6 +28,11 @@ display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law, + /obj/item/clothing/head/beret/sec + ) /datum/job/officer/get_access() var/list/L = list() diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index e693335779..c6192280c7 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -24,6 +24,11 @@ display_order = JOB_DISPLAY_ORDER_SHAFT_MINER threat = 1.5 + + family_heirlooms = list( + /obj/item/pickaxe/mini, + /obj/item/shovel + ) /datum/outfit/job/miner name = "Shaft Miner (Lavaland)" diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index e2248362d0..58822dc4c5 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -27,6 +27,15 @@ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER threat = 1 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) /datum/outfit/job/engineer name = "Station Engineer" diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index be844be529..423a65048f 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -25,6 +25,10 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/reagent_containers/syringe + ) /datum/outfit/job/virologist name = "Virologist" diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 8e3ef5a253..714c599024 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -29,6 +29,10 @@ display_order = JOB_DISPLAY_ORDER_WARDEN blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law + ) /datum/job/warden/get_access() var/list/L = list() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 94e0685e62..10f064423c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -231,6 +231,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) ///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 + /////////// // PROCS // /////////// diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index bddb0cdc56..1e58e995c2 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -24,3 +24,7 @@ allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale") eye_type = "insect" + + family_heirlooms = list( + /obj/item/flashlight/lantern/heirloom_moth + ) diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index e0a9bcaa36..2820726313 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -20,6 +20,11 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // species_language_holder = /datum/language_holder/dwarf species_category = SPECIES_CATEGORY_BASIC //a kind of human + family_heirlooms = list( + // Dwarves get a dwarf mug as their heirloom (normal container but has manly dorf icon) + /obj/item/reagent_containers/food/drinks/dwarf_mug + ) + /mob/living/carbon/human/species/dwarf //species admin spawn path race = /datum/species/dwarf //and the race the path is set to. 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 eee5757b46..beebbb1dfd 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -13,6 +13,7 @@ wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_FURRY ass_image = 'icons/ass/asscat.png' + family_heirlooms = list(/obj/item/toy/cattoy) /datum/species/human/felinid/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index 8c9e6bcd4f..f6749dde06 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -37,6 +37,11 @@ species_category = SPECIES_CATEGORY_ROBOT wings_icons = SPECIES_WINGS_ROBOT + family_heirlooms = list( + // Gives a broken powercell for flavor text! + /obj/item/stock_parts/cell/family + ) + var/datum/action/innate/monitor_change/screen /datum/species/ipc/on_species_gain(mob/living/carbon/human/C) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 9ecf25a3a6..6f48d9022d 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -34,6 +34,10 @@ ass_image = 'icons/ass/assslime.png' blacklisted_quirks = list(/datum/quirk/glass_bones) + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) + /datum/species/jelly/on_species_loss(mob/living/carbon/C) C.faction -= "slime" if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index c334e6ef3e..ffdc23a5a7 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -33,6 +33,10 @@ ass_image = 'icons/ass/asslizard.png' + family_heirlooms = list( + /obj/item/toy/plush/lizardplushie + ) + /datum/species/lizard/random_name(gender,unique,lastname) if(unique) return random_unique_lizard_name(gender) diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm index aa853ee551..a209da270f 100644 --- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -36,3 +36,8 @@ wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_ROBOT wings_icons = SPECIES_WINGS_ROBOT + + family_heirlooms = list( + // They're also robots + /obj/item/stock_parts/cell/family + ) diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 27ad84b1a43e76c4bdcff3b802f2d8084c45683f..3204b36cc5b5d12ccc45a32298a6053ce8695997 100644 GIT binary patch delta 12807 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 delta 12331 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 X!rSmFUol${@}u_hjZ%$*Md<$lK7BNQ