diff --git a/code/game/machinery/vending_types.dm b/code/game/machinery/vending_types.dm
index a97aeb87ca0..a3b3c7a91b4 100644
--- a/code/game/machinery/vending_types.dm
+++ b/code/game/machinery/vending_types.dm
@@ -316,23 +316,52 @@
icon_state = "cigs"
vend_id = "smokes"
products = list(
- /obj/item/storage/fancy/cigarettes = 10,
+ /obj/item/storage/fancy/cigarettes/rugged = 2,
+ /obj/item/storage/fancy/cigarettes = 3,
+ /obj/item/storage/fancy/cigarettes/dromedaryco = 2,
+ /obj/item/storage/fancy/cigarettes/nicotine = 2,
+ /obj/item/storage/chewables/rollable/bad = 2,
+ /obj/item/storage/chewables/rollable = 2,
+ /obj/item/storage/chewables/rollable/fine = 2,
+ /obj/item/storage/chewables/rollable/nico = 2,
+ /obj/item/storage/chewables/tobacco/bad = 2,
+ /obj/item/storage/chewables/tobacco = 2,
+ /obj/item/storage/chewables/tobacco/fine = 2,
+ /obj/item/storage/fancy/chewables/tobacco/nico = 2,
+ /obj/item/storage/cigfilters = 5,
+ /obj/item/storage/fancy/cigpaper = 3,
+ /obj/item/storage/fancy/cigpaper/fine = 2,
/obj/item/storage/box/matches = 10,
/obj/item/flame/lighter/random = 4,
/obj/item/spacecash/ewallet/lotto = 30
)
contraband = list(
/obj/item/storage/fancy/cigarettes/blank = 5,
- /obj/item/storage/fancy/cigarettes/acmeco = 5
+ /obj/item/storage/fancy/cigarettes/acmeco = 5,
+ /obj/item/clothing/mask/smokable/cigarette/rolled/sausage = 3
)
premium = list(
/obj/item/flame/lighter/zippo = 4,
/obj/item/storage/fancy/cigar = 5
)
prices = list(
- /obj/item/storage/fancy/cigarettes = 200,
+ /obj/item/storage/fancy/cigarettes/rugged = 200,
+ /obj/item/storage/fancy/cigarettes = 245,
+ /obj/item/storage/fancy/cigarettes/dromedaryco = 270,
+ /obj/item/storage/fancy/cigarettes/nicotine = 325,
+ /obj/item/storage/chewables/rollable/bad = 40,
+ /obj/item/storage/chewables/rollable = 50,
+ /obj/item/storage/chewables/rollable/fine = 60,
+ /obj/item/storage/chewables/rollable/nico = 90,
+ /obj/item/storage/chewables/tobacco/bad = 60,
+ /obj/item/storage/chewables/tobacco = 90,
+ /obj/item/storage/chewables/tobacco/fine = 120,
+ /obj/item/storage/fancy/chewables/tobacco/nico = 150,
/obj/item/storage/box/matches = 12,
/obj/item/flame/lighter/random = 12,
+ /obj/item/storage/cigfilters = 20,
+ /obj/item/storage/fancy/cigpaper = 32,
+ /obj/item/storage/fancy/cigpaper/fine = 48,
/obj/item/spacecash/ewallet/lotto = 200
)
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index aa473ed3659..7ced1638162 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -11,7 +11,7 @@
origin_tech = list(TECH_ILLEGAL = 4, TECH_MAGNET = 4)
var/can_use = 1
var/obj/effect/dummy/chameleon/active_dummy = null
- var/saved_item = /obj/item/cigbutt
+ var/saved_item = /obj/item/trash/cigbutt
var/saved_icon = 'icons/obj/clothing/masks.dmi'
var/saved_icon_state = "cigbutt"
var/saved_overlays
diff --git a/code/game/objects/items/weapons/chewables.dm b/code/game/objects/items/weapons/chewables.dm
index 3d027cff33e..a0148cf9630 100644
--- a/code/game/objects/items/weapons/chewables.dm
+++ b/code/game/objects/items/weapons/chewables.dm
@@ -33,6 +33,7 @@ obj/item/clothing/mask/chewable/Initialize()
reagents.add_reagent(R, filling[R])
if(wrapped)
slot_flags = null
+ update_icon()
/obj/item/clothing/mask/chewable/equipped(var/mob/living/user, var/slot)
..()
@@ -97,28 +98,29 @@ obj/item/clothing/mask/chewable/Destroy()
to_chat(M, span("notice", "You spit out the [name]."))
qdel(src)
-/obj/item/clothing/mask/chewable/tobacco/lenni
+/obj/item/clothing/mask/chewable/tobacco/bad
name = "chewing tobacco"
- desc = "A chewy wad of tobacco. Cut in long strands and treated with syrup so it tastes less like an ash-tray when you stuff it into your face."
- filling = list("nicotine" = 2)
+ desc = "A chewy wad of cheap tobacco. Cut in long strands and treated with syrup so it tastes less like an ash-tray when you stuff it into your face."
+ filling = list("tobaccobad" = 2)
-/obj/item/clothing/mask/chewable/tobacco/redlady
+/obj/item/clothing/mask/chewable/tobacco/generic
+ name = "chewing tobacco"
+ desc = "A chewy wad of tobacco. Cut in long strands and treated with syrup so it doesn't taste like an ash-tray when you stuff it into your face."
+ filling = list("tobacco" = 2)
+
+/obj/item/clothing/mask/chewable/tobacco/fine
name = "chewing tobacco"
desc = "A chewy wad of fine tobacco. Cut in long strands and treated with syrup so it doesn't taste like an ash-tray when you stuff it into your face."
- filling = list("nicotine" = 2)
+ filling = list("tobaccofine" = 2)
/obj/item/clothing/mask/chewable/tobacco/nico
name = "nicotine gum"
desc = "A chewy wad of synthetic rubber, laced with nicotine. Possibly the least disgusting method of nicotine delivery."
+ filling = list("nicotine" = 2)
icon_state = "nic_gum"
type_butt = /obj/item/trash/spitgum
wrapped = TRUE
-/obj/item/clothing/mask/chewable/tobacco/nico/Initialize()
- . = ..()
- reagents.add_reagent("nicotine", 2)
- color = reagents.get_color()
-
/obj/item/clothing/mask/chewable/candy
name = "wad"
desc = "A chewy wad of wadding material."
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 69e654e3a96..1d69beea13d 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -39,6 +39,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
desc = "A simple match stick, used for lighting fine smokables."
icon = 'icons/obj/cigs_lighters.dmi'
icon_state = "match_unlit"
+ item_state = "match_unlit"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
var/burnt = 0
var/smoketime = 5
w_class = 1.0
@@ -76,7 +81,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
burnt = 1
damtype = "brute"
icon_state = "match_burnt"
- item_state = "cigoff"
+ item_state = "match_burnt"
name = "burnt match"
desc = "A match. This one has seen better days."
STOP_PROCESSING(SSprocessing, src)
@@ -87,6 +92,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/smokable
name = "smokable item"
desc = "You're not sure what this is. You should probably ahelp it."
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
body_parts_covered = 0
var/lit = 0
var/icon_on
@@ -171,7 +180,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(ismob(loc))
var/mob/living/M = loc
if (!nomessage)
- to_chat(M, "Your [name] goes out.")
+ to_chat(M, span("notice", "Your [name] goes out."))
M.remove_from_mob(src) //un-equip it so the overlays can update
M.update_inv_wear_mask(0)
M.update_inv_l_hand(0)
@@ -183,7 +192,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(ismob(loc))
var/mob/living/M = loc
if (!nomessage)
- to_chat(M, "Your [name] goes out, and you empty the ash.")
+ to_chat(M, span("notice", "Your [name] goes out, and you empty the ash."))
playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
lit = 0
icon_state = icon_off
@@ -223,7 +232,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
attack_verb = list("burnt", "singed")
icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
icon_off = "cigoff"
- type_butt = /obj/item/cigbutt
+ type_butt = /obj/item/trash/cigbutt
chem_volume = 30
burn_rate = 0.006 //Lasts ~166 seconds)
matchmes = "USER lights their NAME with their FLAME."
@@ -244,7 +253,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(istype(W, /obj/item/melee/energy/sword))
var/obj/item/melee/energy/sword/S = W
if(S.active)
- light("[user] swings their [W], barely missing themselves. They light their [name] in the process.")
+ light(span("warning", "[user] swings their [W], barely missing themselves. They light their [name] in the process."))
return
@@ -252,14 +261,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(lit && H == user && istype(H))
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
- to_chat(H, "\The [blocked] is in the way!")
+ to_chat(H, span("warning", "\The [blocked] is in the way!"))
return 1
if(last_drag <= world.time - 30) //Spam limiter. Only for messages/sound.
last_drag = world.time
H.visible_message("[H.name] takes a drag of their [name].")
playsound(H, 'sound/items/cigs_lighters/inhale.ogg', 50, 0, -1)
- reagents.trans_to_mob(H, (rand(10,20)/10), CHEM_BREATHE) //Smokes it faster. Slightly random amount.
- return 1
+ reagents.trans_to_mob(H, (rand(10,20)/10), CHEM_BREATHE) //Smokes it faster. Slightly random amount.
+ return 1
return ..()
/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/reagent_containers/glass/glass, mob/user as mob, proximity)
@@ -269,17 +278,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(istype(glass)) //you can dip cigarettes into beakers
var/transfered = glass.reagents.trans_to_obj(src, chem_volume)
if(transfered) //if reagents were transfered, show the message
- to_chat(user, "You dip \the [src] into \the [glass].")
+ to_chat(user, span("warning", "You dip \the [src] into \the [glass]."))
playsound(src.loc, 'sound/effects/footsteps/slosh1.wav', 50, 1)
else //if not, either the beaker was empty, or the cigarette was full
if(!glass.reagents.total_volume)
- to_chat(user, "[glass] is empty.")
+ to_chat(user, span("notice", "[glass] is empty."))
else
- to_chat(user, "[src] is full.")
+ to_chat(user, span("notice", "[src] is full."))
/obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user as mob)
if(lit == 1)
- user.visible_message("[user] calmly drops and treads on the lit [src], putting it out instantly.")
+ user.visible_message(span("notice", "[user] calmly drops and treads on the lit [src], putting it out instantly."))
playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
die(1)
return ..()
@@ -314,13 +323,27 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/smokable/cigarette/dromedaryco
-
/obj/item/clothing/mask/smokable/cigarette/dromedaryco/Initialize()
. = ..()
reagents.clear_reagents()
reagents.add_reagent("tobacco",5)
reagents.add_reagent("nicotine",10)
+/obj/item/clothing/mask/smokable/cigarette/nicotine
+
+/obj/item/clothing/mask/smokable/cigarette/nicotine/Initialize()
+ . = ..()
+ reagents.clear_reagents()
+ reagents.add_reagent("tobaccofine",5)
+ reagents.add_reagent("nicotine",10)
+
+/obj/item/clothing/mask/smokable/cigarette/rugged
+
+/obj/item/clothing/mask/smokable/cigarette/rugged/Initialize()
+ . = ..()
+ reagents.clear_reagents()
+ reagents.add_reagent("tobaccobad",10)
+ reagents.add_reagent("nicotine",5)
////////////
// CIGARS //
@@ -328,12 +351,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/smokable/cigarette/cigar
name = "premium cigar"
desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!"
- icon_state = "cigar2off"
- icon_on = "cigar2on"
- icon_off = "cigar2off"
- type_butt = /obj/item/cigbutt/cigarbutt
- throw_speed = 0.5
+ icon_state = "cigaroff"
+ icon_on = "cigaron"
+ icon_off = "cigaroff"
item_state = "cigaroff"
+ type_butt = /obj/item/trash/cigbutt/cigarbutt
+ throw_speed = 0.5
burn_rate = 0.003 //Lasts ~300 seconds
chem_volume = 60
matchmes = "USER lights their NAME with their FLAME."
@@ -355,6 +378,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigar2off"
icon_on = "cigar2on"
icon_off = "cigar2off"
+ type_butt = /obj/item/trash/cigbutt/cigarbutt/alt
chem_volume = 60
/obj/item/clothing/mask/smokable/cigarette/cigar/havana/Initialize()
@@ -370,6 +394,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigar2off"
icon_on = "cigar2on"
icon_off = "cigar2off"
+ type_butt = /obj/item/trash/cigbutt/cigarbutt/alt
chem_volume = 120
/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba/Initialize()
@@ -379,7 +404,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
reagents.add_reagent("nicotine",10) //1/6 Ratio
reagents.add_reagent("tricordrazine",20)
-/obj/item/cigbutt
+/obj/item/trash/cigbutt
name = "cigarette butt"
desc = "A manky old cigarette butt."
icon = 'icons/obj/clothing/masks.dmi'
@@ -390,22 +415,44 @@ CIGARETTE PACKETS ARE IN FANCY.DM
throwforce = 1
drop_sound = 'sound/items/cigs_lighters/cig_snuff.ogg'
-/obj/item/cigbutt/Initialize()
+/obj/item/trash/cigbutt/Initialize()
. = ..()
randpixel_xy()
transform = turn(transform,rand(0,360))
-/obj/item/cigbutt/cigarbutt
+/obj/item/trash/cigbutt/cigarbutt
name = "cigar butt"
desc = "A manky old cigar butt."
icon_state = "cigarbutt"
+/obj/item/trash/cigbutt/cigarbutt/alt
+ icon_state = "cigarbutt2"
+
/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/W as obj, mob/user as mob)
..()
user.update_inv_wear_mask(0)
user.update_inv_l_hand(0)
user.update_inv_r_hand(1)
+/obj/item/clothing/mask/smokable/cigarette/rolled/sausage
+ name = "sausage"
+ desc = "A piece of mixed, long meat, with a smoky scent."
+ icon_state = "sausageoff"
+ item_state = "sausageoff"
+ icon_on = "sausageon"
+ type_butt = /obj/item/trash/cigbutt/sausagebutt
+ chem_volume = 6
+
+/obj/item/clothing/mask/smokable/cigarette/rolled/sausage/Initialize()
+ . = ..()
+ reagents.clear_reagents()
+ reagents.add_reagent("protein",6)
+
+/obj/item/trash/cigbutt/sausagebutt
+ name = "sausage butt"
+ desc = "A piece of burnt meat."
+ icon_state = "sausagebutt"
+
/////////////////
//SMOKING PIPES//
/////////////////
@@ -448,7 +495,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user as mob)
if(lit == 1)
- user.visible_message("[user] puts out [src].", "You put out [src].")
+ user.visible_message(span("notice", "[user] puts out [src]."), span("notice", "You put out [src]."))
playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
lit = 0
icon_state = icon_off
@@ -456,7 +503,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSprocessing, src)
else if (burn_rate)
var/turf/location = get_turf(user)
- user.visible_message("[user] empties out [src].", "You empty out [src].")
+ user.visible_message(span("notice", "[user] empties out [src]."), span("notice", "You empty out [src]."))
new /obj/effect/decal/cleanable/ash(location)
burn_rate = 0
reagents.clear_reagents()
@@ -471,10 +518,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if (istype(W, /obj/item/reagent_containers/food/snacks))
var/obj/item/reagent_containers/food/snacks/grown/G = W
if (!G.dry)
- to_chat(user, "[G] must be dried before you stuff it into [src].")
+ to_chat(user, span("notice", "[G] must be dried before you stuff it into [src]."))
return
if (burn_rate)
- to_chat(user, "[src] is already packed.")
+ to_chat(user, span("notice", "[src] is already packed."))
return
if(G.reagents)
initial_volume = G.reagents.total_volume
@@ -486,15 +533,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else if(istype(W, /obj/item/flame/lighter))
var/obj/item/flame/lighter/L = W
if(L.lit)
- light("[user] manages to light their [name] with [W].")
+ light(span("notice", "[user] manages to light their [name] with [W]."))
else if(istype(W, /obj/item/flame/match))
var/obj/item/flame/match/M = W
if(M.lit)
- light("[user] lights their [name] with their [W].")
+ light(span("notice", "[user] lights their [name] with their [W]."))
else if(istype(W, /obj/item/device/assembly/igniter))
- light("[user] fiddles with [W], and manages to light their [name] with the power of science.")
+ light(span("notice", "[user] fiddles with [W], and manages to light their [name] with the power of science."))
user.update_inv_wear_mask(0)
user.update_inv_l_hand(0)
@@ -518,6 +565,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon = 'icons/obj/cigs_lighters.dmi'
icon_state = "lighter-g"
item_state = "lighter-g"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
w_class = 1
throwforce = 4
flags = CONDUCT
@@ -557,20 +608,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = "[base_state]on"
playsound(src.loc, pick(activation_sound), 75, 1)
if(istype(src, /obj/item/flame/lighter/zippo) )
- user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.")
+ user.visible_message(span("notice", "Without even breaking stride, [user] flips open and lights [src] in one smooth movement."))
else
if(prob(95))
- user.visible_message("After a few attempts, [user] manages to light the [src].")
+ user.visible_message(span("notice", "After a few attempts, [user] manages to light the [src]."))
else
- to_chat(user, "You burn yourself while lighting the lighter.")
+ to_chat(user, span("warning", "You burn yourself while lighting the lighter."))
if(user.IgniteMob())
user.visible_message(span("danger","\The [user] accidentally sets themselves on fire!"))
if (user.l_hand == src)
user.apply_damage(2,BURN,BP_L_HAND)
else
user.apply_damage(2,BURN,BP_R_HAND)
- user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.")
+ user.visible_message(span("notice", "After a few attempts, [user] manages to light the [src], they however burn their finger in the process."))
set_light(2, 1, l_color = LIGHT_COLOR_LAVA)
START_PROCESSING(SSprocessing, src)
@@ -580,9 +631,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = "[base_state]"
playsound(src.loc, deactivation_sound, 75, 1)
if(istype(src, /obj/item/flame/lighter/zippo) )
- user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.")
+ user.visible_message(span("notice", "You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing."))
else
- user.visible_message("[user] quietly shuts off the [src].")
+ user.visible_message(span("notice", "[user] quietly shuts off the [src]."))
set_light(0)
STOP_PROCESSING(SSprocessing, src)
@@ -604,9 +655,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
cig.attackby(src, user)
else
if(istype(src, /obj/item/flame/lighter/zippo))
- cig.light("[user] whips the [name] out and holds it for [M].")
+ cig.light(span("notice", "[user] whips the [name] out and holds it for [M]."))
else
- cig.light("[user] holds the [name] out for [M], and lights the [cig.name].")
+ cig.light(span("notice", "[user] holds the [name] out for [M], and lights the [cig.name]."))
else
..()
@@ -631,4 +682,104 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = "[base_state]"
set_light(0)
STOP_PROCESSING(SSprocessing, src)
- return
\ No newline at end of file
+ return
+
+///////////
+//ROLLING//
+///////////
+/obj/item/clothing/mask/smokable/cigarette/rolled
+ name = "rolled cigarette"
+ desc = "A hand rolled cigarette using dried plant matter."
+ icon_state = "cigrolloff"
+ item_state = "cigoff"
+ type_butt = /obj/item/trash/cigbutt/roll
+ chem_volume = 50
+ var/filter = 0
+ icon_on = "cigrollon"
+ icon_off = "cigrolloff"
+
+/obj/item/trash/cigbutt/roll
+ icon_state = "rollbutt"
+
+/obj/item/clothing/mask/smokable/cigarette/rolled/examine(mob/user)
+ . = ..()
+ if(. && filter)
+ to_chat(user, "Capped off one end with a filter.")
+
+/obj/item/clothing/mask/smokable/cigarette/rolled/update_icon()
+ . = ..()
+ if(!lit)
+ icon_state = filter ? "cigoff" : "cigrolloff"
+ else
+ icon_state = filter ? "cigon" : "cigrollon"
+
+/obj/item/paper/cig
+ name = "rolling paper"
+ desc = "A thin piece of paper used to make smokables."
+ icon = 'icons/obj/cigs_lighters.dmi'
+ icon_state = "cigpaper_generic"
+ w_class = 1.0
+
+/obj/item/paper/cig/fine
+ name = "\improper Trident rolling paper"
+ desc = "A thin piece of trident branded paper used to make fine smokables."
+ icon_state = "cigpaper_fine"
+
+/obj/item/paper/cig/filter
+ name = "cigarette filter"
+ desc = "A small nub like filter for cigarettes."
+ icon_state = "cigfilter"
+ w_class = 1.0
+
+//tobacco sold seperately if you're too snobby to grow it yourself.
+/obj/item/reagent_containers/food/snacks/grown/dried_tobacco
+ plantname = "tobacco"
+ w_class = 1.0
+
+/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/Initialize()
+ . = ..()
+ dry = TRUE
+ name = "dried [name]"
+ color = "#a38463"
+
+/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/bad
+ plantname = "badtobacco"
+
+/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/fine
+ plantname = "finetobacco"
+
+/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/pure
+ plantname = "puretobacco"
+
+/obj/item/clothing/mask/smokable/cigarette/rolled/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/paper/cig/filter))
+ if(filter)
+ to_chat(user, span("warning", "[src] already has a filter!"))
+ return
+ if(lit)
+ to_chat(user, span("warning", "[src] is lit already!"))
+ return
+ if(user.unEquip(I))
+ to_chat(user, span("notice", "You stick [I] into \the [src]"))
+ filter = 1
+ name = "filtered [name]"
+ update_icon()
+ qdel(I)
+ return
+ ..()
+
+/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/I, mob/user)
+ if(is_type_in_list(I, list(/obj/item/paper/cig/, /obj/item/paper/, /obj/item/teleportation_scroll)))
+ if(!dry)
+ to_chat(user, span("warning", "You need to dry [src] first!"))
+ return
+ if(user.unEquip(I))
+ var/obj/item/clothing/mask/smokable/cigarette/rolled/R = new(get_turf(src))
+ R.chem_volume = reagents.total_volume
+ reagents.trans_to_holder(R.reagents, R.chem_volume)
+ to_chat(user, span("notice", "You roll \the [src] into \the [I]"))
+ user.put_in_active_hand(R)
+ qdel(I)
+ qdel(src)
+ return
+ ..()
diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index b7e93810ec3..f8141cc79e6 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -41,7 +41,7 @@
/obj/item/material/ashtray/attackby(obj/item/W as obj, mob/user as mob)
if (health <= 0)
return
- if (istype(W,/obj/item/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/flame/match))
+ if (istype(W,/obj/item/trash/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/flame/match))
if (contents.len >= max_butts)
to_chat(user, "\The [src] is full.")
return
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 9542db9f2e9..cf323d96994 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -118,7 +118,7 @@
desc = "A faithful box that will remain with you, no matter where you go, and probably save you."
icon_state = "e_box"
autodrobe_no_remove = 1
- starts_with = list(/obj/item/clothing/mask/breath = 1,
+ starts_with = list(/obj/item/clothing/mask/breath = 1,
/obj/item/tank/emergency_oxygen = 1,
/obj/item/device/flashlight/flare = 1
)
@@ -476,6 +476,7 @@
W.lit = 1
W.damtype = "burn"
W.icon_state = "match_lit"
+ W.item_state = "match_lit"
START_PROCESSING(SSprocessing, W)
else
playsound(src.loc, 'sound/items/cigs_lighters/matchstick_hit.ogg', 25, 0, -1)
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 5147cba1f56..f267f25aee3 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -151,11 +151,16 @@
//CIG PACK//
////////////
/obj/item/storage/fancy/cigarettes
- name = "cigarette packet"
- desc = "The most popular brand of Space Cigarettes, sponsors of the Space Olympics."
+ name = "Trans-Stellar Duty Free cigarette packet"
+ desc = "A ubiquitous brand of cigarettes, found in the facilities of every major spacefaring corporation in the universe. As mild and flavorless as it gets."
icon = 'icons/obj/cigs_lighters.dmi'
icon_state = "cigpacket"
item_state = "cigpacket"
+ icon_type = "cigarette"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
drop_sound = 'sound/items/drop/gloves.ogg'
use_sound = 'sound/items/drop/paper.ogg'
w_class = 1
@@ -163,8 +168,7 @@
slot_flags = SLOT_BELT
storage_slots = 6
var/cigarette_to_spawn = /obj/item/clothing/mask/smokable/cigarette
- can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/flame/lighter, /obj/item/cigbutt)
- icon_type = "cigarette"
+ can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/flame/lighter, /obj/item/trash/cigbutt)
/obj/item/storage/fancy/cigarettes/Initialize()
flags |= NOREACT
@@ -213,21 +217,21 @@
// get it? A - AcmeCo, B - Blank, C - Cigar, D - DromedaryCo. How convenient is that? - Wezzy
/obj/item/storage/fancy/cigarettes/acmeco
- name = "\improper AcmeCo packet"
+ name = "\improper AcmeCo cigarette packet"
desc = "A packet of six AcmeCo cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors."
icon_state = "Apacket"
- item_state = "Apacket" //Doesn't have an inhand state, but neither does dromedary, so, ya know..
+ item_state = "Apacket"
cigarette_to_spawn = /obj/item/clothing/mask/smokable/cigarette/acmeco
/obj/item/storage/fancy/cigarettes/blank
- name = "\improper blank packet"
+ name = "\improper blank cigarette packet"
desc = "A packet of six blank cigarettes. The healthiest cigarettes on the market!"
icon_state = "Bpacket"
- item_state = "Bpacket" //Doesn't have an inhand state, but neither does dromedary, so, ya know..
+ item_state = "Bpacket"
cigarette_to_spawn = /obj/item/clothing/mask/smokable/cigarette/blank
/obj/item/storage/fancy/cigarettes/dromedaryco
- name = "\improper DromedaryCo packet"
+ name = "\improper DromedaryCo cigarette packet"
desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\""
icon_state = "Dpacket"
item_state = "Dpacket"
@@ -239,12 +243,16 @@
icon_state = "cigarcase"
item_state = "cigarcase"
icon = 'icons/obj/cigs_lighters.dmi'
- drop_sound = 'sound/items/drop/gloves.ogg'
- use_sound = 'sound/items/drop/paper.ogg'
+ drop_sound = 'sound/items/drop/shovel.ogg'
+ use_sound = 'sound/items/storage/briefcase.ogg'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
w_class = 1
throwforce = 2
slot_flags = SLOT_BELT
- storage_slots = 7
+ storage_slots = 8
can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar)
icon_type = "cigar"
@@ -283,6 +291,20 @@
else
..()
+/obj/item/storage/fancy/cigarettes/nicotine
+ name = "\improper Nico-Tine cigarette packet"
+ desc = "A packet of six Nico-Tine cigarettes. Allegedly advertised as the most enviromentally friendly cigarettes in the market. It doesn't specify how, but it definitely isn't your body."
+ icon_state = "Epacket"
+ item_state = "Epacket"
+ cigarette_to_spawn = /obj/item/clothing/mask/smokable/cigarette/nicotine
+
+/obj/item/storage/fancy/cigarettes/rugged
+ name = "\improper Lucky Strike cigarette packet"
+ desc = "A packet of six Lucky Strike cigarettes. Rumored to be part of an Idris money laundering scheme, it's original purpose long forgotten."
+ icon_state = "Fpacket"
+ item_state = "Fpacket"
+ cigarette_to_spawn = /obj/item/clothing/mask/smokable/cigarette/rugged
+
/*
* Vial Box
*/
diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm
index 5e2890e8f0a..44bae681ade 100644
--- a/code/game/objects/items/weapons/storage/misc.dm
+++ b/code/game/objects/items/weapons/storage/misc.dm
@@ -48,3 +48,149 @@
/obj/item/storage/box/pineapple/fill()
. = ..()
update_icon()
+
+//cigarette papers
+/obj/item/storage/fancy/cigpaper
+ name = "\improper Gen. Eric cigarette paper"
+ desc = "A ubiquitous brand of cigarette paper, allegedly endorsed by 24th century war hero General Eric Osmundsun for rolling your own cigarettes. Osmundsun died in a freak kayak accident. As it ate him alive during his last campaign. It was pretty freaky."
+ icon = 'icons/obj/cigs_lighters.dmi'
+ icon_state = "cigpaperbook_generic"
+ item_state = "cigpacket"
+ drop_sound = 'sound/items/drop/wrapper.ogg'
+ use_sound = 'sound/items/drop/paper.ogg'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
+ w_class = 2
+ max_storage_space = 10
+ throwforce = 2
+ slot_flags = SLOT_BELT
+ starts_with = list(/obj/item/paper/cig = 10)
+ make_exact_fit()
+
+/obj/item/storage/fancy/cigpaper/update_icon()
+ . = ..()
+ if(contents.len)
+ icon_state = "[initial(icon_state)]"
+ else
+ icon_state = "[initial(icon_state)]_empty"
+
+/obj/item/storage/cigfilters
+ name = "box of cigarette filters"
+ desc = "A box of generic cigarette filters for those who rolls their own but prefers others to inhale the fumes."
+ icon = 'icons/obj/cigs_lighters.dmi'
+ icon_state = "cigfilters_generic"
+ item_state = "cigpacket"
+ w_class = 2
+ starts_with = list(/obj/item/paper/cig/filter = 10)
+ make_exact_fit()
+
+/obj/item/storage/fancy/cigpaper/fine
+ name = "\improper Trident cigarette paper"
+ desc = "A fancy brand of Trident cigarette paper, for rolling your own cigarettes. Like a person who appreciates the finer things in life."
+ icon = 'icons/obj/cigs_lighters.dmi'
+ icon_state = "cigpaperbook_fine"
+ item_state = "Dpacket"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
+ starts_with = list(/obj/item/paper/cig/fine = 10)
+
+//chewing tobacco
+/obj/item/storage/chewables
+ name = "box of chewing wads master"
+ desc = "A generic brand of Waffle Co Wads, unflavored chews. Why do these exist?"
+ icon = 'icons/obj/cigs_lighters.dmi'
+ icon_state = "placeholder"
+ item_state = "cigpacket"
+ drop_sound = 'sound/items/drop/shovel.ogg'
+ use_sound = 'sound/items/storage/pillbottle.ogg'
+ w_class = 2
+ throwforce = 2
+ slot_flags = SLOT_BELT
+ starts_with = list(/obj/item/clothing/mask/chewable/tobacco = 6)
+ make_exact_fit()
+
+/obj/item/storage/chewables/tobacco/bad
+ name = "can of Rredouane Cuts chewing tobacco"
+ desc = "A cheap, widely used replacement for cigarettes, it provided much needed respite for soldiers in Adhomian wars."
+ icon_state = "chew_bad"
+ item_state = "Fpacket"
+ starts_with = list(/obj/item/clothing/mask/chewable/tobacco/bad = 6)
+
+/obj/item/storage/chewables/tobacco
+ name = "tin of Mendell Smooth chewing tobacco"
+ desc = "Packaged and shipped straight from District 8, popularised by the city-slickers of Vega De Rosa."
+ icon_state = "chew_generic"
+ item_state = "cigpacket"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
+ starts_with = list(/obj/item/clothing/mask/chewable/tobacco/generic = 6)
+ storage_slots = 6
+
+/obj/item/storage/chewables/tobacco/fine
+ name = "tin of Taba-Kamu chewing tobacco"
+ desc = "Said to be cultivated by employees of Nojusuru Foods in secret, the strand has been released for the public to enjoy."
+ icon_state = "chew_fine"
+ item_state = "Dpacket"
+ starts_with = list(/obj/item/clothing/mask/chewable/tobacco/fine = 6)
+
+/obj/item/storage/fancy/chewables/tobacco/nico
+ name = "box of Nico-Tine gum"
+ desc = "A Sol-approved brand of nicotine gum. Cut out the middleman for your addiction fix."
+ icon = 'icons/obj/cigs_lighters.dmi'
+ icon_state = "chew_nico"
+ item_state = "Epacket"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
+ starts_with = list(/obj/item/clothing/mask/chewable/tobacco/nico = 6)
+ storage_slots = 6
+ drop_sound = 'sound/items/drop/box.ogg'
+ use_sound = 'sound/items/storage/box.ogg'
+
+/obj/item/storage/fancy/chewables/tobacco/update_icon()
+ icon_state = "[initial(icon_state)][contents.len]"
+
+//loose leaf
+
+/obj/item/storage/chewables/rollable/bad
+ name = "box of S'th Kasavakh tobacco"
+ desc = "A box of coarse gritty tobacco which still manages to grow against the desertification of Moghes."
+ starts_with = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/bad = 8)
+ icon_state = "roll_bad"
+ item_state = "Fpacket"
+
+/obj/item/storage/chewables/rollable
+ name = "box of Agyre Lake tobacco"
+ desc = "Advertised to be grown using fresh water pumped directly from the titular Martian lake."
+ starts_with = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco = 8)
+ icon_state = "roll_generic"
+ item_state = "cigpacket"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_cigs_lighters.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_cigs_lighters.dmi',
+ )
+ max_storage_space = 8
+ drop_sound = 'sound/items/drop/box.ogg'
+ use_sound = 'sound/items/storage/box.ogg'
+
+/obj/item/storage/chewables/rollable/fine
+ name = "box of Excelsior Epsilon tobacco"
+ desc = "Quality tobacco favored by the Corporates of Eridani - just don't read the label at the bottom."
+ starts_with = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/fine = 8)
+ icon_state = "roll_fine"
+ item_state = "Dpacket"
+
+/obj/item/storage/chewables/rollable/nico
+ name = "box of Golden Sol tobacco"
+ desc = "A exclusive brand of overpriced tobacco, allegedly grown at a lagrange point station in Sol system."
+ starts_with = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/pure = 8)
+ icon_state = "roll_nico"
+ item_state = "Epacket"
+
diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm
index 244cc7a8880..ac9434bece0 100644
--- a/code/game/turfs/initialization/maintenance.dm
+++ b/code/game/turfs/initialization/maintenance.dm
@@ -34,7 +34,7 @@ var/global/list/random_junk
return /obj/effect/decal/cleanable/generic
if(!random_junk)
random_junk = subtypesof(/obj/item/trash)
- random_junk += typesof(/obj/item/cigbutt)
+ random_junk += typesof(/obj/item/trash/cigbutt)
random_junk += /obj/effect/decal/cleanable/spiderling_remains
random_junk += /obj/effect/decal/remains/rat
random_junk += /obj/effect/decal/remains/robot
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 19a89c86bdf..3a485648202 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -1232,10 +1232,10 @@
name = "tobacco"
seed_name = "tobacco"
display_name = "tobacco leaves"
- mutants = list("finetobacco")
- chems = list("tobacco" = list(1,10), "nicotine" = list(1,3))
+ mutants = list("finetobacco", "puretobacco", "badtobacco")
+ chems = list("tobacco" = list(1,10))
-/datum/seed/tobacco/setup_traits()
+/datum/seed/tobacco/New()
..()
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
@@ -1253,15 +1253,36 @@
name = "finetobacco"
seed_name = "fine tobacco"
display_name = "fine tobacco leaves"
- chems = list("tobaccorich" = list(1,10), "nicotine" = list(3,5))
+ chems = list("tobaccofine" = list(1,10))
-/datum/seed/tobacco/finetobacco/setup_traits()
+/datum/seed/tobacco/finetobacco/New()
..()
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_PRODUCT_COLOUR,"#33571b")
set_trait(TRAIT_PLANT_COLOUR,"#33571b")
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.20)
+/datum/seed/tobacco/puretobacco //provides the pure nicotine reagent
+ name = "puretobacco"
+ seed_name = "succulent tobacco"
+ display_name = "succulent tobacco leaves"
+ chems = list("nicotine" = list(1,10))
+
+/datum/seed/tobacco/puretobacco/New()
+ ..()
+ set_trait(TRAIT_YIELD,3)
+ set_trait(TRAIT_JUICY,1)
+ set_trait(TRAIT_PRODUCT_COLOUR,"#b7c61a")
+ set_trait(TRAIT_PLANT_COLOUR,"#b7c61a")
+ set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.30)
+
+/datum/seed/tobacco/bad
+ name = "badtobacco"
+ seed_name = "low-grade tobacco"
+ display_name = "low-grade tobacco leaves"
+ mutants = list("tobacco")
+ chems = list("tobaccobad" = list(1,10))
+
/datum/seed/peppercorn
name = "peppercorn"
seed_name = "peppercorn"
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 47c63d8cfbc..b34712ca054 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -73,7 +73,7 @@
for(var/obj/W in T)
//Different classes of items give different commodities.
- if(istype(W,/obj/item/cigbutt))
+ if(istype(W,/obj/item/trash/cigbutt))
if(plastic)
plastic.add_charge(500)
else if (istype(W, /obj/item/flame/match))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 7971eeca611..59a7b6794a3 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -80,9 +80,9 @@
if(icon_state == "paper_talisman")
return
else if (info && length(trim(info)))
- icon_state = "paper_words"
+ icon_state = "[initial(icon_state)]_words"
else
- icon_state = "paper"
+ icon_state = "[initial(icon_state)]"
/obj/item/paper/proc/update_space(var/new_text)
if(new_text)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 716ea857e80..3d99a536c76 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -856,6 +856,37 @@
M.Weaken(10 * removed * scale)
M.add_chemical_effect(CE_PULSE, 0.5)
+/datum/reagent/tobacco
+ name = "Tobacco"
+ id = "tobacco"
+ description = "Cut and processed tobacco leaves."
+ taste_description = "tobacco"
+ reagent_state = SOLID
+ color = "#684b3c"
+ data = 0
+ scannable = 1
+ var/nicotine = REM * 0.2
+ fallback_specific_heat = 1
+ value = 3
+
+/datum/reagent/tobacco/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.reagents.add_reagent("nicotine")
+
+/datum/reagent/tobacco/fine
+ name = "Fine Tobacco"
+ id = "tobaccofine"
+ taste_description = "fine tobacco"
+ data = 0
+ value = 5
+
+/datum/reagent/tobacco/bad
+ name = "Terrible Tobacco"
+ id = "tobaccobad"
+ taste_description = "acrid smoke"
+ data = 0
+ value = 0
+
/datum/reagent/mental/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
diff --git a/html/changelogs/wezzy_rollables.yml b/html/changelogs/wezzy_rollables.yml
new file mode 100644
index 00000000000..e52a2e0ff90
--- /dev/null
+++ b/html/changelogs/wezzy_rollables.yml
@@ -0,0 +1,42 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: Wowzewow (Wezzy)
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds chewing tobacco, rolling tobacco, rolling papers, cigarette filters to the cigarette vendors! (Note : these brands are provisional at the moment)"
+ - imageadd: "New sprites for cigarettes and related stuff."
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 00f14dc872b..937b3bd876d 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_cigs_lighters.dmi b/icons/mob/items/lefthand_cigs_lighters.dmi
new file mode 100644
index 00000000000..1c087488e5d
Binary files /dev/null and b/icons/mob/items/lefthand_cigs_lighters.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index f98831c28b1..458cda4f501 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_cigs_lighters.dmi b/icons/mob/items/righthand_cigs_lighters.dmi
new file mode 100644
index 00000000000..3118163108c
Binary files /dev/null and b/icons/mob/items/righthand_cigs_lighters.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index fadc9bed7a8..8e8fc9dd4db 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/obj/cigs_lighters.dmi b/icons/obj/cigs_lighters.dmi
index 95e7e4f4ea4..cc7e6a2d37b 100644
Binary files a/icons/obj/cigs_lighters.dmi and b/icons/obj/cigs_lighters.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 8e583352d43..ce72021e493 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/maps/aurora/aurora-1_centcomm.dmm b/maps/aurora/aurora-1_centcomm.dmm
index 50bb641e8de..6c52026b2b6 100644
--- a/maps/aurora/aurora-1_centcomm.dmm
+++ b/maps/aurora/aurora-1_centcomm.dmm
@@ -5386,7 +5386,7 @@
/turf/simulated/floor/shuttle/black,
/area/syndicate_station/start)
"anu" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/shuttle/black,
/area/syndicate_station/start)
"anv" = (
@@ -14754,7 +14754,7 @@
},
/area/syndicate_mothership/raider_base)
"aJb" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
dir = 8;
icon_state = "wood"
@@ -22959,8 +22959,8 @@
"dIB" = (
/obj/structure/table/standard,
/obj/item/trash/plate,
-/obj/item/cigbutt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
+/obj/item/trash/cigbutt,
/obj/item/storage/box/matches{
pixel_y = 12
},
@@ -23856,7 +23856,7 @@
/obj/structure/table/reinforced/steel,
/obj/item/deck/cards,
/obj/effect/decal/cleanable/dirt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
icon_state = "engine"
},
@@ -24239,7 +24239,7 @@
"gpl" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/generic,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
icon_state = "wood-broken5"
},
@@ -25247,8 +25247,8 @@
/area/template_noop)
"ihn" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/cigbutt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
icon_state = "engine"
},
@@ -30581,7 +30581,7 @@
"sDs" = (
/obj/structure/table/wood/gamblingtable,
/obj/item/material/ashtray/bronze,
-/obj/item/cigbutt/cigarbutt,
+/obj/item/trash/cigbutt/cigarbutt,
/turf/unsimulated/floor{
dir = 8;
icon_state = "wood"
@@ -31008,8 +31008,8 @@
/area/centcom/legion)
"tqh" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/cigbutt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
dir = 8;
icon_state = "wood"
@@ -31293,7 +31293,7 @@
/area/centcom/distress_prep)
"tYp" = (
/obj/structure/table/wood,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/item/reagent_containers/food/snacks/donerkebab{
pixel_x = 6;
pixel_y = 4
@@ -31631,7 +31631,7 @@
"uXC" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/generic,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
dir = 8;
icon_state = "wood"
diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm
index 6ed1ccce5d6..10fc015d5f6 100644
--- a/maps/aurora/aurora-3_sublevel.dmm
+++ b/maps/aurora/aurora-3_sublevel.dmm
@@ -6278,7 +6278,7 @@
/area/turret_protected/ai)
"aol" = (
/obj/machinery/hologram/holopad,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm
index 59ccf7e5213..4746cde607a 100644
--- a/maps/aurora/aurora-4_mainlevel.dmm
+++ b/maps/aurora/aurora-4_mainlevel.dmm
@@ -4687,7 +4687,7 @@
icon_state = "alarm0";
pixel_x = -22
},
-/obj/item/cigbutt/cigarbutt,
+/obj/item/trash/cigbutt/cigarbutt,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
icon_state = "map-scrubbers";
dir = 8
@@ -64675,8 +64675,8 @@
/area/maintenance/vault)
"eqx" = (
/obj/structure/table/steel,
-/obj/item/cigbutt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
+/obj/item/trash/cigbutt,
/obj/effect/decal/cleanable/dirt,
/obj/item/material/ashtray,
/obj/effect/floor_decal/corner/grey/diagonal,
@@ -67916,9 +67916,9 @@
/turf/simulated/floor/carpet/blue,
/area/rnd/rdoffice)
"ndP" = (
-/obj/item/cigbutt,
-/obj/item/cigbutt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
+/obj/item/trash/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"ndR" = (
diff --git a/maps/aurora/aurora-7_roof.dmm b/maps/aurora/aurora-7_roof.dmm
index 023681403e2..8e77e5ca5d9 100644
--- a/maps/aurora/aurora-7_roof.dmm
+++ b/maps/aurora/aurora-7_roof.dmm
@@ -746,7 +746,7 @@
},
/obj/structure/table/reinforced,
/obj/item/material/ashtray/plastic,
-/obj/item/cigbutt/cigarbutt,
+/obj/item/trash/cigbutt/cigarbutt,
/obj/structure/disposalpipe/segment{
dir = 4
},
diff --git a/maps/exodus/exodus-1_station.dmm b/maps/exodus/exodus-1_station.dmm
index 4328d16668e..a2f4a9d92ea 100644
--- a/maps/exodus/exodus-1_station.dmm
+++ b/maps/exodus/exodus-1_station.dmm
@@ -1693,7 +1693,7 @@
dir = 2;
icon_state = "pipe-c"
},
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/plating,
@@ -3281,7 +3281,7 @@
/turf/simulated/floor/plating,
/area/maintenance/security_port)
"agd" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/structure/cable{
d1 = 1;
d2 = 8;
@@ -5152,7 +5152,7 @@
/obj/effect/decal/cleanable/blood/oil/streak{
amount = 0
},
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/plating,
/area/maintenance/security_port)
"ajC" = (
@@ -10948,7 +10948,7 @@
/turf/simulated/floor/plating,
/area/maintenance/evahallway)
"atD" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/structure/cable{
d1 = 1;
d2 = 2;
@@ -17386,7 +17386,7 @@
/turf/simulated/floor/plating,
/area/maintenance/library)
"aGe" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
/obj/machinery/power/apc{
@@ -17793,7 +17793,7 @@
/turf/simulated/floor/tiled,
/area/hallway/primary/fore)
"aGV" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/structure/cable{
d1 = 1;
d2 = 4;
@@ -18045,7 +18045,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -32327,7 +32327,7 @@
/turf/simulated/floor/tiled,
/area/crew_quarters/locker)
"bib" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/structure/disposalpipe/segment{
dir = 4;
icon_state = "pipe-c"
@@ -35796,7 +35796,7 @@
/obj/machinery/alarm{
pixel_y = 23
},
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/plating,
/area/maintenance/disposal)
"bnZ" = (
@@ -35857,7 +35857,7 @@
/turf/simulated/floor/plating,
/area/maintenance/locker)
"bog" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/plating,
/area/maintenance/locker)
"boh" = (
@@ -36607,12 +36607,12 @@
pixel_x = -26;
pixel_y = -6
},
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/item/stool/padded,
/turf/simulated/floor/plating,
/area/maintenance/disposal)
"bpR" = (
-/obj/item/cigbutt{
+/obj/item/trash/cigbutt{
pixel_x = -10;
pixel_y = -10
},
@@ -37679,7 +37679,7 @@
pixel_y = -5
},
/obj/effect/decal/cleanable/ash,
-/obj/item/cigbutt/cigarbutt,
+/obj/item/trash/cigbutt/cigarbutt,
/turf/simulated/floor/plating,
/area/maintenance/disposal)
"brJ" = (
@@ -38688,7 +38688,7 @@
/turf/simulated/floor/plating,
/area/maintenance/disposal)
"btr" = (
-/obj/item/cigbutt{
+/obj/item/trash/cigbutt{
pixel_y = 12
},
/turf/simulated/floor/plating,
@@ -51259,7 +51259,7 @@
/turf/simulated/floor/tiled,
/area/quartermaster/miningdock)
"bPn" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/plating,
/area/maintenance/cargo)
"bPo" = (
@@ -51710,7 +51710,7 @@
/turf/simulated/floor/reinforced,
/area/rnd/misc_lab)
"bQh" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/tiled,
/area/rnd/storage)
"bQi" = (
@@ -57735,7 +57735,7 @@
/turf/simulated/floor/carpet,
/area/engineering/break_room)
"caS" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/structure/cable{
d1 = 1;
d2 = 2;
@@ -68220,7 +68220,7 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/maintenance/medbay)
diff --git a/maps/exodus/exodus-2_centcomm.dmm b/maps/exodus/exodus-2_centcomm.dmm
index de6313fa3d2..304d1a1543b 100644
--- a/maps/exodus/exodus-2_centcomm.dmm
+++ b/maps/exodus/exodus-2_centcomm.dmm
@@ -5223,7 +5223,7 @@
},
/area/syndicate_station/start)
"aoo" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/simulated/floor/shuttle{
icon_state = "floor7"
},
@@ -9477,7 +9477,7 @@
name = "\improper Raider Base"
})
"aBW" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/unsimulated/floor{
dir = 8;
icon_state = "wood"
diff --git a/maps/exodus/exodus-3_telecomms.dmm b/maps/exodus/exodus-3_telecomms.dmm
index 59d971795a3..d97379a6de2 100644
--- a/maps/exodus/exodus-3_telecomms.dmm
+++ b/maps/exodus/exodus-3_telecomms.dmm
@@ -1171,7 +1171,7 @@
/turf/simulated/floor/tiled,
/area/tcommsat/computer)
"dE" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/machinery/light,
/turf/simulated/floor/tiled,
/area/tcommsat/computer)
diff --git a/maps/exodus/exodus-5_asteroid.dmm b/maps/exodus/exodus-5_asteroid.dmm
index 4811f4a34be..df9ca4f4f5e 100644
--- a/maps/exodus/exodus-5_asteroid.dmm
+++ b/maps/exodus/exodus-5_asteroid.dmm
@@ -13491,7 +13491,7 @@
/turf/simulated/floor/tiled,
/area/outpost/mining_main/dorms)
"yV" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/obj/structure/cable/blue{
d1 = 4;
d2 = 8;
diff --git a/maps/space_ruins/derelict.dmm b/maps/space_ruins/derelict.dmm
index e9c0010870e..83490de0b98 100644
--- a/maps/space_ruins/derelict.dmm
+++ b/maps/space_ruins/derelict.dmm
@@ -3152,7 +3152,7 @@
/turf/simulated/floor/airless,
/area/derelict/hallway/southwest)
"kb" = (
-/obj/item/cigbutt,
+/obj/item/trash/cigbutt,
/turf/template_noop,
/area/template_noop)
"kc" = (