diff --git a/code/WorkInProgress/Chinsky/ashtray.dm b/code/WorkInProgress/Chinsky/ashtray.dm
index 1e48c49499..1e2fc4884f 100644
--- a/code/WorkInProgress/Chinsky/ashtray.dm
+++ b/code/WorkInProgress/Chinsky/ashtray.dm
@@ -17,15 +17,15 @@
/obj/item/ashtray/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (health < 1)
return
- if (istype(W,/obj/item/weapon/cigbutt) || istype(W,/obj/item/clothing/mask/cigarette) || istype(W, /obj/item/weapon/flame/match))
+ if (istype(W,/obj/item/weapon/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/weapon/flame/match))
if (contents.len >= max_butts)
user << "This ashtray is full."
return
user.u_equip(W)
W.loc = src
- if (istype(W,/obj/item/clothing/mask/cigarette))
- var/obj/item/clothing/mask/cigarette/cig = W
+ if (istype(W,/obj/item/clothing/mask/smokable/cigarette))
+ var/obj/item/clothing/mask/smokable/cigarette/cig = W
if (cig.lit == 1)
src.visible_message("[user] crushes [cig] in [src], putting it out.")
processing_objects.Remove(cig)
@@ -61,14 +61,14 @@
return
if (contents.len)
src.visible_message("\red [src] slams into [hit_atom] spilling its contents!")
- for (var/obj/item/clothing/mask/cigarette/O in contents)
+ for (var/obj/item/clothing/mask/smokable/cigarette/O in contents)
O.loc = src.loc
icon_state = icon_empty
return ..()
/obj/item/ashtray/proc/die()
src.visible_message("\red [src] shatters spilling its contents!")
- for (var/obj/item/clothing/mask/cigarette/O in contents)
+ for (var/obj/item/clothing/mask/smokable/cigarette/O in contents)
O.loc = src.loc
icon_state = icon_broken
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index d78f3e7a9d..8969102e00 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1249,7 +1249,7 @@ proc/is_hot(obj/item/W as obj)
return 1000
else
return 0
- if(/obj/item/clothing/mask/cigarette)
+ if(/obj/item/clothing/mask/smokable/cigarette)
if(W:lit)
return 1000
else
@@ -1287,7 +1287,7 @@ proc/is_hot(obj/item/W as obj)
istype(W, /obj/item/weapon/weldingtool) || \
istype(W, /obj/item/weapon/flame/lighter/zippo) || \
istype(W, /obj/item/weapon/flame/match) || \
- istype(W, /obj/item/clothing/mask/cigarette) || \
+ istype(W, /obj/item/clothing/mask/smokable/cigarette) || \
istype(W, /obj/item/weapon/shovel) \
)
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 52ca3debd9..8e86678ef2 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -16,8 +16,6 @@
var/icon_off = "smartfridge-off"
var/icon_panel = "smartfridge-panel"
var/item_quants = list()
- var/ispowered = 1 //starts powered
- var/isbroken = 0
var/seconds_electrified = 0;
var/shoot_inventory = 0
var/locked = 0
@@ -26,7 +24,7 @@
var/is_secure = 0
var/datum/wires/smartfridge/wires = null
-/obj/machinery/smartfridge/secure/
+/obj/machinery/smartfridge/secure
is_secure = 1
/obj/machinery/smartfridge/New()
@@ -121,8 +119,39 @@
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
return 1
+/obj/machinery/smartfridge/drying_rack
+ name = "\improper Drying Rack"
+ desc = "A machine for drying plants."
+
+/obj/machinery/smartfridge/drying_rack/accept_check(var/obj/item/O as obj)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/))
+ var/obj/item/weapon/reagent_containers/food/snacks/S = O
+ if (S.dried_type)
+ return 1
+ return 0
+
+/obj/machinery/smartfridge/drying_rack/process()
+ ..()
+ if (contents.len)
+ dry()
+
+/obj/machinery/smartfridge/drying_rack/proc/dry()
+ for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents)
+ if(S.dried_type == S.type)
+ S.dry = 1
+ item_quants[S.name]--
+ S.name = "dried [S.name]"
+ S.loc = loc
+ else
+ var/D = S.dried_type
+ new D(loc)
+ item_quants[S.name]--
+ del(S)
+ return
+ return
+
/obj/machinery/smartfridge/process()
- if(!src.ispowered)
+ if(stat & (BROKEN|NOPOWER))
return
if(src.seconds_electrified > 0)
src.seconds_electrified--
@@ -130,16 +159,16 @@
src.throw_item()
/obj/machinery/smartfridge/power_change()
+ var/old_stat = stat
..()
- if( !(stat & NOPOWER) )
- src.ispowered = 1
- if(!isbroken)
- icon_state = icon_on
+ if(old_stat != stat)
+ update_icon()
+
+/obj/machinery/smartfridge/update_icon()
+ if(stat & (BROKEN|NOPOWER))
+ icon_state = icon_off
else
- spawn(rand(0, 15))
- src.ispowered = 0
- if(!isbroken)
- icon_state = icon_off
+ icon_state = icon_on
/*******************
* Item Adding
@@ -148,7 +177,7 @@
/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/screwdriver))
panel_open = !panel_open
- user << "You [panel_open ? "open" : "close"] the maintenance panel."
+ user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].")
overlays.Cut()
if(panel_open)
overlays += image(icon, icon_panel)
@@ -160,7 +189,7 @@
attack_hand(user)
return
- if(!src.ispowered)
+ if(stat & NOPOWER)
user << "\The [src] is unpowered and useless."
return
@@ -175,13 +204,12 @@
item_quants[O.name]++
else
item_quants[O.name] = 1
- user.visible_message("[user] has added \the [O] to \the [src].", \
- "You add \the [O] to \the [src].")
+ user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].")
nanomanager.update_uis(src)
- else if(istype(O, /obj/item/weapon/storage/bag/plants))
- var/obj/item/weapon/storage/bag/plants/P = O
+ else if(istype(O, /obj/item/weapon/storage/bag))
+ var/obj/item/weapon/storage/bag/P = O
var/plants_loaded = 0
for(var/obj/G in P.contents)
if(accept_check(G))
@@ -197,9 +225,7 @@
plants_loaded++
if(plants_loaded)
- user.visible_message( \
- "[user] loads \the [src] with \the [P].", \
- "You load \the [src] with \the [P].")
+ user.visible_message("[user] loads \the [src] with \the [P].", "You load \the [src] with \the [P].")
if(P.contents.len > 0)
user << "Some items are refused."
@@ -210,7 +236,7 @@
return 1
/obj/machinery/smartfridge/secure/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if (istype(O, /obj/item/weapon/card/emag))
+ if(istype(O, /obj/item/weapon/card/emag))
emagged = 1
locked = -1
user << "You short out the product lock on [src]."
@@ -222,7 +248,8 @@
return 0
/obj/machinery/smartfridge/attack_hand(mob/user as mob)
- if(!ispowered) return
+ if(stat & (NOPOWER|BROKEN))
+ return
wires.Interact(user)
ui_interact(user)
@@ -244,32 +271,32 @@
for (var/i=1 to length(item_quants))
var/K = item_quants[i]
var/count = item_quants[K]
- if (count > 0)
+ if(count > 0)
items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count)))
- if (items.len > 0)
+ if(items.len > 0)
data["contents"] = items
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
+ if(!ui)
ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500)
ui.set_initial_data(data)
ui.open()
/obj/machinery/smartfridge/Topic(href, href_list)
- if (..()) return 0
+ if(..()) return 0
var/mob/user = usr
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
src.add_fingerprint(user)
- if (href_list["close"])
+ if(href_list["close"])
user.unset_machine()
ui.close()
return 0
- if (href_list["vend"])
+ if(href_list["vend"])
var/index = text2num(href_list["vend"])
var/amount = text2num(href_list["amount"])
var/K = item_quants[index]
@@ -281,10 +308,10 @@
var/i = amount
for(var/obj/O in contents)
- if (O.name == K)
+ if(O.name == K)
O.loc = loc
i--
- if (i <= 0)
+ if(i <= 0)
return 1
return 1
@@ -319,9 +346,9 @@
*************************/
/obj/machinery/smartfridge/secure/Topic(href, href_list)
- if(!ispowered) return 0
- if (usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf)))
- if (!allowed(usr) && !emagged && locked != -1 && href_list["vend"])
- usr << "\red Access denied."
+ if(stat & (NOPOWER|BROKEN)) return 0
+ if(usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf)))
+ if(!allowed(usr) && !emagged && locked != -1 && href_list["vend"])
+ usr << "Access denied."
return 0
return ..()
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 77fde8ef7e..ad433d12e2 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -250,7 +250,7 @@
if ( istype(W,/obj/item/clothing/mask/gas ) )
user << "This item does not fit."
return
- if ( istype(W,/obj/item/clothing/mask/cigarette ) )
+ if ( istype(W,/obj/item/clothing/mask/smokable/cigarette ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/head/syndicatefake ) )
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index dbfd0a9e61..b88847c6aa 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -144,7 +144,7 @@
/obj/effect/landmark/costume/elpresidente/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
- new /obj/item/clothing/mask/cigarette/cigar/havana(src.loc)
+ new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/jackboots(src.loc)
del(src)
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index f9f32bbeb1..5fe6016092 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -100,7 +100,7 @@ RSF
product = new /obj/item/weapon/storage/pill_bottle/dice()
used_energy = 200
if(6)
- product = new /obj/item/clothing/mask/cigarette()
+ product = new /obj/item/clothing/mask/smokable/cigarette()
used_energy = 10
user << "Dispensing [product ? product : "product"]..."
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 4d09a26bcf..90ba157260 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -16,6 +16,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/flame
var/lit = 0
+/proc/isflamesource(A)
+ if(istype(A, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = A
+ return (WT.isOn())
+ else if(istype(A, /obj/item/weapon/flame))
+ var/obj/item/weapon/flame/F = A
+ return (F.lit)
+ else if(istype(A, /obj/item/device/assembly/igniter))
+ return 1
+ return 0
+
///////////
//MATCHES//
///////////
@@ -58,85 +69,50 @@ CIGARETTE PACKETS ARE IN FANCY.DM
//////////////////
//FINE SMOKABLES//
//////////////////
-/obj/item/clothing/mask/cigarette
- name = "cigarette"
- desc = "A roll of tobacco and nicotine."
- icon_state = "cigoff"
- throw_speed = 0.5
- item_state = "cigoff"
- w_class = 1
+/obj/item/clothing/mask/smokable
+ name = "smokable item"
+ desc = "You're not sure what this is. You should probably ahelp it."
body_parts_covered = 0
- attack_verb = list("burnt", "singed")
var/lit = 0
- var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
- var/icon_off = "cigoff"
- var/type_butt = /obj/item/weapon/cigbutt
- var/lastHolder = null
- var/smoketime = 300
- var/chem_volume = 15
- body_parts_covered = 0
+ var/icon_on
+ var/icon_off
+ var/type_butt = null
+ var/chem_volume = 0
+ var/smoketime = 0
-/obj/item/clothing/mask/cigarette/New()
+/obj/item/clothing/mask/smokable/New()
..()
flags |= NOREACT // so it doesn't react until you light it
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
-/obj/item/clothing/mask/cigarette/Del()
+/obj/item/clothing/mask/smokable/Del()
..()
del(reagents)
-/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.isOn())//Badasses dont get blinded while lighting their cig with a welding tool
- light("[user] casually lights the [name] with [W].")
+/obj/item/clothing/mask/smokable/process()
+ var/turf/location = get_turf(src)
+ smoketime--
+ if(smoketime < 1)
+ die()
+ return
+ if(location)
+ location.hotspot_expose(700, 5)
+ if(reagents && reagents.total_volume) // check if it has any reagents at all
+ if(iscarbon(loc))
+ var/mob/living/carbon/C = loc
+ if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob
+ if(istype(C, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = C
+ if(H.species.flags & IS_SYNTHETIC)
+ return
- else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
- var/obj/item/weapon/flame/lighter/zippo/Z = W
- if(Z.lit)
- light("With a flick of their wrist, [user] lights their [name] with their [W].")
-
- else if(istype(W, /obj/item/weapon/flame/lighter))
- var/obj/item/weapon/flame/lighter/L = W
- if(L.lit)
- light("[user] manages to light their [name] with [W].")
-
- else if(istype(W, /obj/item/weapon/flame/match))
- var/obj/item/weapon/flame/match/M = W
- if(M.lit)
- light("[user] lights their [name] with their [W].")
-
- else if(istype(W, /obj/item/weapon/melee/energy/sword))
- var/obj/item/weapon/melee/energy/sword/S = W
- if(S.active)
- light("[user] swings their [W], barely missing their nose. They light their [name] in the process.")
-
- else if(istype(W, /obj/item/device/assembly/igniter))
- light("[user] fiddles with [W], and manages to light their [name].")
-
- //can't think of any other way to update the overlays :<
- user.update_inv_wear_mask(0)
- user.update_inv_l_hand(0)
- user.update_inv_r_hand(1)
+ reagents.trans_to(C, REAGENTS_METABOLISM, 0.2) // Most of it is not inhaled... balance reasons.
+ reagents.reaction(C)
+ else // else just remove some of the reagents
+ reagents.remove_any(REAGENTS_METABOLISM)
return
-
-/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity)
- ..()
- if(!proximity) return
- if(istype(glass)) //you can dip cigarettes into beakers
- var/transfered = glass.reagents.trans_to(src, chem_volume)
- if(transfered) //if reagents were transfered, show the message
- user << "You dip \the [src] into \the [glass]."
- else //if not, either the beaker was empty, or the cigarette was full
- if(!glass.reagents.total_volume)
- user << "[glass] is empty."
- else
- user << "[src] is full."
-
-
-/obj/item/clothing/mask/cigarette/proc/light(var/flavor_text = "[usr] lights the [name].")
+/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].")
if(!src.lit)
src.lit = 1
damtype = "fire"
@@ -156,58 +132,113 @@ CIGARETTE PACKETS ARE IN FANCY.DM
reagents.handle_reactions()
icon_state = icon_on
item_state = icon_on
+ if(ismob(loc))
+ var/mob/living/M = loc
+ M.update_inv_wear_mask(0)
var/turf/T = get_turf(src)
T.visible_message(flavor_text)
processing_objects.Add(src)
+/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0)
+ var/turf/T = get_turf(src)
+ if (type_butt)
+ var/obj/item/butt = new type_butt(T)
+ transfer_fingerprints_to(butt)
+ if(ismob(loc))
+ var/mob/living/M = loc
+ if (!nomessage)
+ M << "Your [name] goes out."
+ M.u_equip(src) //un-equip it so the overlays can update
+ M.update_inv_wear_mask(0)
+ processing_objects.Remove(src)
+ del(src)
+ else
+ new /obj/effect/decal/cleanable/ash(T)
+ if(ismob(loc))
+ var/mob/living/M = loc
+ if (!nomessage)
+ M << "Your [name] goes out, and you empty the ash."
+ lit = 0
+ icon_state = icon_off
+ item_state = icon_off
+ M.update_inv_wear_mask(0)
+ processing_objects.Remove(src)
-/obj/item/clothing/mask/cigarette/process()
- var/turf/location = get_turf(src)
- smoketime--
- if(smoketime < 1)
- die()
- return
- if(location)
- location.hotspot_expose(700, 5)
- if(reagents && reagents.total_volume) // check if it has any reagents at all
- if(iscarbon(loc) && (src == loc:wear_mask)) // if it's in the human/monkey mouth, transfer reagents to the mob
- if(istype(loc, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = loc
- if(H.species.flags & IS_SYNTHETIC)
- return
- var/mob/living/carbon/C = loc
+/obj/item/clothing/mask/smokable/cigarette
+ name = "cigarette"
+ desc = "A roll of tobacco and nicotine."
+ icon_state = "cigoff"
+ throw_speed = 0.5
+ item_state = "cigoff"
+ w_class = 1
+ 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/weapon/cigbutt
+ chem_volume = 15
+ smoketime = 300
- if(prob(15)) // so it's not an instarape in case of acid
- reagents.reaction(C, INGEST)
- reagents.trans_to(C, REAGENTS_METABOLISM)
- else // else just remove some of the reagents
- reagents.remove_any(REAGENTS_METABOLISM)
+/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if (isflamesource(W))
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())//Badasses dont get blinded while lighting their cig with a welding tool
+ light("[user] casually lights the [name] with [W].")
+
+ else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
+ var/obj/item/weapon/flame/lighter/zippo/Z = W
+ if(Z.lit)
+ light("With a flick of their wrist, [user] lights their [name] with their [W].")
+
+ else if(istype(W, /obj/item/weapon/flame/lighter))
+ var/obj/item/weapon/flame/lighter/L = W
+ if(L.lit)
+ light("[user] manages to light their [name] with [W].")
+
+ else if(istype(W, /obj/item/weapon/flame/match))
+ var/obj/item/weapon/flame/match/M = W
+ if(M.lit)
+ light("[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].")
+
+ else if(istype(W, /obj/item/weapon/melee/energy/sword))
+ var/obj/item/weapon/melee/energy/sword/S = W
+ if(S.active)
+ light("[user] swings their [W], barely missing their nose. They light their [name] in the process.")
+
+ //can't think of any other way to update the overlays :<
+ user.update_inv_wear_mask(0)
+ user.update_inv_l_hand(0)
+ user.update_inv_r_hand(1)
return
+/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity)
+ ..()
+ if(!proximity)
+ return
+ if(istype(glass)) //you can dip cigarettes into beakers
+ var/transfered = glass.reagents.trans_to(src, chem_volume)
+ if(transfered) //if reagents were transfered, show the message
+ user << "You dip \the [src] into \the [glass]."
+ else //if not, either the beaker was empty, or the cigarette was full
+ if(!glass.reagents.total_volume)
+ user << "[glass] is empty."
+ else
+ user << "[src] is full."
-/obj/item/clothing/mask/cigarette/attack_self(mob/user as mob)
+/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.")
- die()
+ die(1)
return ..()
-
-/obj/item/clothing/mask/cigarette/proc/die()
- var/turf/T = get_turf(src)
- var/obj/item/butt = new type_butt(T)
- transfer_fingerprints_to(butt)
- if(ismob(loc))
- var/mob/living/M = loc
- M << "Your [name] goes out."
- M.u_equip(src) //un-equip it so the overlays can update
- M.update_inv_wear_mask(0)
- processing_objects.Remove(src)
- del(src)
-
////////////
// CIGARS //
////////////
-/obj/item/clothing/mask/cigarette/cigar
+/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"
@@ -219,14 +250,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
smoketime = 1500
chem_volume = 20
-/obj/item/clothing/mask/cigarette/cigar/cohiba
+/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
name = "\improper Cohiba Robusto cigar"
desc = "There's little more you could want from a cigar."
icon_state = "cigar2off"
icon_on = "cigar2on"
icon_off = "cigar2off"
-/obj/item/clothing/mask/cigarette/cigar/havana
+/obj/item/clothing/mask/smokable/cigarette/cigar/havana
name = "premium Havanian cigar"
desc = "A cigar fit for only the best of the best."
icon_state = "cigar2off"
@@ -254,50 +285,55 @@ CIGARETTE PACKETS ARE IN FANCY.DM
desc = "A manky old cigar butt."
icon_state = "cigarbutt"
+/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(isflamesource(W))
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())
+ light("[user] insults [name] by lighting it with [W].")
-/obj/item/clothing/mask/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.isOn())
- light("[user] insults [name] by lighting it with [W].")
+ else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
+ var/obj/item/weapon/flame/lighter/zippo/Z = W
+ if(Z.lit)
+ light("With a flick of their wrist, [user] lights their [name] with their [W].")
- else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
- var/obj/item/weapon/flame/lighter/zippo/Z = W
- if(Z.lit)
- light("With a flick of their wrist, [user] lights their [name] with their [W].")
+ else if(istype(W, /obj/item/weapon/flame/lighter))
+ var/obj/item/weapon/flame/lighter/L = W
+ if(L.lit)
+ light("[user] manages to offend their [name] by lighting it with [W].")
- else if(istype(W, /obj/item/weapon/flame/lighter))
- var/obj/item/weapon/flame/lighter/L = W
- if(L.lit)
- light("[user] manages to offend their [name] by lighting it with [W].")
+ else if(istype(W, /obj/item/weapon/flame/match))
+ var/obj/item/weapon/flame/match/M = W
+ if(M.lit)
+ light("[user] lights their [name] with their [W].")
- else if(istype(W, /obj/item/weapon/flame/match))
- var/obj/item/weapon/flame/match/M = W
- if(M.lit)
- light("[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.")
else if(istype(W, /obj/item/weapon/melee/energy/sword))
var/obj/item/weapon/melee/energy/sword/S = W
if(S.active)
light("[user] swings their [W], barely missing their nose. They light their [name] in the process.")
- 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.")
-
/////////////////
//SMOKING PIPES//
/////////////////
-/obj/item/clothing/mask/cigarette/pipe
+/obj/item/clothing/mask/smokable/pipe
name = "smoking pipe"
desc = "A pipe, for smoking. Probably made of meershaum or something."
icon_state = "pipeoff"
item_state = "pipeoff"
icon_on = "pipeon" //Note - these are in masks.dmi
icon_off = "pipeoff"
- smoketime = 100
+ smoketime = 0
+ chem_volume = 50
-/obj/item/clothing/mask/cigarette/pipe/light(var/flavor_text = "[usr] lights the [name].")
- if(!src.lit)
+/obj/item/clothing/mask/smokable/pipe/New()
+ ..()
+ name = "empty [initial(name)]"
+
+/obj/item/clothing/mask/smokable/pipe/light(var/flavor_text = "[usr] lights the [name].")
+ if(!src.lit && src.smoketime)
src.lit = 1
damtype = "fire"
icon_state = icon_on
@@ -306,71 +342,67 @@ CIGARETTE PACKETS ARE IN FANCY.DM
T.visible_message(flavor_text)
processing_objects.Add(src)
-/obj/item/clothing/mask/cigarette/pipe/process()
- var/turf/location = get_turf(src)
- smoketime--
- if(smoketime < 1)
- new /obj/effect/decal/cleanable/ash(location)
- if(ismob(loc))
- var/mob/living/M = loc
- M << "Your [name] goes out, and you empty the ash."
- lit = 0
- icon_state = icon_off
- item_state = icon_off
- M.update_inv_wear_mask(0)
- processing_objects.Remove(src)
- return
- if(location)
- location.hotspot_expose(700, 5)
- return
-
-/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user as mob) //Refills the pipe. Can be changed to an attackby later, if loose tobacco is added to vendors or something.
+/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user as mob)
if(lit == 1)
- user.visible_message("[user] puts out [src].")
+ user.visible_message("[user] puts out [src].", "You put out [src].")
lit = 0
icon_state = icon_off
item_state = icon_off
processing_objects.Remove(src)
- return
- if(smoketime <= 0)
- user << "You refill the pipe with tobacco."
- smoketime = initial(smoketime)
- return
+ else if (smoketime)
+ var/turf/location = get_turf(user)
+ user.visible_message("[user] empties out [src].", "You empty out [src].")
+ new /obj/effect/decal/cleanable/ash(location)
+ smoketime = 0
+ reagents.clear_reagents()
+ name = "empty [initial(name)]"
-/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.isOn())//
- light("[user] recklessly lights [name] with [W].")
+/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(isflamesource(W))
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())
+ light("[user] recklessly lights [name] with [W].")
- else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
- var/obj/item/weapon/flame/lighter/zippo/Z = W
- if(Z.lit)
- light("With much care, [user] lights their [name] with their [W].")
+ else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
+ var/obj/item/weapon/flame/lighter/zippo/Z = W
+ if(Z.lit)
+ light("With much care, [user] lights their [name] with their [W].")
- else if(istype(W, /obj/item/weapon/flame/lighter))
- var/obj/item/weapon/flame/lighter/L = W
- if(L.lit)
- light("[user] manages to light their [name] with [W].")
+ else if(istype(W, /obj/item/weapon/flame/lighter))
+ var/obj/item/weapon/flame/lighter/L = W
+ if(L.lit)
+ light("[user] manages to light their [name] with [W].")
- else if(istype(W, /obj/item/weapon/flame/match))
- var/obj/item/weapon/flame/match/M = W
- if(M.lit)
- light("[user] lights their [name] with their [W].")
+ else if(istype(W, /obj/item/weapon/flame/match))
+ var/obj/item/weapon/flame/match/M = W
+ if(M.lit)
+ light("[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.")
+ 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.")
+ else if (istype(W, /obj/item/weapon/reagent_containers/food/snacks))
+ var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W
+ if (!G.dry)
+ user << "[G] must be dried before you stuff it into [src]."
+ return
+ if (smoketime)
+ user << "[src] is already packed."
+ return
+ smoketime = 1000
+ if(G.reagents)
+ G.reagents.trans_to(src, G.reagents.total_volume)
+ name = "[G.name]-packed [initial(name)]"
+ del(G)
-/obj/item/clothing/mask/cigarette/pipe/cobpipe
+/obj/item/clothing/mask/smokable/pipe/cobpipe
name = "corn cob pipe"
desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters."
icon_state = "cobpipeoff"
item_state = "cobpipeoff"
icon_on = "cobpipeon" //Note - these are in masks.dmi
icon_off = "cobpipeoff"
- smoketime = 400
-
-
+ chem_volume = 35
/////////
//ZIPPO//
@@ -445,8 +477,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(!istype(M, /mob))
return
- if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && lit)
- var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
+ if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == "mouth" && lit)
+ var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
if(M == user)
cig.attackby(src, user)
else
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 64d8e89bb7..1e7bcce223 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -27,7 +27,7 @@
/obj/item/weapon/storage/fancy/examine(mob/user)
if(!..(user, 1))
return
-
+
if(contents.len <= 0)
user << "There are no [src.icon_type]s left in the box."
else if(contents.len == 1)
@@ -143,7 +143,7 @@
..()
flags |= NOREACT
for(var/i = 1 to storage_slots)
- new /obj/item/clothing/mask/cigarette(src)
+ new /obj/item/clothing/mask/smokable/cigarette(src)
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
/obj/item/weapon/storage/fancy/cigarettes/Del()
@@ -156,7 +156,7 @@
return
/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location)
- var/obj/item/clothing/mask/cigarette/C = W
+ var/obj/item/clothing/mask/smokable/cigarette/C = W
if(!istype(C)) return // what
reagents.trans_to(C, (reagents.total_volume/contents.len))
..()
@@ -166,7 +166,7 @@
return
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
- var/obj/item/clothing/mask/cigarette/W = new /obj/item/clothing/mask/cigarette(user)
+ var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user)
reagents.trans_to(W, (reagents.total_volume/contents.len))
user.equip_to_slot_if_possible(W, slot_wear_mask)
reagents.maximum_volume = 15 * contents.len
@@ -200,7 +200,7 @@
..()
flags |= NOREACT
for(var/i = 1 to storage_slots)
- new /obj/item/clothing/mask/cigarette/cigar(src)
+ new /obj/item/clothing/mask/smokable/cigarette/cigar(src)
create_reagents(15 * storage_slots)
/obj/item/weapon/storage/fancy/cigar/Del()
@@ -212,7 +212,7 @@
return
/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location)
- var/obj/item/clothing/mask/cigarette/cigar/C = W
+ var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W
if(!istype(C)) return
reagents.trans_to(C, (reagents.total_volume/contents.len))
..()
@@ -222,7 +222,7 @@
return
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
- var/obj/item/clothing/mask/cigarette/cigar/W = new /obj/item/clothing/mask/cigarette/cigar(user)
+ var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user)
reagents.trans_to(W, (reagents.total_volume/contents.len))
user.equip_to_slot_if_possible(W, slot_wear_mask)
reagents.maximum_volume = 15 * contents.len
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 0f088f9897..a33889d7d8 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -834,7 +834,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
+ M.equip_to_slot_or_del(new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/M1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(M), slot_r_store)
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 0be6799a43..11522902a2 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -223,7 +223,7 @@
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
corpseradio = /obj/item/device/radio/headset/heads/captain
corpseglasses = /obj/item/clothing/glasses/eyepatch
- corpsemask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
corpsehelmet = /obj/item/clothing/head/centhat
corpsegloves = /obj/item/clothing/gloves/swat
corpseshoes = /obj/item/clothing/shoes/swat
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index d82807f738..8d5d85df10 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -183,6 +183,6 @@
..()
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual))
user << "You use [W] to fashion a pipe out of the corn cob!"
- new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
+ new /obj/item/clothing/mask/smokable/pipe/cobpipe (user.loc)
del(src)
return
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index cc053f219d..c4fd50c114 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -789,7 +789,7 @@ proc/get_damage_icon_part(damage_state, body_part)
else
standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]")
- if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA )
+ if( !istype(wear_mask, /obj/item/clothing/mask/smokable/cigarette) && wear_mask.blood_DNA )
var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood")
bloodsies.color = wear_mask.blood_color
standing.overlays += bloodsies
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 11fd71e620..1cfe480ff9 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -21,7 +21,7 @@
user << "\red [target] is full."
return
- if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
+ if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
user << "\red You cannot directly fill this object."
return
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 7aaad7a678..197fcf37fc 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -9,6 +9,8 @@
var/trash = null
var/slice_path
var/slices_num
+ var/dried_type = null
+ var/dry = 0
center_of_mass = list("x"=15, "y"=15)
w_class = 2
diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
index d570f13861..3a4d52c0df 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
@@ -17,10 +17,14 @@
..()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
+ dried_type = -1
/obj/item/weapon/reagent_containers/food/snacks/grown/New()
..()
+ if (dried_type == -1)
+ dried_type = src.type
+
//Handle some post-spawn var stuff.
spawn(1)
// Fill the object up with the appropriate reagents.
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 744e212e78..3d4b2b3cfb 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -130,7 +130,7 @@
if(istype(target, /obj/item/weapon/implantcase/chem))
return
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
+ if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
user << "\red You cannot directly fill this object."
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm
index 0fa9f4863a..81170afc39 100644
--- a/code/modules/surgery/eye.dm
+++ b/code/modules/surgery/eye.dm
@@ -113,7 +113,7 @@
/datum/surgery_step/eye/cauterize
allowed_tools = list(
/obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/cigarette = 75, \
+ /obj/item/clothing/mask/smokable/cigarette = 75, \
/obj/item/weapon/flame/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index 50fb64990b..b5b22659f4 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -103,7 +103,7 @@
/datum/surgery_step/face/cauterize
allowed_tools = list(
/obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/cigarette = 75, \
+ /obj/item/clothing/mask/smokable/cigarette = 75, \
/obj/item/weapon/flame/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 238657c28d..4e8c4150ae 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -239,7 +239,7 @@
/datum/surgery_step/generic/cauterize
allowed_tools = list(
/obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/cigarette = 75, \
+ /obj/item/clothing/mask/smokable/cigarette = 75, \
/obj/item/weapon/flame/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm
index 76ad0b6201..85a56a754e 100644
--- a/code/modules/surgery/headreattach.dm
+++ b/code/modules/surgery/headreattach.dm
@@ -119,7 +119,7 @@
/datum/surgery_step/head/prepare
allowed_tools = list(
/obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/cigarette = 75, \
+ /obj/item/clothing/mask/smokable/cigarette = 75, \
/obj/item/weapon/flame/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 32546da143..7218c302d0 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -70,7 +70,7 @@
priority = 2
allowed_tools = list(
/obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/cigarette = 75, \
+ /obj/item/clothing/mask/smokable/cigarette = 75, \
/obj/item/weapon/flame/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm
index c1328227ac..7e768bfa06 100644
--- a/code/modules/surgery/robolimbs.dm
+++ b/code/modules/surgery/robolimbs.dm
@@ -93,7 +93,7 @@
/datum/surgery_step/limb/prepare
allowed_tools = list(
/obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/cigarette = 75, \
+ /obj/item/clothing/mask/smokable/cigarette = 75, \
/obj/item/weapon/flame/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index a8e83d5c20..1eac9b7512 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -3918,7 +3918,7 @@
"bxr" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
"bxs" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/maintenance/substation/command)
"bxt" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/machinery/camera{c_tag = "Captain's Quarters"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
-"bxu" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/storage/box/matches,/obj/item/clothing/mask/cigarette/cigar,/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bxu" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/storage/box/matches,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bxv" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Shower"; req_access_txt = "0"},/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain)
"bxw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central_two)
"bxx" = (/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 1; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
@@ -5686,7 +5686,7 @@
"cfr" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/research_starboard)
"cfs" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/research_starboard)
"cft" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
-"cfu" = (/obj/item/clothing/mask/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area)
+"cfu" = (/obj/item/clothing/mask/smokable/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"cfv" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"cfw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/construction)
"cfx" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/construction)
@@ -7224,7 +7224,7 @@
"cKZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
"cLa" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_waste)
"cLb" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm
index 2903dec322..111ddb95ec 100644
--- a/maps/exodus-2.dmm
+++ b/maps/exodus-2.dmm
@@ -810,7 +810,7 @@
"pD" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pE" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pF" = (/turf/unsimulated/wall,/area/centcom/living)
-"pG" = (/obj/machinery/vending/cigarette{contraband = newlist(); premium = newlist(); prices = list(/obj/item/weapon/storage/fancy/cigarettes = 15, /obj/item/weapon/storage/box/matches = 1, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/cigarette/cigar/havana = 20); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"pG" = (/obj/machinery/vending/cigarette{contraband = newlist(); premium = newlist(); prices = list(/obj/item/weapon/storage/fancy/cigarettes = 15, /obj/item/weapon/storage/box/matches = 1, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 20); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"pH" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/flasher_button{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0; tag = "permflash"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"pI" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"pJ" = (/obj/structure/table,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1312,7 +1312,7 @@
"zl" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"zm" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"zn" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_centcom_dock_door"; locked = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom)
-"zo" = (/obj/structure/table/woodentable{dir = 9},/obj/item/weapon/reagent_containers/food/drinks/flask,/obj/item/clothing/mask/cigarette/cigar/havana,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"zo" = (/obj/structure/table/woodentable{dir = 9},/obj/item/weapon/reagent_containers/food/drinks/flask,/obj/item/clothing/mask/smokable/cigarette/cigar/havana,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
"zp" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
"zq" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
"zr" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)