diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm
index 303c6057962..6db5dd0997f 100644
--- a/code/game/objects/items/weapons/cigs.dm
+++ b/code/game/objects/items/weapons/cigs.dm
@@ -23,7 +23,7 @@ LIGHTERS ARE IN LIGHTERS.DM
w_class = WEIGHT_CLASS_TINY
body_parts_covered = null
attack_verb = null
- var/lit = 0
+ var/lit = FALSE
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
@@ -129,11 +129,10 @@ LIGHTERS ARE IN LIGHTERS.DM
if(!src.lit)
src.lit = 1
name = "lit [name]"
- if(!istype(src, /obj/item/clothing/mask/cigarette/pipe)) //can't burn people with pipes
- attack_verb = list("burnt", "singed")
- hitsound = 'sound/items/welder.ogg'
- damtype = "fire"
- force = 4
+ attack_verb = list("burnt", "singed")
+ hitsound = 'sound/items/welder.ogg'
+ damtype = "fire"
+ force = 4
if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0)
diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm
index f8e725fb04d..3f165060b5d 100644
--- a/code/game/objects/items/weapons/lighters.dm
+++ b/code/game/objects/items/weapons/lighters.dm
@@ -152,7 +152,8 @@
desc = "A simple match stick, used for lighting fine smokables."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "match_unlit"
- var/lit = 0
+ var/lit = FALSE
+ var/burnt = FALSE
var/smoketime = 5
w_class = WEIGHT_CLASS_TINY
origin_tech = "materials=1"
@@ -162,44 +163,63 @@
var/turf/location = get_turf(src)
smoketime--
if(smoketime < 1)
- lit = -1
- damtype = "brute"
- force = 0
- icon_state = "match_burnt"
- item_state = "cigoff"
- name = "burnt match"
- desc = "A match. This one has seen better days."
- attack_verb = null
- processing_objects.Remove(src)
- return
+ matchburnout()
if(location)
location.hotspot_expose(700, 5)
return
-/obj/item/weapon/match/dropped(mob/user)
- if(lit == 1)
- lit = -1
+/obj/item/match/fire_act()
+ matchignite()
+
+/obj/item/match/proc/matchignite()
+ if(!lit && !burnt)
+ lit = TRUE
+ icon_state = "match_lit"
+ damtype = "fire"
+ force = 3
+ hitsound = 'sound/items/welder.ogg'
+ item_state = "cigon"
+ name = "lit match"
+ desc = "A match. This one is lit."
+ attack_verb = list("burnt","singed")
+ processing_objects.Add(src)
+ update_icon()
+
+/obj/item/match/proc/matchburnout()
+ if(lit)
+ lit = FALSE
+ burnt = TRUE
damtype = "brute"
+ force = initial(force)
icon_state = "match_burnt"
item_state = "cigoff"
name = "burnt match"
desc = "A match. This one has seen better days."
- attack_verb = null
+ attack_verb = list("flicked")
processing_objects.Remove(src)
- return ..()
-/obj/item/weapon/match/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
+/obj/item/match/dropped(mob/user)
+ matchburnout()
+ . = ..()
+
+/obj/item/weapon/match/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!isliving(M))
return ..()
- if(lit == 1) M.IgniteMob()
- if(!istype(M, /mob))
- return ..()
-
- if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && lit == 1)
- var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
+ if(lit && M.IgniteMob())
+ message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
+ log_game("[key_name(user)] set [key_name(M)] on fire")
+ var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
+ if(lit && cig && user.a_intent == INTENT_HELP)
+ if(cig.lit)
+ to_chat(user, "[cig] is already lit.")
if(M == user)
cig.attackby(src, user)
else
- cig.light("[user] holds the [name] out for [M], and lights the [cig.name].")
+ cig.light("[user] holds [src] out for [M], and lights [cig].")
else
..()
+
+/obj/item/proc/help_light_cig(mob/living/M)
+ var/mask_item = M.get_item_by_slot(slot_wear_mask)
+ if(istype(mask_item, /obj/item/clothing/mask/cigarette))
+ return mask_item
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 2191e3cb499..23dbff92d33 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -645,18 +645,9 @@
new /obj/item/weapon/match(src)
/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/match/W, mob/user, params)
- if(istype(W, /obj/item/weapon/match) && W.lit == 0)
- W.lit = 1
- W.icon_state = "match_lit"
- W.damtype = "fire"
- W.force = 3
- W.item_state = "cigon"
- W.name = "lit match"
- W.desc = "A match. This one is lit."
- W.attack_verb = list("burnt","singed")
- processing_objects.Add(W)
+ if(istype(W, /obj/item/weapon/match) && !W.lit)
+ W.matchignite()
playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1)
- W.update_icon()
return
/obj/item/weapon/storage/box/autoinjectors