mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-19 13:20:47 +01:00
cbc4151bfb
* Part 1 * WIP * The rest of these * More stuff * Whoops, did that wrong * typo * gweeen * This all works * SHOWER * Rads * awa * rad * Update life.dm * edits * Makes lvl 3 rads give you a warning. You should already know by this point, but this makes it EXTRA clear you're getting fucked * Update vorestation.dme * aaa * propagate * gwah * more fixes * AAA * Update radiation.dm * Update radiation.dm * mobs rads * rads * fix this * Update _reagents.dm * these * Get rid of these * rad * Update config.txt * fixed * Update radiation_effects.dm
1150 lines
41 KiB
Plaintext
1150 lines
41 KiB
Plaintext
/*
|
|
CONTAINS:
|
|
MATCHES
|
|
CIGARETTES
|
|
CIGARS
|
|
SMOKING PIPES
|
|
CUSTOM CIGS
|
|
CHEAP LIGHTERS
|
|
ZIPPO
|
|
|
|
CIGARETTE PACKETS ARE IN FANCY.DM
|
|
*/
|
|
|
|
//For anything that can light stuff on fire
|
|
/obj/item/flame
|
|
var/lit = 0
|
|
|
|
/obj/item/flame/is_hot()
|
|
return lit
|
|
|
|
///////////
|
|
//MATCHES//
|
|
///////////
|
|
/obj/item/flame/match
|
|
name = "match"
|
|
desc = "A simple match stick, used for lighting fine smokables."
|
|
icon = 'icons/obj/cigarettes.dmi'
|
|
icon_state = "match_unlit"
|
|
var/burnt = 0
|
|
var/smoketime = 5
|
|
w_class = ITEMSIZE_TINY
|
|
origin_tech = list(TECH_MATERIAL = 1)
|
|
slot_flags = SLOT_EARS
|
|
attack_verb = list("burnt", "singed")
|
|
drop_sound = 'sound/items/drop/food.ogg'
|
|
pickup_sound = 'sound/items/pickup/food.ogg'
|
|
|
|
/obj/item/flame/match/process()
|
|
if(isliving(loc))
|
|
var/mob/living/M = loc
|
|
M.ignite_mob()
|
|
var/turf/location = get_turf(src)
|
|
smoketime--
|
|
if(smoketime < 1)
|
|
burn_out()
|
|
return
|
|
if(location)
|
|
location.hotspot_expose(700, 5)
|
|
return
|
|
|
|
/obj/item/flame/match/dropped(mob/user)
|
|
//If dropped, put ourselves out
|
|
//not before lighting up the turf we land on, though.
|
|
if(lit)
|
|
spawn(0)
|
|
var/turf/location = src.loc
|
|
if(istype(location))
|
|
location.hotspot_expose(700, 5)
|
|
burn_out()
|
|
return ..()
|
|
|
|
/obj/item/flame/match/proc/light(var/mob/user)
|
|
playsound(src, 'sound/items/cigs_lighters/matchstick_lit.ogg', 25, 0, -1)
|
|
lit = 1
|
|
damtype = "burn"
|
|
icon_state = "match_lit"
|
|
name = "burning match"
|
|
desc = "A match. This one is presently on fire."
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/flame/match/proc/burn_out()
|
|
lit = 0
|
|
burnt = 1
|
|
damtype = BRUTE
|
|
icon_state = "match_burnt"
|
|
item_state = "cigoff"
|
|
name = "burnt match"
|
|
desc = "A match. This one has seen better days."
|
|
STOP_PROCESSING(SSobj, src)
|
|
|
|
//////////////////
|
|
//FINE SMOKABLES//
|
|
//////////////////
|
|
/obj/item/clothing/mask/smokable
|
|
name = DEVELOPER_WARNING_NAME // "smokable item"
|
|
desc = "You're not sure what this is. You should probably ahelp it."
|
|
body_parts_covered = 0
|
|
var/lit = 0
|
|
var/icon_on
|
|
var/type_butt = null
|
|
var/chem_volume = 0
|
|
var/max_smoketime = 0 //Related to sprites
|
|
var/smoketime = 0
|
|
var/is_pipe = 0 //Prevents a runtime with pipes
|
|
var/matchmes = "USER lights NAME with FLAME"
|
|
var/lightermes = "USER lights NAME with FLAME"
|
|
var/zippomes = "USER lights NAME with FLAME"
|
|
var/weldermes = "USER lights NAME with FLAME"
|
|
var/ignitermes = "USER lights NAME with FLAME"
|
|
var/brand
|
|
blood_sprite_state = null //Can't bloody these
|
|
drop_sound = 'sound/items/cigs_lighters/cig_snuff.ogg'
|
|
|
|
/obj/item/clothing/mask/smokable/Initialize(mapload)
|
|
. = ..()
|
|
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
|
|
if(smoketime && !max_smoketime)
|
|
max_smoketime = smoketime
|
|
|
|
/obj/item/clothing/mask/smokable/proc/smoke(amount)
|
|
if(smoketime > max_smoketime)
|
|
smoketime = max_smoketime
|
|
smoketime -= amount
|
|
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
|
if(ishuman(loc))
|
|
var/mob/living/carbon/human/C = loc
|
|
if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob
|
|
reagents.trans_to_mob(C, amount, CHEM_INGEST, 1.5, can_dialysis = FALSE) // I don't predict significant balance issues by letting blunts actually WORK.
|
|
else // else just remove some of the reagents
|
|
reagents.remove_any(REM)
|
|
|
|
/obj/item/clothing/mask/smokable/process()
|
|
var/turf/location = get_turf(src)
|
|
smoke(1)
|
|
if(smoketime < 1)
|
|
die()
|
|
return
|
|
if(location)
|
|
location.hotspot_expose(700, 5)
|
|
|
|
/obj/item/clothing/mask/smokable/update_icon()
|
|
if(lit)
|
|
icon_state = "[initial(icon_state)]_on"
|
|
item_state = "[initial(item_state)]_on"
|
|
else if(smoketime < max_smoketime)
|
|
if(is_pipe)
|
|
icon_state = initial(icon_state)
|
|
item_state = initial(item_state)
|
|
else
|
|
icon_state = "[initial(icon_state)]_burnt"
|
|
item_state = "[initial(item_state)]_burnt"
|
|
if(ismob(loc))
|
|
var/mob/living/M = loc
|
|
M.update_inv_wear_mask(0)
|
|
M.update_inv_l_hand(0)
|
|
M.update_inv_r_hand(1)
|
|
..()
|
|
|
|
/obj/item/clothing/mask/smokable/examine(mob/user)
|
|
. = ..()
|
|
|
|
if(!is_pipe)
|
|
var/smoke_percent = round((smoketime / max_smoketime) * 100)
|
|
switch(smoke_percent)
|
|
if(90 to INFINITY)
|
|
. += "[src] is still fresh."
|
|
if(60 to 90)
|
|
. += "[src] has a good amount of burn time remaining."
|
|
if(30 to 60)
|
|
. += "[src] is about half finished."
|
|
if(10 to 30)
|
|
. += "[src] is starting to burn low."
|
|
else
|
|
. += "[src] is nearly burnt out!"
|
|
|
|
/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].")
|
|
if(!src.lit)
|
|
src.lit = 1
|
|
playsound(src, 'sound/items/cigs_lighters/cig_light.ogg', 75, 1, -1)
|
|
damtype = BURN
|
|
if(reagents.get_reagent_amount(REAGENT_ID_PHORON)) // the phoron explodes when exposed to fire
|
|
var/datum/effect/effect/system/reagents_explosion/e = new()
|
|
e.set_up(round(reagents.get_reagent_amount(REAGENT_ID_PHORON) / 2.5, 1), get_turf(src), 0, 0)
|
|
e.start()
|
|
qdel(src)
|
|
return
|
|
if(reagents.get_reagent_amount(REAGENT_ID_FUEL)) // the fuel explodes, too, but much less violently
|
|
var/datum/effect/effect/system/reagents_explosion/e = new()
|
|
e.set_up(round(reagents.get_reagent_amount(REAGENT_ID_FUEL) / 5, 1), get_turf(src), 0, 0)
|
|
e.start()
|
|
qdel(src)
|
|
return
|
|
flags &= ~NOREACT // allowing reagents to react after being lit
|
|
reagents.handle_reactions()
|
|
var/turf/T = get_turf(src)
|
|
T.visible_message(flavor_text)
|
|
update_icon()
|
|
set_light(2, 0.25, "#E38F46")
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0)
|
|
var/turf/T = get_turf(src)
|
|
set_light(0)
|
|
playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
|
|
STOP_PROCESSING(SSobj, src)
|
|
if (type_butt)
|
|
var/obj/item/butt = new type_butt(T)
|
|
transfer_fingerprints_to(butt)
|
|
if(brand)
|
|
butt.desc += " This one is \a [brand]."
|
|
if(ismob(loc))
|
|
var/mob/living/M = loc
|
|
if (!nomessage)
|
|
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)
|
|
qdel(src)
|
|
else
|
|
new /obj/effect/decal/cleanable/ash(T)
|
|
if(ismob(loc))
|
|
var/mob/living/M = loc
|
|
if (!nomessage)
|
|
to_chat(M, span_notice("Your [name] goes out, and you empty the ash."))
|
|
playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
|
|
lit = 0
|
|
icon_state = initial(icon_state)
|
|
item_state = initial(item_state)
|
|
M.update_inv_wear_mask(0)
|
|
smoketime = 0
|
|
reagents.clear_reagents()
|
|
name = "empty [initial(name)]"
|
|
|
|
/obj/item/clothing/mask/smokable/proc/quench()
|
|
lit = 0
|
|
STOP_PROCESSING(SSobj, src)
|
|
update_icon()
|
|
|
|
/obj/item/clothing/mask/smokable/attack(mob/living/carbon/human/H, mob/user, def_zone)
|
|
if(lit && H == user && istype(H))
|
|
var/obj/item/blocked = H.check_mouth_coverage()
|
|
if(blocked)
|
|
to_chat(H, span_warning("\The [blocked] is in the way!"))
|
|
return 1
|
|
to_chat(H, span_notice("You take a drag on your [name]."))
|
|
playsound(src, 'sound/items/cigs_lighters/inhale.ogg', 50, 0, -1)
|
|
smoke(5)
|
|
return 1
|
|
return ..()
|
|
|
|
/obj/item/clothing/mask/smokable/attackby(obj/item/W as obj, mob/user as mob)
|
|
..()
|
|
if(W.is_hot())
|
|
var/text = matchmes
|
|
if(istype(W, /obj/item/flame/match))
|
|
text = matchmes
|
|
else if(istype(W, /obj/item/flame/lighter/zippo))
|
|
text = zippomes
|
|
else if(istype(W, /obj/item/flame/lighter))
|
|
text = lightermes
|
|
else if(istype(W, /obj/item/weldingtool))
|
|
text = weldermes
|
|
else if(istype(W, /obj/item/assembly/igniter))
|
|
text = ignitermes
|
|
text = replacetext(text, "USER", "[user]")
|
|
text = replacetext(text, "NAME", "[name]")
|
|
text = replacetext(text, "FLAME", "[W.name]")
|
|
light(text)
|
|
|
|
/obj/item/clothing/mask/smokable/attack(var/mob/living/M, var/mob/living/user, def_zone)
|
|
if(istype(M) && M.on_fire)
|
|
user.do_attack_animation(M)
|
|
light(span_notice("[user] coldly lights the [name] with the burning body of [M]."))
|
|
return 1
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/clothing/mask/smokable/water_act(amount)
|
|
if(amount >= 5)
|
|
quench()
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette
|
|
name = "cigarette"
|
|
desc = "A roll of tobacco and nicotine."
|
|
icon_state = "cig"
|
|
item_state = "cig"
|
|
throw_speed = 0.5
|
|
w_class = ITEMSIZE_TINY
|
|
slot_flags = SLOT_EARS | SLOT_MASK
|
|
attack_verb = list("burnt", "singed")
|
|
type_butt = /obj/item/trash/cigbutt
|
|
chem_volume = 15
|
|
max_smoketime = 300
|
|
smoketime = 300
|
|
var/nicotine_amt = 2
|
|
matchmes = span_notice("USER lights their NAME with their FLAME.")
|
|
lightermes = span_notice("USER manages to light their NAME with FLAME.")
|
|
zippomes = span_rose("With a flick of their wrist, USER lights their NAME with their FLAME.")
|
|
weldermes = span_notice("USER casually lights the NAME with FLAME.")
|
|
ignitermes = span_notice("USER fiddles with FLAME, and manages to light their NAME.")
|
|
special_handling = TRUE
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/Initialize(mapload)
|
|
. = ..()
|
|
if(nicotine_amt)
|
|
reagents.add_reagent(REAGENT_ID_NICOTINE, nicotine_amt)
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/W as obj, mob/user as mob)
|
|
..()
|
|
|
|
if(istype(W, /obj/item/melee/energy/sword))
|
|
var/obj/item/melee/energy/sword/S = W
|
|
if(S.active)
|
|
light(span_warning("[user] swings their [W], barely missing their nose. They light their [name] in the process."))
|
|
|
|
return
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/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_obj(src, chem_volume)
|
|
if(transfered) //if reagents were transfered, show the message
|
|
to_chat(user, span_notice("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)
|
|
to_chat(user, span_notice("[glass] is empty."))
|
|
else
|
|
to_chat(user, span_notice("[src] is full."))
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(lit == 1)
|
|
if(user.a_intent == I_HURT)
|
|
user.visible_message(span_notice("[user] drops and treads on the lit [src], putting it out instantly."))
|
|
playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
|
|
die(1)
|
|
else
|
|
user.visible_message(span_notice("[user] puts out \the [src]."))
|
|
quench()
|
|
|
|
////////////
|
|
// CIGARS //
|
|
////////////
|
|
/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!"
|
|
description_fluff = "While the label does say that this is a 'premium cigar', it \
|
|
really cannot match other types of cigars on the market. Is it a quality \
|
|
cigarette? Perhaps. Was it hand-made with care? No."
|
|
icon_state = "cigar2"
|
|
type_butt = /obj/item/trash/cigbutt/cigarbutt
|
|
throw_speed = 0.5
|
|
item_state = "cigar"
|
|
max_smoketime = 1500
|
|
smoketime = 1500
|
|
chem_volume = 20
|
|
nicotine_amt = 4
|
|
matchmes = span_notice("USER lights their NAME with their FLAME.")
|
|
lightermes = span_notice("USER manages to offend their NAME by lighting it with FLAME.")
|
|
zippomes = span_rose("With a flick of their wrist, USER lights their NAME with their FLAME.")
|
|
weldermes = span_notice("USER insults NAME by lighting it with FLAME.")
|
|
ignitermes = span_notice("USER fiddles with FLAME, and manages to light their NAME with the power of science.")
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
|
|
name = "\improper Cohiba Robusto cigar"
|
|
desc = "There's little more you could want from a cigar."
|
|
description_fluff = "Cohiba has been a popular cigar company for centuries. \
|
|
They are still based out of Cuba and refuse to expand and therefore have a very \
|
|
limited quantity, making their cigars coveted all through known space. Robusto \
|
|
is one of their most popular shapes of cigars."
|
|
icon_state = "cigar2"
|
|
nicotine_amt = 7
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
|
name = "premium Havanian cigar"
|
|
desc = "Save these for the fancy-pantses at the next CentCom black tie reception. \
|
|
You can't blow the smoke from such majestic stogies in just anyone's face."
|
|
description_fluff = "'Havanian' is an umbrella term for any cigar made in the \
|
|
typical handmade style of Cuba. This particular cigar is from Gilthari's cigar \
|
|
manufacturers and produced galaxy-wide. While this way of making quality cigars \
|
|
has become slightly bastardized over the years, overall quality has remained \
|
|
relatively the same, even if there is a large quantity of 'Havanian' cigars."
|
|
icon_state = "cigar2"
|
|
max_smoketime = 7200
|
|
smoketime = 7200
|
|
chem_volume = 30
|
|
nicotine_amt = 10
|
|
|
|
/obj/item/trash/cigbutt
|
|
name = "cigarette butt"
|
|
desc = "A manky old cigarette butt."
|
|
icon = 'icons/inventory/face/item.dmi'
|
|
icon_state = "cigbutt"
|
|
randpixel = 10
|
|
w_class = ITEMSIZE_TINY
|
|
slot_flags = SLOT_EARS
|
|
throwforce = 1
|
|
|
|
/obj/item/trash/cigbutt/Initialize(mapload)
|
|
. = ..()
|
|
randpixel_xy()
|
|
transform = turn(transform,rand(0,360))
|
|
|
|
/obj/item/trash/cigbutt/cigarbutt
|
|
name = "cigar butt"
|
|
desc = "A manky old cigar butt."
|
|
icon_state = "cigarbutt"
|
|
|
|
/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)
|
|
|
|
/////////////////
|
|
//SMOKING PIPES//
|
|
/////////////////
|
|
/obj/item/clothing/mask/smokable/pipe
|
|
name = "smoking pipe"
|
|
desc = "A pipe, for smoking. Made of fine, stained cherry wood."
|
|
description_fluff = "ClassiCo Accessories and Haberdashers, originating out of Mars, \
|
|
claim to produce products 'for the modern gentlefolk'. Most of their items are high-end \
|
|
and expensive, but they pledge to back their prices up with quality, and usually do."
|
|
icon_state = "pipe"
|
|
item_state = "pipe"
|
|
smoketime = 0
|
|
chem_volume = 50
|
|
matchmes = span_notice("USER lights their NAME with their FLAME.")
|
|
lightermes = span_notice("USER manages to light their NAME with FLAME.")
|
|
zippomes = span_rose("With much care, USER lights their NAME with their FLAME.")
|
|
weldermes = span_notice("USER recklessly lights NAME with FLAME.")
|
|
ignitermes = span_notice("USER fiddles with FLAME, and manages to light their NAME with the power of science.")
|
|
is_pipe = 1
|
|
|
|
/obj/item/clothing/mask/smokable/pipe/Initialize(mapload)
|
|
. = ..()
|
|
name = "empty [initial(name)]"
|
|
|
|
/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(lit == 1)
|
|
if(user.a_intent == I_HURT)
|
|
user.visible_message(span_notice("[user] empties the lit [src] on the floor!."))
|
|
playsound(src, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
|
|
die(1)
|
|
else
|
|
user.visible_message(span_notice("[user] puts out \the [src]."))
|
|
quench()
|
|
|
|
/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/melee/energy/sword))
|
|
return
|
|
|
|
..()
|
|
|
|
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, span_notice("[G] must be dried before you stuff it into [src]."))
|
|
return
|
|
if (smoketime)
|
|
to_chat(user, span_notice("[src] is already packed."))
|
|
return
|
|
max_smoketime = 1000
|
|
smoketime = 1000
|
|
if(G.reagents)
|
|
G.reagents.trans_to_obj(src, G.reagents.total_volume)
|
|
name = "[G.name]-packed [initial(name)]"
|
|
qdel(G)
|
|
|
|
else if(istype(W, /obj/item/flame/lighter))
|
|
var/obj/item/flame/lighter/L = W
|
|
if(L.lit)
|
|
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(span_notice("[user] lights their [name] with their [W]."))
|
|
|
|
else if(istype(W, /obj/item/assembly/igniter))
|
|
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)
|
|
user.update_inv_r_hand(1)
|
|
|
|
/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 = "cobpipe"
|
|
item_state = "cobpipe"
|
|
chem_volume = 35
|
|
|
|
/obj/item/clothing/mask/smokable/pipe/bonepipe
|
|
name = "Europan bone pipe"
|
|
desc = "A smoking pipe made out of the bones of the Europan bone whale."
|
|
description_fluff = "While most commonly associated with bone charms, bones from various sea creatures on Europa are used in a \
|
|
variety of goods, such as this smoking pipe. While smoking in submarines is often an uncommon occurrence, due to a lack of \
|
|
available air or space, these pipes are a common sight in the many stations of Europa. Higher-quality pipes typically have \
|
|
scenes etched into their bones, and can tell the story of their owner's time on Europa."
|
|
icon_state = "bonepipe"
|
|
item_state = "bonepipe"
|
|
chem_volume = 30
|
|
|
|
///////////////
|
|
//CUSTOM CIGS//
|
|
///////////////
|
|
//and by custom cigs i mean craftable joints. smoke weed every day
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/joint
|
|
name = "joint"
|
|
desc = "A joint lovingly rolled and crafted with care. Blaze it."
|
|
icon_state = "joint"
|
|
max_smoketime = 400
|
|
smoketime = 400
|
|
chem_volume = 25
|
|
|
|
/obj/item/clothing/mask/smokable/cigarette/joint/blunt
|
|
name = "blunt"
|
|
desc = "A blunt lovingly rolled and crafted with care. Blaze it."
|
|
icon_state = "cigar"
|
|
max_smoketime = 500
|
|
smoketime = 500
|
|
nicotine_amt = 4
|
|
chem_volume = 45
|
|
|
|
/obj/item/reagent_containers/rollingpaper
|
|
name = "rolling paper"
|
|
desc = "A small, thin piece of easily flammable paper, commonly used for rolling and smoking various dried plants."
|
|
description_fluff = "The legalization of certain substances propelled the sale of rolling \
|
|
papers through the roof. Now almost every Trans-stellar produces a variety, often of questionable quality."
|
|
icon = 'icons/obj/cigarettes.dmi'
|
|
icon_state = "cig paper"
|
|
volume = 25
|
|
var/obj/item/clothing/mask/smokable/cigarette/crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint
|
|
|
|
/obj/item/reagent_containers/rollingpaper/blunt
|
|
name = "blunt wrap"
|
|
desc = "A small piece of easily flammable paper similar to that which encases cigars. It's made out of tobacco, bigger than a standard rolling paper, and will last longer."
|
|
icon_state = "blunt paper"
|
|
volume = 45
|
|
crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint/blunt
|
|
|
|
/obj/item/reagent_containers/rollingpaper/attackby(obj/item/W as obj, mob/user as mob)
|
|
if (istype(W, /obj/item/reagent_containers/food/snacks))
|
|
var/obj/item/reagent_containers/food/snacks/grown/G = W
|
|
if (!G.dry) //This prevents people from just stuffing cheeseburgers into their joint
|
|
to_chat(user, span_notice("[G.name] must be dried before you add it to [src]."))
|
|
return
|
|
if (G.reagents.total_volume + src.reagents.total_volume > src.reagents.maximum_volume) //Check that we don't have too much already in the paper before adding things
|
|
to_chat(user, span_warning("The [src] is too full to add [G.name]."))
|
|
return
|
|
if (src.reagents.total_volume == 0)
|
|
if (istype(src, /obj/item/reagent_containers/rollingpaper/blunt)) //update the icon if this is the first thing we're adding to the paper
|
|
src.icon_state = "blunt_full"
|
|
else
|
|
src.icon_state = "paper_full"
|
|
to_chat(user, span_notice("You add the [G.name] to the [src.name]."))
|
|
src.add_fingerprint(user)
|
|
if(G.reagents)
|
|
G.reagents.trans_to_obj(src, G.reagents.total_volume) //adds the reagents from the plant into the paper
|
|
user.drop_from_inventory(G)
|
|
qdel(G)
|
|
|
|
/obj/item/reagent_containers/rollingpaper/attack_self(mob/living/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(!reagents) //don't roll an empty joint
|
|
to_chat(user, span_warning("There is nothing in [src]. Add something to it first."))
|
|
return
|
|
var/obj/item/clothing/mask/smokable/cigarette/J = new crafted_type()
|
|
to_chat(user,span_notice("You roll the [src] into a blunt!"))
|
|
J.add_fingerprint(user)
|
|
if(reagents)
|
|
reagents.trans_to_obj(J, reagents.total_volume)
|
|
user.drop_from_inventory(src)
|
|
user.put_in_hands(J)
|
|
qdel(src)
|
|
|
|
/////////
|
|
//CHEAP//
|
|
/////////
|
|
/obj/item/flame/lighter
|
|
name = "cheap lighter"
|
|
desc = "A cheap-as-free lighter."
|
|
description_fluff = "The 'hand-made in Altair' sticker underneath is a charming way of \
|
|
saying 'Made with prison labour'. It's no wonder the company can sell these things so cheap."
|
|
icon = 'icons/obj/lighters.dmi'
|
|
icon_state = "lighter"
|
|
item_state = "lighter"
|
|
w_class = ITEMSIZE_TINY
|
|
throwforce = 4
|
|
slot_flags = SLOT_BELT
|
|
attack_verb = list("burnt", "singed")
|
|
var/base_state
|
|
/// Sounds
|
|
var/activation_sound = 'sound/items/lighter_on.ogg'
|
|
var/deactivation_sound = 'sound/items/lighter_off.ogg'
|
|
/// Color of the flame and how big the flame is (pulled from Welder code)
|
|
var/flame_color = "#FF9933"
|
|
var/flame_intensity = 2
|
|
/// Color List
|
|
var/random_color = FALSE
|
|
var/available_colors = list(COLOR_ASSEMBLY_BLACK,
|
|
COLOR_ASSEMBLY_BGRAY,
|
|
COLOR_ASSEMBLY_WHITE,
|
|
COLOR_ASSEMBLY_RED,
|
|
COLOR_ASSEMBLY_ORANGE,
|
|
COLOR_ASSEMBLY_BEIGE,
|
|
COLOR_ASSEMBLY_BROWN,
|
|
COLOR_ASSEMBLY_GOLD,
|
|
COLOR_ASSEMBLY_YELLOW,
|
|
COLOR_ASSEMBLY_GURKHA,
|
|
COLOR_ASSEMBLY_LGREEN,
|
|
COLOR_ASSEMBLY_GREEN,
|
|
COLOR_ASSEMBLY_LBLUE,
|
|
COLOR_ASSEMBLY_BLUE,
|
|
COLOR_ASSEMBLY_PURPLE,
|
|
COLOR_ASSEMBLY_HOT_PINK)
|
|
/// If we are a special variant (see: override attack_self)
|
|
var/special_variant = FALSE
|
|
/// Var used for detonator zippos
|
|
var/detonator_mode = 0
|
|
|
|
// TODO: Remove this path from POIs and loose maps (it's no longer needed)
|
|
/obj/item/flame/lighter/random
|
|
|
|
// Randomizes Cheap Lighters on Spawn
|
|
/obj/item/flame/lighter/Initialize(mapload)
|
|
. = ..()
|
|
var/image/I = image(icon, "lighter-[pick("trans","tall","matte")]")
|
|
I.color = pick(available_colors)
|
|
add_overlay(I)
|
|
|
|
/obj/item/flame/lighter/attack_self(mob/living/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(special_variant)
|
|
return FALSE
|
|
if(detonator_mode)
|
|
return FALSE
|
|
if(!lit)
|
|
lit = TRUE
|
|
icon_state = "lighteron"
|
|
playsound(src, activation_sound, 75, 1)
|
|
user.visible_message(span_notice("After a few attempts, [user] manages to light the [src]."))
|
|
|
|
set_light(2, 0.5, "#FF9933")
|
|
START_PROCESSING(SSobj, src)
|
|
update_icon()
|
|
else
|
|
lit = FALSE
|
|
icon_state = "lighter"
|
|
playsound(src, deactivation_sound, 75, 1)
|
|
user.visible_message(span_notice("[user] quietly shuts off the [src]."))
|
|
|
|
set_light(0)
|
|
STOP_PROCESSING(SSobj, src)
|
|
update_icon()
|
|
return
|
|
|
|
/obj/item/flame/lighter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
if(!istype(M, /mob))
|
|
return
|
|
|
|
if(lit == 1)
|
|
M.ignite_mob()
|
|
add_attack_logs(user,M,"Lit on fire with [src]")
|
|
|
|
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
|
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
|
if(M == user)
|
|
cig.attackby(src, user)
|
|
else
|
|
if(istype(src, /obj/item/flame/lighter/zippo))
|
|
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
|
else
|
|
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
|
else
|
|
..()
|
|
|
|
/obj/item/flame/lighter/process()
|
|
var/turf/location = get_turf(src)
|
|
if(location)
|
|
location.hotspot_expose(700, 5)
|
|
return
|
|
|
|
/////////
|
|
//ZIPPO//
|
|
/////////
|
|
/obj/item/flame/lighter/zippo
|
|
name = "\improper Zippo lighter"
|
|
desc = "The zippo."
|
|
description_fluff = "Still going after all these years."
|
|
icon_state = "zippo"
|
|
item_state = "zippo"
|
|
activation_sound = 'sound/items/zippo_on.ogg'
|
|
deactivation_sound = 'sound/items/zippo_off.ogg'
|
|
special_variant = TRUE
|
|
|
|
/obj/item/flame/lighter/zippo/Initialize(mapload)
|
|
. = ..()
|
|
cut_overlays() //Prevents the Cheap Lighter overlay from appearing on this
|
|
|
|
/obj/item/flame/lighter/zippo/attack_self(mob/living/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(detonator_mode)
|
|
return FALSE
|
|
if(!base_state)
|
|
base_state = icon_state
|
|
if(!lit)
|
|
lit = TRUE
|
|
icon_state = "[base_state]on"
|
|
item_state = "[base_state]on"
|
|
playsound(src, activation_sound, 75, 1)
|
|
user.visible_message(span_rose("Without even breaking stride, [user] flips open and lights [src] in one smooth movement."))
|
|
|
|
set_light(2, 0.5, "#FF9933")
|
|
START_PROCESSING(SSobj, src)
|
|
else
|
|
lit = FALSE
|
|
icon_state = "[base_state]"
|
|
item_state = "[base_state]"
|
|
playsound(src, deactivation_sound, 75, 1)
|
|
user.visible_message(span_rose("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing."))
|
|
|
|
set_light(0)
|
|
STOP_PROCESSING(SSobj, src)
|
|
return
|
|
|
|
//Here we add Zippo skins.
|
|
|
|
/obj/item/flame/lighter/zippo/black
|
|
name = "\improper holy Zippo lighter"
|
|
desc = "Only in regards to Christianity, that is."
|
|
icon_state = "blackzippo"
|
|
|
|
/obj/item/flame/lighter/zippo/blue
|
|
name = "\improper blue Zippo lighter"
|
|
icon_state = "bluezippo"
|
|
|
|
/obj/item/flame/lighter/zippo/engraved
|
|
name = "\improper engraved Zippo lighter"
|
|
icon_state = "engravedzippo"
|
|
item_state = "zippo"
|
|
|
|
/obj/item/flame/lighter/zippo/gold
|
|
name = "\improper golden Zippo lighter"
|
|
icon_state = "goldzippo"
|
|
|
|
/obj/item/flame/lighter/zippo/moff
|
|
name = "\improper moth Zippo lighter"
|
|
desc = "Too cute to be a Tymisian."
|
|
icon_state = "moffzippo"
|
|
|
|
/obj/item/flame/lighter/zippo/red
|
|
name = "\improper red Zippo lighter"
|
|
icon_state = "redzippo"
|
|
|
|
/obj/item/flame/lighter/zippo/ironic
|
|
name = "\improper ironic Zippo lighter"
|
|
desc = "What a quiant idea."
|
|
icon_state = "ironiczippo"
|
|
|
|
/obj/item/flame/lighter/zippo/capitalist
|
|
name = "\improper capitalist Zippo lighter"
|
|
desc = "Made of gold and obsidian, this is truly not worth however much you spent on it."
|
|
icon_state = "cappiezippo"
|
|
|
|
/obj/item/flame/lighter/zippo/communist
|
|
name = "\improper communist Zippo lighter"
|
|
desc = "All you need to spark a revolution."
|
|
icon_state = "commiezippo"
|
|
|
|
/obj/item/flame/lighter/zippo/royal
|
|
name = "\improper royal Zippo lighter"
|
|
desc = "An incredibly fancy lighter, gilded and covered in the color of royalty."
|
|
icon_state = "royalzippo"
|
|
|
|
/obj/item/flame/lighter/zippo/gonzo
|
|
name = "\improper Gonzo Zippo lighter"
|
|
desc = "A lighter with the iconic Gonzo fist painted on it."
|
|
icon_state = "gonzozippo"
|
|
|
|
/obj/item/flame/lighter/zippo/rainbow
|
|
name = "\improper rainbow Zippo lighter"
|
|
icon_state = "rainbowzippo"
|
|
|
|
/obj/item/flame/lighter/zippo/skull
|
|
name = "\improper badass Zippo lighter"
|
|
desc = "An absolutely badass zippo lighter. Just look at that skull!"
|
|
icon_state = "skullzippo"
|
|
|
|
/obj/item/flame/lighter/supermatter
|
|
name = "Hardlight Supermatter Zippo" // Base SM Lighter
|
|
desc = "State of the Art Supermatter Lighter."
|
|
description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!"
|
|
icon_state = "SMzippo"
|
|
item_state = "SMzippo"
|
|
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
|
deactivation_sound = 'sound/items/zippo_off.ogg'
|
|
special_variant = TRUE
|
|
///Special supermatter var used for attack_self chain logic.
|
|
var/special_supermatter = FALSE
|
|
|
|
/obj/item/flame/lighter/supermatter/syndismzippo
|
|
name = "Phoron Supermatter Zippo" // Syndicate SM Lighter
|
|
desc = "State of the Art Supermatter Lighter."
|
|
description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field."
|
|
icon_state = "SyndiSMzippo"
|
|
item_state = "SyndiSMzippo"
|
|
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
|
deactivation_sound = 'sound/items/zippo_off.ogg'
|
|
special_supermatter = TRUE
|
|
|
|
/obj/item/flame/lighter/supermatter/expsmzippo
|
|
name = "Experimental SM Lighter" // Dangerous WIP (admin/event only ATM)
|
|
desc = "State of the Art Supermatter Lighter"
|
|
description_fluff = "A unique take originating from the zippo design, a shard of supermatter placed within lead-lined walls. Cautious, VERY DANGEROUS do NOT touch!"
|
|
icon_state = "ExpSMzippo"
|
|
item_state = "ExpSMzippo"
|
|
activation_sound = 'sound/items/button-open.ogg'
|
|
deactivation_sound = 'sound/items/button-close.ogg'
|
|
special_supermatter = TRUE
|
|
|
|
// safe smzippo
|
|
/obj/item/flame/lighter/supermatter/attack_self(mob/living/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(special_supermatter)
|
|
return FALSE
|
|
if(!base_state)
|
|
base_state = icon_state
|
|
if(!lit)
|
|
lit = 1
|
|
icon_state = "[base_state]on"
|
|
item_state = "[base_state]on"
|
|
playsound(src, activation_sound, 75, 1)
|
|
if(prob(50))
|
|
user.visible_message(span_rose("[user] safely activates the [src] with a push of a button!"))
|
|
else
|
|
if(prob(95))
|
|
user.visible_message(span_notice("After a few attempts, [user] manages to excite the supermatter within the [src]."))
|
|
else // Just like the cheap lighter, this time you can shock/burn yourself a little on the hardlight shield
|
|
to_chat(user, span_warning("You hurt yourself on the shielding!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(1,SEARING,BP_L_HAND)
|
|
user.apply_damage(2,ELECTROCUTE,BP_L_HAND)
|
|
user.apply_damage(3,CLONE,BP_L_HAND)
|
|
user.apply_damage(4,ELECTROMAG,BP_L_HAND)
|
|
else
|
|
user.apply_damage(1,SEARING,BP_R_HAND)
|
|
user.apply_damage(2,ELECTROCUTE,BP_R_HAND)
|
|
user.apply_damage(3,CLONE,BP_R_HAND)
|
|
user.apply_damage(4,ELECTROMAG,BP_R_HAND)
|
|
user.visible_message(span_notice("After a few attempts, [user] manages to activate the [src], they however sting themselves on the shielding!"))
|
|
|
|
set_light(2)
|
|
START_PROCESSING(SSobj, src)
|
|
else
|
|
lit = 0
|
|
icon_state = "[base_state]"
|
|
item_state = "[base_state]"
|
|
playsound(src, deactivation_sound, 75, 1)
|
|
if(istype(src, /obj/item/flame/lighter/supermatter) )
|
|
user.visible_message(span_rose("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing."))
|
|
else
|
|
user.visible_message(span_notice("[user] quietly shuts the [src]."))
|
|
|
|
set_light(0)
|
|
STOP_PROCESSING(SSobj, src)
|
|
return
|
|
|
|
|
|
/obj/item/flame/lighter/supermatter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
if(!istype(M, /mob))
|
|
return
|
|
|
|
if(lit == 1)
|
|
M.ignite_mob()
|
|
add_attack_logs(user,M,"Lit on fire with [src]")
|
|
|
|
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
|
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
|
if(M == user)
|
|
cig.attackby(src, user)
|
|
else
|
|
if(istype(src, /obj/item/flame/lighter/supermatter))
|
|
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
|
else
|
|
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
|
else
|
|
..()
|
|
|
|
/obj/item/flame/lighter/supermatter/process()
|
|
var/turf/location = get_turf(src)
|
|
if(location)
|
|
location.hotspot_expose(700, 5)
|
|
return
|
|
|
|
// syndicate smzippo
|
|
/obj/item/flame/lighter/supermatter/syndismzippo/attack_self(mob/living/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(!base_state)
|
|
base_state = icon_state
|
|
if(!lit)
|
|
lit = 1
|
|
icon_state = "[base_state]on"
|
|
item_state = "[base_state]on"
|
|
playsound(src, activation_sound, 75, 1)
|
|
if(prob(50))
|
|
user.visible_message(span_rose("[user] safely activates the [src] with a push of a button!"))
|
|
else
|
|
if(prob(95))
|
|
user.visible_message(span_notice("After a few attempts, [user] manages to excite the supermatter within the [src]."))
|
|
else // Just like with the cheap lighter, but this time you can hurt yourself on the heated phoron field
|
|
to_chat(user, span_warning("You singe yourself on the phoron shielding the excited supermatter!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(30,HALLOSS,BP_L_HAND)
|
|
user.apply_effect(20,IRRADIATE)
|
|
user.apply_damage(5,BURN,BP_L_HAND)
|
|
user.apply_damage(5,ELECTROCUTE,BP_L_HAND)
|
|
else
|
|
user.apply_damage(30,HALLOSS,BP_R_HAND)
|
|
user.apply_effect(20,IRRADIATE)
|
|
user.apply_damage(5,BURN,BP_R_HAND)
|
|
user.apply_damage(5,ELECTROCUTE,BP_R_HAND)
|
|
user.visible_message(span_notice("After a few attempts, [user] manages to activate the [src], they however burn themselves with the heated phoron field!"))
|
|
|
|
set_light(2)
|
|
START_PROCESSING(SSobj, src)
|
|
else
|
|
lit = 0
|
|
icon_state = "[base_state]"
|
|
item_state = "[base_state]"
|
|
playsound(src, deactivation_sound, 75, 1)
|
|
if(istype(src, /obj/item/flame/lighter/supermatter/syndismzippo) )
|
|
user.visible_message(span_rose("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing."))
|
|
else
|
|
user.visible_message(span_notice("[user] quietly shuts the [src]."))
|
|
|
|
set_light(0)
|
|
STOP_PROCESSING(SSobj, src)
|
|
return
|
|
|
|
|
|
/obj/item/flame/lighter/supermatter/syndismzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
if(!istype(M, /mob))
|
|
return
|
|
|
|
if(lit == 1)
|
|
M.ignite_mob()
|
|
add_attack_logs(user,M,"Lit on fire with [src]")
|
|
|
|
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
|
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
|
if(M == user)
|
|
cig.attackby(src, user)
|
|
else
|
|
if(istype(src, /obj/item/flame/lighter/supermatter/syndismzippo))
|
|
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
|
else
|
|
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
|
else
|
|
..()
|
|
|
|
/obj/item/flame/lighter/process()
|
|
var/turf/location = get_turf(src)
|
|
if(location)
|
|
location.hotspot_expose(700, 5)
|
|
return
|
|
|
|
// Experimental smzippo
|
|
/obj/item/flame/lighter/supermatter/expsmzippo/attack_self(mob/living/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if (!base_state)
|
|
base_state = icon_state
|
|
if (!lit)
|
|
lit = 1
|
|
icon_state = "[base_state]on"
|
|
item_state = "[base_state]on"
|
|
playsound(src, activation_sound, 75, 1)
|
|
var/i = rand(1, 100)
|
|
switch(i)
|
|
if(1 to 22)
|
|
to_chat(user, span_rose("[user] safely reveals the supermatter shard within the [src]!"))
|
|
user.visible_message(span_rose("You safely revealed the supermatter shard within the [src]!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(1, IRRADIATE, BP_L_HAND)
|
|
else // Even using this safely will irradiate you a tiny tiny bit.
|
|
user.apply_damage(1, IRRADIATE, BP_R_HAND)
|
|
if(23 to 33)
|
|
to_chat(user, span_warning("[user]'s hand slipped and they brush against the supermatter within [src]!"))
|
|
user.visible_message(span_notice("You accidentally grazed your hand across the supermatter!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(10, IRRADIATE, BP_L_HAND)
|
|
user.apply_damage(20, BURN, BP_L_HAND)
|
|
user.apply_damage(20, ELECTROCUTE, BP_L_HAND)
|
|
user.apply_damage(50, AGONY, BP_L_HAND)
|
|
else // One of the outcomes will burn and shock you, the pain is the worst part of this one though.
|
|
user.apply_damage(10, IRRADIATE, BP_R_HAND)
|
|
user.apply_damage(20, BURN, BP_R_HAND)
|
|
user.apply_damage(20, ELECTROCUTE, BP_R_HAND)
|
|
user.apply_damage(50, AGONY, BP_R_HAND)
|
|
if(34 to 44)
|
|
to_chat(user, span_warning("[user] burned themselves on the [src]!"))
|
|
user.visible_message(span_notice("You accidentally burn yourself on the [src]!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(30, IRRADIATE, BP_L_HAND)
|
|
user.apply_damage(20, SEARING, BP_L_HAND)
|
|
user.apply_damage(15, BURN, BP_L_HAND)
|
|
else // One of the outcomes is pure burn and radiation.
|
|
user.apply_damage(30, IRRADIATE, BP_R_HAND)
|
|
user.apply_damage(20, SEARING, BP_R_HAND)
|
|
user.apply_damage(15, BURN, BP_R_HAND)
|
|
if(45 to 55)
|
|
to_chat(user, span_warning("[user] fumbled the [src] and the supermatter let out sparks!"))
|
|
user.visible_message(span_notice("You fumble the [src], letting the supermatter spark as the case opens!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(1, ELECTROCUTE, BP_L_HAND)
|
|
user.apply_damage(100, ELECTROMAG, BP_L_HAND)
|
|
else // This one is mostly dangerous to synthetics and it will EMP you. But otherwise it's safe.
|
|
user.apply_damage(1, ELECTROCUTE, BP_R_HAND)
|
|
user.apply_damage(100, ELECTROMAG, BP_R_HAND)
|
|
if(56 to 66)
|
|
to_chat(user, span_warning("[user] struggles to open their [src], but when they do they get burned by the extreme heat within!"))
|
|
user.visible_message(span_notice("You struggle to get the case to open, and when it does the heat that pours out of the [src] burns!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(1, IRRADIATE, BP_L_HAND)
|
|
user.apply_damage(1, BRUISE, BP_L_HAND)
|
|
user.apply_damage(200, BURN, BP_L_HAND)
|
|
user.drop_l_hand()
|
|
else // This will INSTA-DUST your hand that you're holding the item in, and then make you drop the lighter.
|
|
user.apply_damage(1, IRRADIATE, BP_R_HAND)
|
|
user.apply_damage(1, BRUISE, BP_R_HAND)
|
|
user.apply_damage(200, BURN, BP_R_HAND)
|
|
user.drop_r_hand()
|
|
if(67 to 77)
|
|
to_chat(user, span_warning("Ouch! While pushing on the release to open the [src], [user]'s finger slipped right as the case opened, pressing their finger firm against the supermatter!"))
|
|
user.visible_message(span_notice("You accidentally pushed your finger against the supermatter!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(50, HALLOSS, BP_L_HAND)
|
|
user.apply_damage(40, IRRADIATE, BP_L_HAND)
|
|
user.apply_damage(30, BURN, BP_L_HAND)
|
|
user.apply_damage(20, TOX, BP_L_HAND)
|
|
user.apply_damage(10, ELECTROCUTE, BP_L_HAND)
|
|
user.apply_effect(25, STUTTER)
|
|
user.apply_effect(15, SLUR)
|
|
user.apply_effect(5, STUN)
|
|
else // This one is VERY punishing, you get a ton of damage, a lot of pain, and a minor stun. Once the stun goes away you'll be stuttering for awhile as if in crit.
|
|
user.apply_damage(50, HALLOSS, BP_R_HAND)
|
|
user.apply_damage(40, IRRADIATE, BP_R_HAND)
|
|
user.apply_damage(30, BURN, BP_R_HAND)
|
|
user.apply_damage(20, TOX, BP_R_HAND)
|
|
user.apply_damage(10, ELECTROCUTE, BP_R_HAND)
|
|
user.apply_effect(25, STUTTER)
|
|
user.apply_effect(15, SLUR)
|
|
user.apply_effect(5, STUN)
|
|
if(78 to 88)
|
|
to_chat(user, span_notice("[user] managed to pinch themselves on the case of their [src]... it could have been worse."))
|
|
user.visible_message(span_notice("You manage to pinch yourself on the case!"))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(1, CLONE, BP_L_HAND)
|
|
user.apply_damage(1, HALLOSS, BP_L_HAND)
|
|
else // Aside from the base, this one isn't punishing outside of giving you genetic damage.
|
|
user.apply_damage(1, CLONE, BP_R_HAND)
|
|
user.apply_damage(1, HALLOSS, BP_R_HAND)
|
|
if(89 to 99)
|
|
to_chat(user, span_notice("[user] opened the [src] but forgot that you aren't supposed to look at supermatter!"))
|
|
user.visible_message(span_notice("You find yourself looking at the supermatter for longer than you should..."))
|
|
if (user.get_left_hand() == src)
|
|
user.apply_damage(15, HALLOSS, BP_L_HAND)
|
|
user.apply_effect(5, WEAKEN)
|
|
user.apply_damage(15, IRRADIATE, BP_L_HAND)
|
|
user.apply_effect(100, EYE_BLUR)
|
|
user.apply_effect(50, AGONY)
|
|
user.apply_damage(5, OXY)
|
|
user.eye_blurry = 10
|
|
else // This one just blinds and blurs your screen, but otherwise doesn't actually risk harming you. Even the oxy damage heals on its own.
|
|
user.apply_damage(15, HALLOSS, BP_R_HAND)
|
|
user.apply_effect(5, WEAKEN)
|
|
user.apply_damage(15, IRRADIATE, BP_L_HAND)
|
|
user.apply_effect(100, EYE_BLUR)
|
|
user.apply_effect(50, AGONY)
|
|
user.apply_damage(15, OXY)
|
|
user.eye_blurry = 10
|
|
if(100) // This is the part that makes it admin only for the moment, it spawns 500 rads from the carbon's position, and dusts the carbon instantly. It does also drop everything unlike the supermatter crystal though, so hopefully you won't lose any items if you fumble this badly!
|
|
to_chat(user, span_warning("OH NO! [user] almost dropped their live [src]! Thank goodness they caught it... by the glowing yellow crystal... oh."))
|
|
user.visible_message(span_danger("You almost dropped your [src], thank goodness you caught it! By the glowing crystal within. You find your ears filled with unearthly ringing and your last thought is \"Oh, fuck.\""))
|
|
user.drop_r_hand() // To ensure the lighter is dropped <3
|
|
user.drop_l_hand() // To ensure the lighter is dropped <3
|
|
for(var/obj/item/e in user)
|
|
user.drop_from_inventory(e)
|
|
log_and_message_admins("[user] dusted themselves and caused massive radiation with [src]!",user)
|
|
user.dust()
|
|
radiation_pulse(
|
|
src,
|
|
max_range = 12,
|
|
threshold = RAD_HEAVY_INSULATION,
|
|
chance = URANIUM_IRRADIATION_CHANCE * 2,
|
|
strength = 300
|
|
)
|
|
set_light(5)
|
|
START_PROCESSING(SSobj, src)
|
|
else
|
|
lit = 0
|
|
icon_state = "[base_state]"
|
|
item_state = "[base_state]"
|
|
playsound(src, deactivation_sound, 75, 1)
|
|
if (istype(src, /obj/item/flame/lighter/supermatter/expsmzippo))
|
|
user.visible_message(span_rose("You hear a quiet click, as [user] closes the [src]."))
|
|
else
|
|
user.visible_message(span_notice("[user] quietly shuts the [src]."))
|
|
|
|
set_light(0)
|
|
STOP_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/flame/lighter/supermatter/expsmzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
|
if (!istype(M, /mob))
|
|
return
|
|
|
|
if (lit == 1)
|
|
M.ignite_mob()
|
|
add_attack_logs(user, M, "Lit on fire with [src]")
|
|
|
|
if (istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
|
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
|
if (M == user)
|
|
cig.attackby(src, user)
|
|
else
|
|
if (istype(src, /obj/item/flame/lighter/supermatter/expsmzippo))
|
|
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
|
else
|
|
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
|
else
|
|
..()
|
|
|
|
/obj/item/flame/lighter/supermatter/expsmzippo/process()
|
|
var/turf/location = get_turf(src)
|
|
if (location)
|
|
location.hotspot_expose(700, 5)
|
|
return
|