|
1 | 1 | /datum/quirk/item_quirk/family_heirloom |
2 | 2 | name = "Family Heirloom" |
3 | | - desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!" |
| 3 | + desc = "You are the current owner of an heirloom, passed down for generations. \ |
| 4 | + The heirloom is based on your species, job, or one you selected in the loadout. \ |
| 5 | + You have to keep it safe!" |
4 | 6 | icon = FA_ICON_TOOLBOX |
5 | 7 | value = -2 |
6 | 8 | medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom." |
7 | 9 | hardcore_value = 1 |
8 | | - quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED |
| 10 | + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED|QUIRK_CHANGES_APPEARANCE |
9 | 11 | /// A weak reference to our heirloom. |
10 | 12 | var/datum/weakref/heirloom |
11 | 13 | mail_goodies = list(/obj/item/storage/briefcase/secure) |
|
14 | 16 | var/mob/living/carbon/human/human_holder = quirk_holder |
15 | 17 | var/obj/item/heirloom_type |
16 | 18 |
|
17 | | - // The quirk holder's species - we have a 50% chance, if we have a species with a set heirloom, to choose a species heirloom. |
| 19 | + var/list/loadout = get_active_loadout(client_source?.prefs) |
| 20 | + var/loadout_heirloom = FALSE |
| 21 | + for(var/item_path in loadout) |
| 22 | + if(loadout[item_path][INFO_HEIRLOOM]) |
| 23 | + heirloom_type = item_path |
| 24 | + loadout_heirloom = TRUE |
| 25 | + break |
| 26 | + |
| 27 | + if(!loadout_heirloom && !GLOB.holy_weapon_type && quirk_holder.mind?.holy_role) |
| 28 | + for(var/obj/item/nullrod/rod in GLOB.steal_item_handler.objectives_by_path[/obj/item/nullrod]) |
| 29 | + var/turf/rod_turf = get_turf(rod) |
| 30 | + if(!is_station_level(rod_turf.z)) |
| 31 | + continue |
| 32 | + heirloom = WEAKREF(rod) |
| 33 | + LAZYADD(where_items_spawned, span_boldnotice("Your [rod.name] can be found in your office. It is your precious family heirloom, keep it safe!")) |
| 34 | + return |
| 35 | + |
18 | 36 | var/datum/species/holder_species = human_holder.dna?.species |
| 37 | + var/datum/job/holder_job = human_holder.mind?.assigned_role |
19 | 38 | if(holder_species && LAZYLEN(holder_species.family_heirlooms) && prob(50)) |
20 | 39 | heirloom_type = pick(holder_species.family_heirlooms) |
21 | | - else |
22 | | - // Our quirk holder's job |
23 | | - var/datum/job/holder_job = human_holder.last_mind?.assigned_role |
24 | | - if(holder_job && LAZYLEN(holder_job.family_heirlooms)) |
25 | | - heirloom_type = pick(holder_job.family_heirlooms) |
| 40 | + else if(holder_job && LAZYLEN(holder_job.family_heirlooms)) |
| 41 | + heirloom_type = pick(holder_job.family_heirlooms) |
26 | 42 |
|
27 | 43 | // If we didn't find an heirloom somehow, throw them a generic one |
28 | | - if(!heirloom_type) |
29 | | - heirloom_type = pick(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20) |
| 44 | + heirloom_type ||= pick(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20) |
30 | 45 |
|
31 | | - var/obj/new_heirloom = new heirloom_type(get_turf(human_holder)) |
| 46 | + var/obj/item/new_heirloom = new heirloom_type(get_turf(human_holder)) |
32 | 47 | heirloom = WEAKREF(new_heirloom) |
33 | 48 |
|
| 49 | + if(loadout_heirloom) |
| 50 | + var/datum/loadout_item/relevant_item = GLOB.all_loadout_datums[heirloom_type] |
| 51 | + relevant_item?.on_equip_item(new_heirloom, client_source?.prefs, loadout, human_holder) |
| 52 | + |
| 53 | + var/list/spawn_locations = list() |
| 54 | + // specific slots |
| 55 | + if(new_heirloom.slot_flags & ITEM_SLOT_HEAD) |
| 56 | + spawn_locations[LOCATION_HEAD] = ITEM_SLOT_HEAD |
| 57 | + if(new_heirloom.slot_flags & ITEM_SLOT_OCLOTHING) |
| 58 | + spawn_locations["around your body"] = ITEM_SLOT_OCLOTHING |
| 59 | + if(new_heirloom.slot_flags & ITEM_SLOT_EYES) |
| 60 | + spawn_locations[LOCATION_EYES] = ITEM_SLOT_EYES |
| 61 | + if(new_heirloom.slot_flags & ITEM_SLOT_EARS) |
| 62 | + spawn_locations["covering your ears"] = ITEM_SLOT_EARS |
| 63 | + if(new_heirloom.slot_flags & ITEM_SLOT_GLOVES) |
| 64 | + spawn_locations["covering your hands"] = ITEM_SLOT_GLOVES |
| 65 | + if(new_heirloom.slot_flags & ITEM_SLOT_NECK) |
| 66 | + spawn_locations[LOCATION_NECK] = ITEM_SLOT_NECK |
| 67 | + if(new_heirloom.slot_flags & ITEM_SLOT_MASK) |
| 68 | + spawn_locations["covering your face"] = ITEM_SLOT_MASK |
| 69 | + if(new_heirloom.slot_flags & ITEM_SLOT_FEET) |
| 70 | + spawn_locations["covering your feet"] = ITEM_SLOT_FEET |
| 71 | + if(new_heirloom.slot_flags & ITEM_SLOT_BELT) |
| 72 | + spawn_locations["around your waist"] = ITEM_SLOT_BELT |
| 73 | + // defaults / accessories can just go to backpack, that's fine |
| 74 | + spawn_locations[LOCATION_LPOCKET] = ITEM_SLOT_LPOCKET |
| 75 | + spawn_locations[LOCATION_RPOCKET] = ITEM_SLOT_RPOCKET |
| 76 | + spawn_locations[LOCATION_BACKPACK] = ITEM_SLOT_BACKPACK |
| 77 | + spawn_locations[LOCATION_HANDS] = ITEM_SLOT_HANDS |
| 78 | + |
34 | 79 | give_item_to_holder( |
35 | 80 | new_heirloom, |
36 | | - list( |
37 | | - LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, |
38 | | - LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, |
39 | | - LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, |
40 | | - LOCATION_HANDS = ITEM_SLOT_HANDS, |
41 | | - ), |
| 81 | + spawn_locations, |
42 | 82 | flavour_text = "This is a precious family heirloom, passed down from generation to generation. Keep it safe!", |
43 | 83 | notify_player = TRUE, |
44 | 84 | ) |
|
47 | 87 | var/list/names = splittext(quirk_holder.real_name, " ") |
48 | 88 | var/family_name = names[names.len] |
49 | 89 |
|
50 | | - var/obj/family_heirloom = heirloom?.resolve() |
51 | | - if(!family_heirloom) |
| 90 | + var/obj/item/family_heirloom = heirloom?.resolve() |
| 91 | + if(isnull(family_heirloom)) |
52 | 92 | to_chat(quirk_holder, span_boldnotice("A wave of existential dread runs over you as you realize your precious family heirloom is missing. Perhaps the Gods will show mercy on your cursed soul?")) |
53 | 93 | return |
54 | 94 | family_heirloom.AddComponent(/datum/component/heirloom, quirk_holder.mind, family_name) |
55 | | - |
56 | 95 | return ..() |
57 | 96 |
|
58 | 97 | /datum/quirk/item_quirk/family_heirloom/process() |
59 | | - if(quirk_holder.stat == DEAD) |
| 98 | + if(HAS_TRAIT(quirk_holder, TRAIT_KNOCKEDOUT)) |
60 | 99 | return |
61 | 100 |
|
62 | 101 | var/obj/family_heirloom = heirloom?.resolve() |
63 | 102 |
|
64 | | - if(family_heirloom && (family_heirloom in quirk_holder.get_all_contents())) |
| 103 | + if(family_heirloom && get(family_heirloom.loc, /mob/living/carbon/human) == quirk_holder) |
65 | 104 | quirk_holder.clear_mood_event("family_heirloom_missing") |
66 | 105 | quirk_holder.add_mood_event("family_heirloom", /datum/mood_event/family_heirloom) |
67 | 106 | else |
|
0 commit comments