diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 479e43e34543..f4f000be6d57 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -189,6 +189,22 @@ GLOBAL_LIST_INIT(exowearlist, list(PREF_NOEXOWEAR, PREF_EXOWEAR, PREF_ALTEXOWEAR
#define UPLINK_PEN "Pen" //like a real spy!
GLOBAL_LIST_INIT(uplink_spawn_loc_list, list(UPLINK_PDA, UPLINK_RADIO, UPLINK_PEN))
+//favorite cigarette brand
+#define PREF_CIG_SPACE "Space Cigarettes"
+#define PREF_CIG_DROMEDARY "DromedaryCo Cigarettes"
+#define PREF_CIG_UPLIFT "Uplift Smooth Cigarettes"
+#define PREF_CIG_ROBUST "Robust Cigarettes"
+#define PREF_CIG_ROBUSTGOLD "Robust Gold Cigarettes"
+#define PREF_CIG_CARP "Carp Classic Cigarettes"
+#define PREF_CIG_MIDORI "Midori Taboko Rollies"
+#define PREF_CIGAR "Premium Cigars"
+#define PREF_CIGAR_SOLAR "Solarian Cigars"
+#define PREF_CIGAR_COHIBA "Cohiba Cigars"
+#define PREF_VAPE "Vape Pen"
+#define PREF_PIPE "Fancy Pipe"
+
+GLOBAL_LIST_INIT(valid_smoke_types, sortList(list(PREF_CIG_SPACE, PREF_CIG_DROMEDARY, PREF_CIG_UPLIFT, PREF_CIG_ROBUST, PREF_CIG_ROBUSTGOLD, PREF_CIG_CARP, PREF_CIG_MIDORI, PREF_CIGAR, PREF_CIGAR_SOLAR, PREF_CIGAR_COHIBA, PREF_VAPE, PREF_PIPE)))
+
//Female Uniforms
GLOBAL_LIST_EMPTY(female_clothing_icons)
//Alternate species icons
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index d60eff11f391..ffcadb2e5efd 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -90,10 +90,10 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/under/rank/command/captain, /obj/item/clothing/under/rank/security/head_of_security,
/obj/item/clothing/under/rank/engineering/chief_engineer, /obj/item/clothing/under/rank/medical/chief_medical_officer,
/obj/item/clothing/under/rank/command/head_of_personnel, /obj/item/clothing/under/rank/rnd/research_director,
- /obj/item/clothing/under/rank/security/head_of_security/alt,//WS Edit - Better security jumpsuit sprites
+ /obj/item/clothing/under/rank/security/head_of_security/alt,
/obj/item/clothing/under/rank/rnd/research_director/alt, /obj/item/clothing/under/rank/rnd/research_director/turtleneck,
/obj/item/clothing/under/rank/security/head_of_security/parade,
- /obj/item/clothing/under/rank/security/head_of_security/parade/female, //WS Edit - Better Command Uniforms
+ /obj/item/clothing/under/rank/security/head_of_security/parade/female,
/obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/melee/baton/abductor,
/obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer,
/obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom/official,
diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm
index 6af401e8b009..028973c5c839 100644
--- a/code/datums/mood_events/drug_events.dm
+++ b/code/datums/mood_events/drug_events.dm
@@ -4,12 +4,12 @@
/datum/mood_event/smoked
description = "I have had a smoke recently.\n"
- mood_change = 2
+ mood_change = 1
timeout = 6 MINUTES
/datum/mood_event/wrong_brand
- description = "I hate that brand of cigarettes.\n"
- mood_change = -2
+ description = "That brand of cigarette just doesn't hit right.\n"
+ mood_change = -1
timeout = 6 MINUTES
/datum/mood_event/overdose
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 4b0afce14b47..f82e990793da 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -589,24 +589,57 @@
reagent_type = /datum/reagent/drug/nicotine
accessory_type = /obj/item/lighter/greyscale
+//I fucking hate prefscode
+
/datum/quirk/junkie/smoker/on_spawn()
- drug_container_type = pick(/obj/item/storage/fancy/cigarettes,
- /obj/item/storage/fancy/cigarettes/cigpack_midori,
- /obj/item/storage/fancy/cigarettes/cigpack_uplift,
- /obj/item/storage/fancy/cigarettes/cigpack_robust,
- /obj/item/storage/fancy/cigarettes/cigpack_robustgold,
- /obj/item/storage/fancy/cigarettes/cigpack_carp)
+ var/mob/living/carbon/human/H = quirk_holder
+ switch (H.client?.prefs.preferred_smoke_brand)
+ if (PREF_CIG_SPACE)
+ drug_container_type = /obj/item/storage/fancy/cigarettes
+ if (PREF_CIG_DROMEDARY)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/dromedaryco
+ if (PREF_CIG_UPLIFT)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_uplift
+ if (PREF_CIG_ROBUST)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_robust
+ if (PREF_CIG_ROBUSTGOLD)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_robustgold
+ if (PREF_CIG_CARP)
+ drug_container_type= /obj/item/storage/fancy/cigarettes/cigpack_carp
+ if (PREF_CIG_MIDORI)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_midori
+ if (PREF_CIGAR)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigars
+ accessory_type = /obj/item/storage/box/matches
+ if (PREF_CIGAR_SOLAR)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigars/havana
+ accessory_type = /obj/item/storage/box/matches
+ if (PREF_CIGAR_COHIBA)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigars/cohiba
+ accessory_type = /obj/item/storage/box/matches
+ if (PREF_VAPE)
+ drug_container_type = /obj/item/clothing/mask/vape
+ accessory_type = null
+ if (PREF_PIPE)
+ drug_container_type = /obj/item/clothing/mask/cigarette/pipe
+ accessory_type = /obj/item/storage/box/matches
+ else
+ CRASH("Someone had an improper cigarette pref on loading")
. = ..()
/datum/quirk/junkie/smoker/announce_drugs()
- to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], and a lighter [where_accessory]. Make sure you get your favorite brand when you run out.")
-
+ if(accessory_type == null)
+ to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], Make sure you get a refill soon.")
+ return
+ to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], and a [initial(accessory_type.name)] [where_accessory]. Make sure you get your favorite brand when you run out.")
/datum/quirk/junkie/smoker/on_process()
. = ..()
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/I = H.get_item_by_slot(ITEM_SLOT_MASK)
if (istype(I, /obj/item/clothing/mask/cigarette))
+ if(I == drug_container_type)
+ return
var/obj/item/storage/fancy/cigarettes/C = drug_container_type
if(istype(I, initial(C.spawn_type)))
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "wrong_cigs")
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 41f214998ffd..01307d92a0f8 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -163,7 +163,7 @@
////////////
/obj/item/storage/fancy/cigarettes
name = "\improper Space Cigarettes packet"
- desc = "The most popular brand of cigarettes, sponsors of the Space Olympics."
+ desc = "The most popular brand of cigarettes on the Frontier."
icon = 'icons/obj/cigarettes.dmi'
base_icon_state = "cig"
icon_state = "cig"
@@ -273,14 +273,14 @@
/obj/item/storage/fancy/cigarettes/cigpack_carp
name = "\improper Carp Classic packet"
- desc = "Since 2313."
+ desc = "Since 207 FS."
icon_state = "carp"
base_icon_state = "carp"
spawn_type = /obj/item/clothing/mask/cigarette/carp
/obj/item/storage/fancy/cigarettes/cigpack_syndicate
name = "cigarette packet"
- desc = "An obscure brand of cigarettes."
+ desc = "A semi-obscure brand of cigarettes, favored by interstellar miners."
icon_state = "syndie"
base_icon_state = "syndie"
spawn_type = /obj/item/clothing/mask/cigarette/syndicate
@@ -322,7 +322,7 @@
/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker
name = "\improper Leary's Delight packet"
- desc = "Banned in over 36 galaxies."
+ desc = "Banned in over 36 Sectors."
icon_state = "shadyjim"
base_icon_state = "shadyjim"
spawn_type = /obj/item/clothing/mask/cigarette/rollie/mindbreaker
@@ -435,7 +435,7 @@
/obj/item/storage/fancy/cigarettes/cigars/havana
name = "\improper premium Havanian cigar case"
- desc = "A case of classy Havanian cigars."
+ desc = "Even after centuries of Solarian export, Havana smooth is only found in proper terran cigars."
icon_state = "cohibacase"
base_icon_state = "cohibacase"
spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index f4584749609c..6bc2af4da967 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -154,6 +154,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
)
var/fbp = FALSE
var/phobia = "spiders"
+ var/preferred_smoke_brand = PREF_CIG_SPACE
var/list/alt_titles_preferences = list()
var/list/custom_names = list()
var/preferred_ai_core_display = "Blue"
@@ -839,6 +840,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[phobia]
"
+ if("Smoker" in all_quirks)
+ dat += "