diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm
index d837af98739..8b871847b23 100644
--- a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm
@@ -10,6 +10,7 @@
var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null
var/update_cycle
+ burn_state = LAVA_PROOF
/obj/machinery/atmospherics/unary/heat_exchanger/update_icon()
if(node)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index f6ddb6a5a6a..ff0b5bf72fa 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -273,3 +273,9 @@
// Used by radios to indicate that they have sent a message via something other than subspace
#define RADIO_CONNECTION_FAIL 0
#define RADIO_CONNECTION_NON_SUBSPACE 1
+
+//Fire stuff, for burn_state
+#define LAVA_PROOF -2
+#define FIRE_PROOF -1
+#define FLAMMABLE 0
+#define ON_FIRE 1
\ No newline at end of file
diff --git a/code/controllers/Processes/fires.dm b/code/controllers/Processes/fires.dm
new file mode 100644
index 00000000000..4566143a906
--- /dev/null
+++ b/code/controllers/Processes/fires.dm
@@ -0,0 +1,23 @@
+var/global/datum/controller/process/fire/fire_master
+
+/datum/controller/process/fire
+ var/list/burning = list()
+
+/datum/controller/process/fire/setup()
+ name = "fire"
+ schedule_interval = 20 //every 2 seconds
+ fire_master = src
+ log_startup_progress("Fire process starting up.")
+
+/datum/controller/process/fire/statProcess()
+ ..()
+ stat(null, "[burning.len] burning objects")
+
+/datum/controller/process/fire/doWork()
+ for(var/obj/burningobj in burning)
+ if(burningobj.burn_state == ON_FIRE)
+ if(burningobj.burn_world_time < world.time)
+ burningobj.burn()
+ SCHECK
+ else
+ burning.Remove(burningobj)
\ No newline at end of file
diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm
index eba2aa895f4..b75cba1f858 100644
--- a/code/datums/spells/ethereal_jaunt.dm
+++ b/code/datums/spells/ethereal_jaunt.dm
@@ -98,6 +98,7 @@
var/canmove = 1
density = 0
anchored = 1
+ burn_state = LAVA_PROOF
/obj/effect/dummy/spell_jaunt/Destroy()
// Eject contents if deleted somehow
diff --git a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
index 5977f362bdc..73165079b6e 100644
--- a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
+++ b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
@@ -159,6 +159,7 @@
density = 0
anchored = 1
invisibility = 60
+ burn_state = LAVA_PROOF
/obj/effect/dummy/slaughter/relaymove(mob/user, direction)
forceMove(get_step(src,direction))
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index b7c1d7920e1..8b9cb6eb0e9 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -766,8 +766,8 @@ var/global/list/multiverse = list()
var/obj/item/link = null
var/cooldown_time = 30 //3s
var/cooldown = 0
-
-
+ burntime = 0
+ burn_state = FLAMMABLE
/obj/item/voodoo/attackby(obj/item/I as obj, mob/user as mob, params)
if(target && cooldown < world.time)
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index db4cb0271c0..bf4300351fa 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -182,6 +182,7 @@
item_state = "eshield0"
w_class = 3
origin_tech = "syndicate=6;combat=5"
+ burn_state = FLAMMABLE //Burnable (but the casing isn't)
var/adminlog = null
/obj/item/weapon/bombcore/ex_act(severity) //Little boom can chain a big boom
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index 386afc0710c..b34897764e2 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -8,6 +8,7 @@
deflect_chance = 25
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
max_temperature = 60000
+ burn_state = LAVA_PROOF
infra_luminosity = 3
var/zoom = 0
var/thrusters = 0
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index c4916306ac2..2a4f6adf189 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -68,6 +68,7 @@
initial_icon = "firefighter"
max_temperature = 65000
health = 250
+ burn_state = LAVA_PROOF
lights_power = 7
damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4)
max_equip = 5 // More armor, less tools
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index ada2399f20d..cead6e33ffd 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -49,6 +49,13 @@
M.throw_alert("buckled", /obj/screen/alert/restrained/buckled, new_master = src)
return 1
+/obj/buckle_mob(mob/living/M)
+ . = ..()
+ if(.)
+ if(burn_state == ON_FIRE) //Sets the mob on fire if you buckle them to a burning atom/movableect
+ M.adjust_fire_stacks(1)
+ M.IgniteMob()
+
/atom/movable/proc/unbuckle_mob()
if(buckled_mob && buckled_mob.buckled == src && buckled_mob.can_unbuckle(usr))
. = buckled_mob
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index 2aa7a997834..3c0a712a311 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -84,6 +84,10 @@
layer = 3
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1"
+ burntime = 1
+
+/obj/effect/decal/cleanable/cobweb/fire_act()
+ qdel(src)
/obj/effect/decal/cleanable/molten_item
name = "gooey grey mass"
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 878adf6688b..0d6bf3255a5 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -38,6 +38,7 @@
..()
/obj/effect/decal/cleanable/fire_act()
- reagents.chem_temp += 30
- reagents.handle_reactions()
+ if(reagents)
+ reagents.chem_temp += 30
+ reagents.handle_reactions()
..()
\ No newline at end of file
diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm
index 6658838a5d3..9c3dd867c74 100644
--- a/code/game/objects/effects/decals/contraband.dm
+++ b/code/game/objects/effects/decals/contraband.dm
@@ -18,6 +18,7 @@
var/serial_number = 0
var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor
var/subtype = 0
+ burn_state = FLAMMABLE
/obj/item/weapon/contraband/poster/New(turf/loc, given_serial = 0)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 111f7c4dc33..82412c8e883 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -192,6 +192,22 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
to_chat(user, "You try to move your [temp.name], but cannot!")
return 0
+ if(burn_state == ON_FIRE)
+ var/mob/living/carbon/human/H = user
+ if(istype(H))
+ if(H.gloves && (H.gloves.max_heat_protection_temperature > 360))
+ extinguish()
+ to_chat(user, "You put out the fire on [src].")
+ else
+ to_chat(user, "You burn your hand on [src]!")
+ var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
+ if(affecting && affecting.take_damage(0, 5)) // 5 burn damage
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ return
+ else
+ extinguish()
+
if(istype(src.loc, /obj/item/weapon/storage))
//If the item is in a storage item, take it out
var/obj/item/weapon/storage/S = src.loc
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index 9a46a843a56..f0c3ee84e98 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -1,81 +1,90 @@
/obj/item/candle
name = "red candle"
- desc = "a candle"
+ desc = "In Greek myth, Prometheus stole fire from the Gods and gave it to humankind. The jewelry he kept for himself."
icon = 'icons/obj/candle.dmi'
icon_state = "candle1"
item_state = "candle1"
w_class = 1
-
- light_color = "#E09D37"
-
var/wax = 200
var/lit = 0
- proc
- light(var/flavor_text = "\red [usr] lights the [name].")
+ var/infinite = 0
+ var/start_lit = 0
+ light_color = "#E09D37"
+
+/obj/item/candle/New()
+ ..()
+ if(start_lit)
+ // No visible message
+ light(show_message = 0)
+
+/obj/item/candle/update_icon()
+ var/i
+ if(wax>150)
+ i = 1
+ else if(wax>80)
+ i = 2
+ else i = 3
+ icon_state = "candle[i][lit ? "_lit" : ""]"
- update_icon()
- var/i
- if(wax>150)
- i = 1
- else if(wax>80)
- i = 2
- else i = 3
- icon_state = "candle[i][lit ? "_lit" : ""]"
+/obj/item/candle/attackby(obj/item/weapon/W, mob/user, params)
+ ..()
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn()) //Badasses dont get blinded by lighting their candle with a welding tool
+ light("[user] casually lights [src] with [WT], what a badass.")
+ else if(istype(W, /obj/item/weapon/lighter))
+ var/obj/item/weapon/lighter/L = W
+ if(L.lit)
+ light("After some fiddling, [user] manages to light [src] with [L].")
+ else if(istype(W, /obj/item/weapon/match))
+ var/obj/item/weapon/match/M = W
+ if(M.lit)
+ light("[user] lights [src] with [M]")
+ else if(istype(W, /obj/item/candle))
+ var/obj/item/candle/C = W
+ if(C.lit)
+ light("[user] tilts [C] and lights [src] with it.")
- attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- ..()
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.isOn()) //Badasses dont get blinded by lighting their candle with a welding tool
- light("\red [user] casually lights the [name] with [W], what a badass.")
- else if(istype(W, /obj/item/weapon/lighter))
- var/obj/item/weapon/lighter/L = W
- if(L.lit)
- light()
- else if(istype(W, /obj/item/weapon/match))
- var/obj/item/weapon/match/M = W
- if(M.lit)
- light()
- else if(istype(W, /obj/item/candle))
- var/obj/item/candle/C = W
- if(C.lit)
- light()
+/obj/item/candle/fire_act()
+ if(!lit)
+ light() //honk
-
- light(var/flavor_text = "\red [usr] lights the [name].")
- if(!src.lit)
- src.lit = 1
- //src.damtype = "fire"
- for(var/mob/O in viewers(usr, null))
- O.show_message(flavor_text, 1)
- set_light(CANDLE_LUM)
- processing_objects.Add(src)
-
-
- process()
- if(!lit)
- return
- wax--
- if(!wax)
- new/obj/item/trash/candle(src.loc)
- if(istype(src.loc, /mob))
- var/mob/M = src.loc
- M.unEquip(src, 1) //src is being deleted anyway
- qdel(src)
+/obj/item/candle/proc/light(show_message)
+ if(!lit)
+ lit = 1
+ if(show_message)
+ usr.visible_message(show_message)
+ set_light(CANDLE_LUM)
+ processing_objects.Add(src)
update_icon()
- if(istype(loc, /turf)) //start a fire if possible
- var/turf/T = loc
- T.hotspot_expose(700, 5)
- attack_self(mob/user as mob)
- if(lit)
- lit = 0
- update_icon()
- set_light(0)
+/obj/item/candle/process()
+ if(!lit)
+ return
+ if(!infinite)
+ wax--
+ if(!wax)
+ new/obj/item/trash/candle(src.loc)
+ if(istype(src.loc, /mob))
+ var/mob/M = src.loc
+ M.unEquip(src, 1) //src is being deleted anyway
+ qdel(src)
+ update_icon()
+ if(isturf(loc)) //start a fire if possible
+ var/turf/T = loc
+ T.hotspot_expose(700, 5)
+
+
+/obj/item/candle/attack_self(mob/user)
+ if(lit)
+ user.visible_message("[user] snuffs out [src].")
+ lit = 0
+ update_icon()
+ set_light(0)
/obj/item/candle/eternal
desc = "A candle. This one seems to have an odd quality about the wax."
- wax = 10000
\ No newline at end of file
+ infinite = 1
\ No newline at end of file
diff --git a/code/game/objects/items/devices/guitar.dm b/code/game/objects/items/devices/guitar.dm
index dc9067c34e4..b95cea0aae3 100644
--- a/code/game/objects/items/devices/guitar.dm
+++ b/code/game/objects/items/devices/guitar.dm
@@ -7,6 +7,8 @@
icon_state = "guitar"
item_state = "guitar"
force = 10
+ burn_state = FLAMMABLE
+ burntime = 20
var/datum/song/handheld/song
hitsound = 'sound/effects/guitarsmash.ogg'
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 9ea2f17378a..97a999fb161 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -42,6 +42,10 @@
update_icon()
+/obj/item/device/taperecorder/fire_act()
+ mytape.ruin() //Fires destroy the tape
+ return ..()
+
/obj/item/device/taperecorder/attack_hand(mob/user)
if(loc == user)
if(mytape)
@@ -253,6 +257,8 @@
var/list/timestamp = list()
var/ruined = 0
+/obj/item/device/tape/fire_act()
+ ruin()
/obj/item/device/tape/attack_self(mob/user)
if(!ruined)
diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm
index 9c4d5e9ddb4..c0cc320fdc3 100644
--- a/code/game/objects/items/devices/violin.dm
+++ b/code/game/objects/items/devices/violin.dm
@@ -7,6 +7,8 @@
icon_state = "violin"
item_state = "violin"
force = 10
+ burn_state = FLAMMABLE
+ burntime = 20
hitsound = 'sound/weapons/smash.ogg'
var/datum/song/handheld/song
@@ -18,7 +20,7 @@
qdel(song)
song = null
return ..()
-
+
/obj/item/device/violin/initialize()
song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
..()
diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm
index 879a6846639..ea018289e0f 100644
--- a/code/game/objects/items/flag.dm
+++ b/code/game/objects/items/flag.dm
@@ -1,77 +1,14 @@
/obj/item/flag
icon = 'icons/obj/flag.dmi'
w_class = 4
- var/lit = 0
- var/burntime = 30
+ burntime = 20
+ burn_state = FLAMMABLE
-/obj/item/flag/fire_act(null, temperature, volume)
- if(!lit)
- Ignite()
- return
-
-/obj/item/flag/proc/Ignite()
- if(lit) return
- lit = 1
- update_icons()
- processing_objects.Add(src)
-
-/obj/item/flag/process()
- burntime--
- if(burntime < 1)
- processing_objects.Remove(src)
- if(istype(src.loc,/turf))
- new /obj/effect/decal/cleanable/ash(src.loc)
- new /obj/item/stack/rods(src.loc)
- qdel(src)
- return
- if(istype(src.loc,/mob/living/carbon))
- var/mob/living/carbon/C = src.loc
- var/turf/location = get_turf(C)
- new /obj/effect/decal/cleanable/ash(location)
- new /obj/item/stack/rods(location)
- qdel(src)
- return
- else
- qdel(src)
- return
-
-/obj/item/flag/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+/obj/item/flag/attackby(obj/item/weapon/W, mob/user, params)
..()
- 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], what a badass.")
-
- else if(istype(W, /obj/item/weapon/lighter/zippo))
- var/obj/item/weapon/lighter/zippo/Z = W
- if(Z.lit)
- light("With a single flick of their wrist, [user] smoothly lights the [name] with their [W]. Damn they're cool.")
-
- else if(istype(W, /obj/item/weapon/lighter))
- var/obj/item/weapon/lighter/L = W
- if(L.lit)
- light("After some fiddling, [user] manages to light the [name] with [W].")
-
- else if(istype(W, /obj/item/weapon/match))
- var/obj/item/weapon/match/M = W
- if(M.lit)
- light("[user] lights the [name] with their [W].")
-
- else if(istype(W, /obj/item/weapon/melee/energy/sword/saber))
- var/obj/item/weapon/melee/energy/sword/saber/S = W
- if(S.active)
- light("[user] swings their [W], barely missing their nose. They light the [name] in the process.")
-
- else if(istype(W, /obj/item/device/assembly/igniter))
- light("[user] fiddles with [W], and manages to light the [name].")
-
-/obj/item/flag/proc/light(var/flavor_text = "[usr] lights the [name].")
- if(!src.lit)
- src.lit = 1
- var/turf/T = get_turf(src)
- T.visible_message(flavor_text)
- update_icons()
- processing_objects.Add(src)
+ if(is_hot(W) && burn_state != ON_FIRE)
+ user.visible_message("[user] lights the [name] with [W].")
+ fire_act()
/obj/item/flag/proc/update_icons()
overlays = null
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 55fda54267f..f509f74d79b 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -125,11 +125,25 @@ var/global/list/datum/stack_recipe/mime_recipes = list ( \
origin_tech = "plasmatech=2;materials=2"
sheettype = "plasma"
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
+ burn_state = FLAMMABLE
+ burntime = 5
/obj/item/stack/sheet/mineral/plasma/New()
..()
recipes = plasma_recipes
+/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/weapon/W, mob/user, params)
+ if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite
+ message_admins("Plasma sheets ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1)
+ log_game("Plasma sheets ignited by [key_name(user)] in ([x],[y],[z])")
+ fire_act()
+ else
+ return ..()
+
+/obj/item/stack/sheet/mineral/plasma/fire_act()
+ atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, amount*10)
+ qdel(src)
+
/obj/item/stack/sheet/mineral/plastic
name = "Plastic"
icon_state = "sheet-plastic"
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 98fa7a955ab..31d1140d821 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -155,6 +155,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
singular_name = "wood plank"
icon_state = "sheet-wood"
origin_tech = "materials=1;biotech=1"
+ burn_state = FLAMMABLE
/obj/item/stack/sheet/wood/New(var/loc, var/amount=null)
recipes = wood_recipes
@@ -169,6 +170,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
singular_name = "cloth roll"
icon_state = "sheet-cloth"
origin_tech = "materials=2"
+ burn_state = FLAMMABLE
/*
* Cardboard
@@ -193,6 +195,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
singular_name = "cardboard sheet"
icon_state = "sheet-card"
origin_tech = "materials=1"
+ burn_state = FLAMMABLE
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
recipes = cardboard_recipes
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index d7fcf1bcb53..bfbd0a4ccb6 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -37,6 +37,7 @@
icon_state = "tile_grass"
origin_tech = "biotech=1"
turf_type = /turf/simulated/floor/grass
+ burn_state = FLAMMABLE
/*
* Wood
@@ -48,6 +49,7 @@
desc = "an easy to fit wood floor tile"
icon_state = "tile-wood"
turf_type = /turf/simulated/floor/wood
+ burn_state = FLAMMABLE
/*
* Carpets
@@ -58,6 +60,7 @@
desc = "A piece of carpet. It is the same size as a floor tile"
icon_state = "tile-carpet"
turf_type = /turf/simulated/floor/carpet
+ burn_state = FLAMMABLE
/*
* Plasteel
@@ -100,6 +103,7 @@
desc = "A piece of carpet with a convincing star pattern."
icon_state = "tile_space"
turf_type = /turf/simulated/floor/fakespace
+ burn_state = FLAMMABLE
/obj/item/stack/tile/fakespace/loaded
amount = 30
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index ec524314b71..7e38c7a6e4e 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -257,31 +257,31 @@
icon = 'icons/obj/toy.dmi'
icon_state = "snappop"
w_class = 1
+ var/ash_type = /obj/effect/decal/cleanable/ash
-/obj/item/toy/snappop/throw_impact(atom/hit_atom)
- ..()
- var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
- s.set_up(3, 1, src)
+/obj/item/toy/snappop/proc/pop_burst(var/n=3, var/c=1)
+ var/datum/effect/system/spark_spread/s = new()
+ s.set_up(n, c, src)
s.start()
- new /obj/effect/decal/cleanable/ash(src.loc)
- visible_message("The [src.name] explodes!","You hear a snap!")
+ new ash_type(loc)
+ visible_message("[src] explodes!",
+ "You hear a snap!")
playsound(src, 'sound/effects/snap.ogg', 50, 1)
qdel(src)
+/obj/item/toy/snappop/fire_act()
+ pop_burst()
+
+/obj/item/toy/snappop/throw_impact(atom/hit_atom)
+ ..()
+ pop_burst()
+
/obj/item/toy/snappop/Crossed(H as mob|obj)
- if((ishuman(H))) //i guess carp and shit shouldn't set them off
+ if(ishuman(H) || issilicon(H)) //i guess carp and shit shouldn't set them off
var/mob/living/carbon/M = H
- if(M.m_intent == "run")
- to_chat(M, "You step on the snap pop!")
-
- var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
- s.set_up(2, 0, src)
- s.start()
- new /obj/effect/decal/cleanable/ash(src.loc)
- visible_message("The [name] explodes!","You hear a snap!")
- playsound(src, 'sound/effects/snap.ogg', 50, 1)
- qdel(src)
-
+ if(issilicon(H) || M.m_intent == "run")
+ to_chat(M, "You step on the snap pop!")
+ pop_burst(2, 0)
/*
@@ -394,6 +394,8 @@
obj/item/toy/cards
+ burn_state = FLAMMABLE
+ burntime = 5
var/parentdeck = null
var/deckstyle = "nanotrasen"
var/card_hitsound = null
@@ -749,6 +751,7 @@ obj/item/toy/cards/deck/syndicate
card_throw_speed = 3
card_throw_range = 20
card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut")
+ burn_state = FIRE_PROOF
/*
|| Custom card decks ||
@@ -884,6 +887,7 @@ obj/item/toy/cards/deck/syndicate/black
icon_state = "carpplushie"
attack_verb = list("bitten", "eaten", "fin slapped")
var/bitesound = 'sound/weapons/bite.ogg'
+ burn_state = FLAMMABLE
// Attack mob
/obj/item/toy/carpplushie/attack(mob/M as mob, mob/user as mob)
@@ -946,6 +950,7 @@ obj/item/toy/cards/deck/syndicate/black
icon = 'icons/obj/toy.dmi'
var/poof_sound = 'sound/weapons/thudswoosh.ogg'
attack_verb = list("poofed", "bopped", "whapped","cuddled","fluffed")
+ burn_state = FLAMMABLE
/obj/item/toy/plushie/attack(mob/M as mob, mob/user as mob)
playsound(loc, poof_sound, 20, 1) // Play the whoosh sound in local area
@@ -1071,6 +1076,7 @@ obj/item/toy/cards/deck/syndicate/black
item_state = "arm_blade"
attack_verb = list("pricked", "absorbed", "gored")
w_class = 2
+ burn_state = FLAMMABLE
/*
* Toy/fake flash
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 928eba59a6a..dc538674993 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -6,6 +6,7 @@
icon = 'icons/obj/trash.dmi'
w_class = 1
desc = "This is rubbish."
+ burn_state = FLAMMABLE
/obj/item/trash/raisins
name = "4no raisins"
@@ -42,6 +43,7 @@
/obj/item/trash/plate
name = "Plate"
icon_state = "plate"
+ burn_state = FIRE_PROOF
/obj/item/trash/snack_bowl
name = "Snack bowl"
@@ -58,6 +60,7 @@
/obj/item/trash/tray
name = "Tray"
icon_state = "tray"
+ burn_state = FIRE_PROOF
/obj/item/trash/candle
name = "candle"
@@ -73,6 +76,7 @@
icon_state = "cola"
var/is_glass = 0
var/is_plastic = 0
+ burn_state = FIRE_PROOF
/obj/item/trash/gum
name = "chewed gum"
diff --git a/code/game/objects/items/weapons/cash.dm b/code/game/objects/items/weapons/cash.dm
index 7c1432bb772..3608d7861f3 100644
--- a/code/game/objects/items/weapons/cash.dm
+++ b/code/game/objects/items/weapons/cash.dm
@@ -23,6 +23,7 @@ var/global/list/moneytypes=list(
throw_speed = 1
throw_range = 2
w_class = 1
+ burn_state = FLAMMABLE
var/access = list()
access = access_crate_cash
var/worth = 1 // Per chip
diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm
index a06619fcca4..8449e17a9db 100644
--- a/code/game/objects/items/weapons/cigs.dm
+++ b/code/game/objects/items/weapons/cigs.dm
@@ -59,6 +59,9 @@ LIGHTERS ARE IN LIGHTERS.DM
return ..()
+/obj/item/clothing/mask/cigarette/fire_act()
+ light()
+
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/weapon/weldingtool))
@@ -110,7 +113,7 @@ LIGHTERS ARE IN LIGHTERS.DM
to_chat(user, "[src] is full.")
-/obj/item/clothing/mask/cigarette/proc/light(var/flavor_text = "[usr] lights the [name].")
+/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null)
if(!src.lit)
src.lit = 1
damtype = "fire"
@@ -136,8 +139,9 @@ LIGHTERS ARE IN LIGHTERS.DM
reagents.handle_reactions()
icon_state = icon_on
item_state = icon_on
- var/turf/T = get_turf(src)
- T.visible_message(flavor_text)
+ if(flavor_text)
+ var/turf/T = get_turf(src)
+ T.visible_message(flavor_text)
set_light(2, 0.25, "#E38F46")
processing_objects.Add(src)
@@ -321,14 +325,15 @@ LIGHTERS ARE IN LIGHTERS.DM
..()
reagents.add_reagent("nicotine", chem_volume)
-/obj/item/clothing/mask/cigarette/pipe/light(var/flavor_text = "[usr] lights the [name].")
+/obj/item/clothing/mask/cigarette/pipe/light(flavor_text = null)
if(!src.lit)
src.lit = 1
damtype = "fire"
icon_state = icon_on
item_state = icon_on
- var/turf/T = get_turf(src)
- T.visible_message(flavor_text)
+ if(flavor_text)
+ var/turf/T = get_turf(src)
+ T.visible_message(flavor_text)
processing_objects.Add(src)
/obj/item/clothing/mask/cigarette/pipe/process()
diff --git a/code/game/objects/items/weapons/courtroom.dm b/code/game/objects/items/weapons/courtroom.dm
index f070a1fe4ad..055faa03a8c 100644
--- a/code/game/objects/items/weapons/courtroom.dm
+++ b/code/game/objects/items/weapons/courtroom.dm
@@ -11,6 +11,7 @@
throwforce = 6.0
w_class = 2
attack_verb = list("bashed", "battered", "judged", "whacked")
+ burn_state = FLAMMABLE
/obj/item/weapon/gavelhammer/suicide_act(mob/user)
user.visible_message("[user] has sentenced \himself to death with the [src.name]! It looks like \he's trying to commit suicide.")
@@ -25,6 +26,7 @@
force = 2.0
throwforce = 2.0
w_class = 1
+ burn_state = FLAMMABLE
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/gavelhammer))
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 0ec893b53a6..6dcbef385b0 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -13,6 +13,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
item_state = "gift1"
+ burn_state = FLAMMABLE
/obj/item/weapon/a_gift/New()
..()
@@ -139,6 +140,7 @@
flags = NOBLUDGEON
amount = 25
max_amount = 25
+ burn_state = FLAMMABLE
/obj/item/stack/wrapping_paper/attack_self(mob/user)
to_chat(user, "You need to use it on a package that has already been wrapped!")
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index 8cbd76041bd..af855e63016 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -9,6 +9,8 @@
throw_range = 20
flags = CONDUCT
slot_flags = SLOT_BELT
+ burn_state = FLAMMABLE
+ burntime = 5
var/active = 0
var/det_time = 50
var/display_timer = 1
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index 8b5baf79a35..12219eadd0b 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -11,6 +11,7 @@
throw_range = 7
w_class = 3
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
+ burn_state = FLAMMABLE
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index a7741267d09..67d4f078264 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -8,6 +8,8 @@
item_state = "paintcan"
materials = list(MAT_METAL=200)
w_class = 3
+ burn_state = FLAMMABLE
+ burntime = 5
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10,20,30,50,70)
volume = 70
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index 90c98c6fdac..de419dc1b7d 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -9,6 +9,7 @@
throw_speed = 4
throw_range = 20
origin_tech = "bluespace=4"
+ burn_state = FLAMMABLE
/obj/item/weapon/teleportation_scroll/apprentice
name = "lesser scroll of teleportation"
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 809bf0d298d..be831bbe0d1 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -44,6 +44,7 @@
icon_state = "buckler"
item_state = "buckler"
materials = list()
+ burn_state = FLAMMABLE
block_chance = 30
/obj/item/weapon/shield/energy
diff --git a/code/game/objects/items/weapons/signs.dm b/code/game/objects/items/weapons/signs.dm
index 00ac859528d..fa68b09135e 100644
--- a/code/game/objects/items/weapons/signs.dm
+++ b/code/game/objects/items/weapons/signs.dm
@@ -6,6 +6,7 @@
force = 5
w_class = 4
attack_verb = list("bashed","smacked")
+ burn_state = FLAMMABLE
var/delayed = 0 //used to do delays
diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm
index ffaadb59d59..19c771873ce 100644
--- a/code/game/objects/items/weapons/staff.dm
+++ b/code/game/objects/items/weapons/staff.dm
@@ -10,6 +10,7 @@
w_class = 2
armour_penetration = 100
attack_verb = list("bludgeoned", "whacked", "disciplined")
+ burn_state = FLAMMABLE
/obj/item/weapon/twohanded/staff/broom
name = "broom"
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 323131845d2..960f01dc4af 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -15,6 +15,8 @@
max_w_class = 3
max_combined_w_class = 21
storage_slots = 21
+ burn_state = FLAMMABLE
+ burntime = 20
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/back.dmi'
@@ -35,6 +37,7 @@
icon_state = "holdingpack"
max_w_class = 5
max_combined_w_class = 35
+ burn_state = FIRE_PROOF
New()
..()
@@ -123,12 +126,14 @@
desc = "It's a special backpack made exclusively for Nanotrasen officers."
icon_state = "captainpack"
item_state = "captainpack"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/industrial
name = "industrial backpack"
desc = "It's a tough backpack for the daily grind of station life."
icon_state = "engiepack"
item_state = "engiepack"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/botany
name = "botany backpack"
@@ -153,6 +158,7 @@
desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma."
icon_state = "toxpack"
item_state = "toxpack"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/virology
name = "virology backpack"
@@ -168,6 +174,7 @@
name = "leather satchel"
desc = "It's a very fancy satchel made with fine leather."
icon_state = "satchel"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/satcheldeluxe
name = "leather satchel"
@@ -188,6 +195,7 @@
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/satchel_med
name = "medical satchel"
@@ -213,6 +221,7 @@
name = "scientist satchel"
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/satchel_sec
name = "security satchel"
@@ -228,6 +237,7 @@
name = "captain's satchel"
desc = "An exclusive satchel for Nanotrasen officers."
icon_state = "satchel-cap"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/satchel_flat
name = "smuggler's satchel"
@@ -346,6 +356,7 @@
desc = "A duffelbag designed to hold large quantities of condoms."
icon_state = "duffel-captain"
item_state = "duffel-captain"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/duffel/security
name = "security duffelbag"
@@ -388,6 +399,7 @@
desc = "A duffelbag designed to hold tools."
icon_state = "duffel-eng"
item_state = "duffel-eng"
+ burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/duffel/hydro
name = "hydroponics duffelbag"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index af4d9aa6008..395d27d0300 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -162,7 +162,7 @@
max_w_class = 3
w_class = 1
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown", "/obj/item/stack/tile/grass","/obj/item/stack/medical/ointment/aloe","/obj/item/stack/medical/bruise_pack/comfrey", "/obj/item/weapon/reagent_containers/honeycomb")
-
+ burn_state = FLAMMABLE
/obj/item/weapon/storage/bag/plants/portaseeder
name = "portable seed extractor"
@@ -376,6 +376,7 @@
max_w_class = 3
w_class = 4 //Bigger than a book because physics
can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/storage/bible", "/obj/item/weapon/tome", "/obj/item/weapon/spellbook")
+ burn_state = FLAMMABLE
/*
* Trays - Agouri
@@ -484,7 +485,7 @@
max_combined_w_class = 200
w_class = 1
can_hold = list("/obj/item/weapon/reagent_containers/food/pill","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle")
-
+ burn_state = FLAMMABLE
/*
* Biowaste bag (mostly for xenobiologists)
*/
@@ -497,4 +498,5 @@
storage_slots = 25
max_combined_w_class = 200
w_class = 1
- can_hold = list("/obj/item/slime_extract","/obj/item/weapon/reagent_containers/food/snacks/monkeycube","/obj/item/weapon/reagent_containers/syringe","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle","/obj/item/weapon/reagent_containers/blood","/obj/item/weapon/reagent_containers/hypospray/autoinjector")
\ No newline at end of file
+ can_hold = list("/obj/item/slime_extract","/obj/item/weapon/reagent_containers/food/snacks/monkeycube","/obj/item/weapon/reagent_containers/syringe","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle","/obj/item/weapon/reagent_containers/blood","/obj/item/weapon/reagent_containers/hypospray/autoinjector")
+ burn_state = FLAMMABLE
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm
index 57332ae24d6..b98805e3275 100644
--- a/code/game/objects/items/weapons/storage/bible.dm
+++ b/code/game/objects/items/weapons/storage/bible.dm
@@ -5,6 +5,7 @@
throw_speed = 1
throw_range = 5
w_class = 3
+ burn_state = FLAMMABLE
var/mob/affecting = null
var/deity_name = "Christ"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 76cbc9ab102..bfdc3a80727 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -24,6 +24,7 @@
desc = "It's just an ordinary box."
icon_state = "box"
item_state = "syringe_kit"
+ burn_state = FLAMMABLE
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
/obj/item/weapon/storage/box/large
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 543865aa592..7f2a91054c1 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -12,6 +12,8 @@
max_w_class = 3
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
+ burn_state = FLAMMABLE
+ burntime = 20
/obj/item/weapon/storage/briefcase/New()
..()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 367874b0d7d..c4488216b12 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -17,6 +17,7 @@
icon = 'icons/obj/food/food.dmi'
icon_state = "donutbox6"
name = "donut box"
+ burn_state = FLAMMABLE
var/icon_type = "donut"
/obj/item/weapon/storage/fancy/update_icon(var/itemremoved = 0)
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index e2324fcb434..878adcaa414 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -323,7 +323,7 @@
return 1
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target
-/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location)
+/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location, burn = 0)
if(!istype(W)) return 0
if(istype(src, /obj/item/weapon/storage/fancy))
@@ -357,8 +357,14 @@
W.on_exit_storage(src)
update_icon()
W.mouse_opacity = initial(W.mouse_opacity)
+ if(burn)
+ W.fire_act()
return 1
+/obj/item/weapon/storage/empty_object_contents(burn, loc)
+ for(var/obj/item/Item in contents)
+ remove_from_storage(Item, loc, burn)
+
//This proc is called when you want to place an item into the storage item.
/obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob, params)
..()
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index e34f9687d7e..5bc1ae65e84 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -5,6 +5,7 @@
icon = 'icons/obj/wallets.dmi'
icon_state = "wallet"
w_class = 2
+ burn_state = FLAMMABLE
can_hold = list(
"/obj/item/weapon/spacecash",
"/obj/item/weapon/card",
diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm
index 62c2f7aabfd..3073125bae0 100644
--- a/code/game/objects/items/weapons/table_rack_parts.dm
+++ b/code/game/objects/items/weapons/table_rack_parts.dm
@@ -40,6 +40,7 @@
icon_state = "wood_tableparts"
flags = null
upgradable = 0
+ burn_state = FLAMMABLE
result = /obj/structure/table/woodentable
parts = list(
/obj/item/stack/sheet/wood,
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index e6e88563d4b..9068460ae80 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -373,7 +373,8 @@
V.visible_message("[V] was frozen shut!")
for(var/mob/living/L in T)
L.ExtinguishMob()
- return
+ for(var/obj/item/Item in T)
+ Item.extinguish()
/datum/effect/system/freezing_smoke_spread
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 4e318d26fed..7c5fe09dd06 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -16,7 +16,9 @@
var/Mtoollink = 0 // variable to decide if an object should show the multitool menu linking menu, not all objects use it
-
+ var/burn_state = FIRE_PROOF // LAVA_PROOF | FIRE_PROOF | FLAMMABLE | ON_FIRE
+ var/burntime = 10 //How long it takes to burn to ashes, in seconds
+ var/burn_world_time //What world time the object will burn up completely
var/being_shocked = 0
var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart?
@@ -288,4 +290,32 @@ a {
being_shocked = 0
/obj/proc/CanAStarPass()
- . = !density
\ No newline at end of file
+ . = !density
+
+/obj/fire_act(global_overlay=1)
+ if(!burn_state)
+ burn_state = ON_FIRE
+ fire_master.burning += src
+ burn_world_time = world.time + burntime*rand(10,20)
+ if(global_overlay)
+ overlays += fire_overlay
+ return 1
+
+/obj/proc/burn()
+ empty_object_contents(1, loc)
+ var/obj/effect/decal/cleanable/ash/A = new(loc)
+ A.desc = "Looks like this used to be a [name] some time ago."
+ fire_master.burning -= src
+ qdel(src)
+
+/obj/proc/extinguish()
+ if(burn_state == ON_FIRE)
+ burn_state = FLAMMABLE
+ overlays -= fire_overlay
+ fire_master.burning -= src
+
+/obj/proc/empty_object_contents(burn = 0, new_loc = loc)
+ for(var/obj/item/Item in contents) //Empty out the contents
+ Item.forceMove(new_loc)
+ if(burn)
+ Item.fire_act() //Set them on fire, too
\ No newline at end of file
diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm
index 9251890dc6e..045f58d577d 100644
--- a/code/game/objects/structures/artstuff.dm
+++ b/code/game/objects/structures/artstuff.dm
@@ -15,6 +15,8 @@
icon = 'icons/obj/artstuff.dmi'
icon_state = "easel"
density = 1
+ burn_state = FLAMMABLE
+ burntime = 15
var/obj/item/weapon/canvas/painting = null
@@ -56,6 +58,7 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES]
desc = "Draw out your soul on this canvas! Only crayons can draw on it. Examine it to focus on the canvas."
icon = 'icons/obj/artstuff.dmi'
icon_state = "11x11"
+ burn_state = FLAMMABLE
var/whichGlobalBackup = 1 //List index
/obj/item/weapon/canvas/nineteenXnineteen
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 31958409954..10f09401ba5 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -16,6 +16,7 @@ LINEN BINS
throw_range = 2
w_class = 1
item_color = "white"
+ burn_state = FLAMMABLE
slot_flags = SLOT_BACK
@@ -161,6 +162,8 @@ LINEN BINS
icon = 'icons/obj/structures.dmi'
icon_state = "linenbin-full"
anchored = 1
+ burn_state = FLAMMABLE
+ burntime = 20
var/amount = 20
var/list/sheets = list()
var/obj/item/hidden = null
@@ -184,6 +187,16 @@ LINEN BINS
else icon_state = "linenbin-full"
+/obj/structure/bedsheetbin/fire_act()
+ if(!amount)
+ return
+ ..()
+
+/obj/structure/bedsheetbin/burn()
+ amount = 0
+ extinguish()
+ update_icon()
+
/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/weapon/bedsheet))
user.drop_item()
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
index 45c2f538e26..e859c0348f1 100644
--- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -5,6 +5,8 @@
icon_opened = "cardboard_open"
icon_closed = "cardboard"
health = 10
+ burn_state = FLAMMABLE
+ burntime = 20
sound = 'sound/effects/rustle2.ogg'
material_drop = /obj/item/stack/sheet/cardboard
cutting_sound = 'sound/items/poster_ripped.ogg'
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index 03337e6a260..c7aaa8cd84d 100644
--- a/code/game/objects/structures/crates_lockers/closets/coffin.dm
+++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm
@@ -4,6 +4,8 @@
icon_state = "coffin"
icon_closed = "coffin"
icon_opened = "coffin_open"
+ burn_state = FLAMMABLE
+ burntime = 20
/obj/structure/closet/coffin/update_icon()
if(!opened)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index bff3228dbc9..169179ca375 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -4,6 +4,8 @@
icon_state = "cabinet_closed"
icon_closed = "cabinet_closed"
icon_opened = "cabinet_open"
+ burn_state = FLAMMABLE
+ burntime = 20
/obj/structure/closet/cabinet/update_icon()
if(!opened)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index af6424571ca..49006fb7fb5 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -7,6 +7,8 @@
icon_opened = "cabinetdetective_open"
icon_broken = "cabinetdetective_broken"
icon_off = "cabinetdetective_broken"
+ burn_state = FLAMMABLE
+ burntime = 20
New()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index 51e3e8d06c3..7eab1e6de85 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -33,6 +33,8 @@
icon_opened = "cabinetdetective_open"
icon_broken = "cabinetdetective_broken"
icon_off = "cabinetdetective_broken"
+ burn_state = FLAMMABLE
+ burntime = 20
/obj/structure/closet/secure_closet/personal/cabinet/update_icon()
if(broken)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 66c470882c8..7ca75725dd9 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -317,6 +317,8 @@
icon_opened = "cabinetdetective_open"
icon_broken = "cabinetdetective_broken"
icon_off = "cabinetdetective_broken"
+ burn_state = FLAMMABLE
+ burntime = 20
New()
..()
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index e4f8acd2c5b..23c6e096748 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -1,3 +1,7 @@
+/obj/structure/flora
+ burn_state = FLAMMABLE
+ burntime = 30
+
//trees
/obj/structure/flora/tree
name = "tree"
@@ -230,6 +234,7 @@
desc = "a rock"
icon_state = "rock1"
icon = 'icons/obj/flora/rocks.dmi'
+ burn_state = FIRE_PROOF
anchored = 1
/obj/structure/flora/rock/New()
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 9ce9e59e423..b9af7b2d032 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -219,6 +219,8 @@
/obj/structure/mineral_door/wood
mineralType = "wood"
hardness = 1
+ burn_state = FLAMMABLE
+ burntime = 30
Open()
isSwitchingStates = 1
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 24ea6b5a358..bfb5d584965 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -41,6 +41,7 @@
desc = ""
icon = 'icons/obj/decals.dmi'
w_class = 3 //big
+ burn_state = FLAMMABLE
var/sign_state = ""
/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index f13bffb9d44..c5a3b2f15ba 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -13,6 +13,8 @@
icon_state = "bed"
can_buckle = 1
buckle_lying = 1
+ burn_state = FLAMMABLE
+ burntime = 30
var/movable = 0 // For mobility checks
/obj/structure/stool/bed/MouseDrop(atom/over_object)
@@ -46,6 +48,7 @@
name = "roller bed"
icon = 'icons/obj/rollerbed.dmi'
icon_state = "down"
+ burn_state = FIRE_PROOF
anchored = 0
/obj/structure/stool/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index a12f804d308..1c3c3f8e793 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -3,6 +3,7 @@
desc = "You sit in this. Either by will or force."
icon_state = "chair"
buckle_lying = 0 //you sit in a chair, not lay
+ burn_state = FIRE_PROOF
var/propelled = 0 // Check for fire-extinguisher-driven chairs
@@ -76,6 +77,8 @@
// Chair types
/obj/structure/stool/bed/chair/wood
+ burn_state = FLAMMABLE
+ burntime = 20
// TODO: Special ash subtype that looks like charred chair legs
/obj/structure/stool/bed/chair/wood/normal
@@ -103,6 +106,8 @@
desc = "It looks comfy."
icon_state = "comfychair"
color = rgb(255,255,255)
+ burn_state = FLAMMABLE
+ burntime = 30
var/image/armrest = null
/obj/structure/stool/bed/chair/comfy/New()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 285b1da8aa5..48193933a66 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -369,6 +369,8 @@
parts = /obj/item/weapon/table_parts/wood
health = 50
canSmoothWith = list(/obj/structure/table/woodentable, /obj/structure/table/woodentable/poker)
+ burn_state = FLAMMABLE
+ burntime = 20
var/canPokerize = 1
/obj/structure/table/woodentable/attackby(obj/item/I as obj, mob/user as mob, params)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 5d8c98be329..b27d3f6e4f8 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -249,12 +249,16 @@
/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
if(!on) return
+ if(istype(O, /obj/item))
+ var/obj/item/I = O
+ I.extinguish()
+
O.water_act(100, convertHeat(), src)
if(isliving(O))
var/mob/living/L = O
L.ExtinguishMob()
- L.fire_stacks = -20 //Douse ourselves with water to avoid fire more easily
+ L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
to_chat(L, "You've been drenched in water!")
if(iscarbon(O))
var/mob/living/carbon/M = O
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 7ae2ddcd27d..051dbe55495 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -425,11 +425,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
hit(round(exposed_volume / 1000), 0)
..()
-/obj/structure/window/plasmabasic/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > T0C + 32000)
- hit(round(exposed_volume / 1000), 0)
- ..()
-
/obj/structure/window/plasmabasic/BlockSuperconductivity()
return 1
@@ -457,9 +452,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
/obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
-/obj/structure/window/plasmareinforced/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- return
-
/obj/structure/window/plasmareinforced/BlockSuperconductivity()
return 1 //okay this SHOULD MAKE THE TOXINS CHAMBER WORK
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 3c73c0789e7..b8a6635225a 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -80,17 +80,6 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
src.hotspot_expose(1000,CELL_VOLUME)
return
-/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(!burnt && prob(5))
- burn_tile()
-
-/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
- var/dir_to = get_dir(src, adj_turf)
-
- for(var/obj/structure/window/W in src)
- if(W.dir == dir_to || W.is_fulltile()) //Same direction or diagonal (full tile)
- W.fire_act(adj_air, adj_temp, adj_volume)
-
/turf/simulated/floor/is_shielded()
for(var/obj/structure/A in contents)
if(A.level == 3)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 4d7c8ccd5da..f38f21dbac4 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -110,13 +110,7 @@
update_icon()
return
-/*
-/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
- if(adj_temp > max_temperature)
- take_damage(rand(10, 20) * (adj_temp / max_temperature))
- return ..()
-*/
/turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0)
if(istype(src,/turf/simulated/wall/r_wall))
if(!devastated)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index d76791e7f97..d72698971ed 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -135,9 +135,6 @@
loopsanity--
A.HasProximity(M, 1)
-/turf/proc/adjacent_fire_act(turf/simulated/floor/source, temperature, volume)
- return
-
/turf/proc/levelupdate()
for(var/obj/O in src)
if(O.level == 1)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 466f01b27db..379e4616e7b 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,5 +1,6 @@
/obj/item/clothing
name = "clothing"
+ burn_state = FLAMMABLE
var/list/species_restricted = null //Only these species can wear this kit.
var/rig_restrict_helmet = 0 // Stops the user from equipping a rig helmet without attaching it to the suit first.
var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
@@ -82,6 +83,7 @@
w_class = 1
throwforce = 2
slot_flags = SLOT_EARS
+ burn_state = FIRE_PROOF
/obj/item/clothing/ears/attack_hand(mob/user as mob)
if(!user) return
@@ -139,6 +141,7 @@
flags = EARBANGPROTECT
strip_delay = 15
put_on_delay = 25
+ burn_state = FLAMMABLE
//Glasses
/obj/item/clothing/glasses
@@ -155,6 +158,7 @@
var/color_view = null//overrides client.color while worn
strip_delay = 20 // but seperated to allow items to protect but not impair vision, like space helmets
put_on_delay = 25
+ burn_state = FIRE_PROOF
species_restricted = list("exclude","Kidan")
/*
SEE_SELF // can see self, no matter what
@@ -526,6 +530,7 @@ BLIND // can't see anything
flash_protect = 2
strip_delay = 50
put_on_delay = 50
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/space
name = "Space suit"
@@ -547,6 +552,7 @@ BLIND // can't see anything
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
strip_delay = 80
put_on_delay = 80
+ burn_state = FIRE_PROOF
species_restricted = list("exclude","Diona","Vox","Wryn")
//Under clothing
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 2d8878af829..11503b40278 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -6,6 +6,7 @@
siemens_coefficient = 0
permeability_coefficient = 0.05
item_color="yellow"
+ burn_state = FIRE_PROOF
/obj/item/clothing/gloves/color/yellow/power
description_antag = "These are a pair of power gloves, and can be used to fire bolts of electricity while standing over powered power cables."
@@ -45,6 +46,7 @@
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
permeability_coefficient = 0.05
item_color="yellow"
+ burn_state = FIRE_PROOF
New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
@@ -59,6 +61,7 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ burn_state = FIRE_PROOF
var/can_be_cut = 1
@@ -102,6 +105,7 @@
desc = "These gloves will protect the wearer from electric shock."
siemens_coefficient = 0
permeability_coefficient = 0.05
+ burn_state = FIRE_PROOF
/obj/item/clothing/gloves/color/rainbow
name = "rainbow gloves"
@@ -172,6 +176,7 @@
permeability_coefficient = 0.01
item_color="white"
transfer_prints = TRUE
+ burn_state = FIRE_PROOF
/obj/item/clothing/gloves/color/latex/nitrile
name = "nitrile gloves"
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 2b265c06751..db9de4df740 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -29,6 +29,7 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ burn_state = FIRE_PROOF
/obj/item/clothing/gloves/botanic_leather
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
@@ -40,6 +41,7 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ burn_state = FIRE_PROOF
/obj/item/clothing/gloves/batmangloves
desc = "Used for handling all things bat related."
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 977a3969a93..bbaf5b34e8b 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -58,6 +58,7 @@
desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!"
icon_state = "welding"
item_state = "welding"
+ burn_state = FIRE_PROOF
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi',
@@ -117,12 +118,14 @@
desc = "Go Red! I mean Green! I mean Red! No Green!"
icon_state = "thunderdome"
item_state = "thunderdome"
+ burn_state = FIRE_PROOF
/obj/item/clothing/head/collectable/swat
name = "collectable SWAT helmet"
desc = "Now you can be in the Deathsquad too!"
icon_state = "swat"
item_state = "swat"
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi'
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 5cc5af80abb..c73a6f21306 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -10,6 +10,7 @@
armor = list(melee = 15, bullet = 5, laser = 20, energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
actions_types = list(/datum/action/item_action/toggle_helmet_light)
+ burn_state = FIRE_PROOF
/obj/item/clothing/head/hardhat/attack_self(mob/user)
on = !on
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index b7b0cc71b81..f31a6434001 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -11,6 +11,7 @@
heat_protection = HEAD
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
strip_delay = 60
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi',
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 6e53e8a9b04..c6879cb2945 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -342,6 +342,7 @@
throw_range = 5
w_class = 2
attack_verb = list("warned", "cautioned", "smashed")
+ burn_state = FIRE_PROOF
/obj/item/clothing/head/griffin
name = "griffon head"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 703f36cf1fd..eb04efcc380 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -23,6 +23,7 @@
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
actions_types = list(/datum/action/item_action/toggle)
+ burn_state = FIRE_PROOF
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi',
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index 5b3ab335cbe..295ec84c4af 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -8,6 +8,7 @@
gas_transfer_coefficient = 0.10
permeability_coefficient = 0.50
actions_types = list(/datum/action/item_action/adjust)
+ burn_state = FIRE_PROOF
species_fit = list("Vox", "Vox Armalis", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 72b4b6febb7..0df0f7550fc 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -8,6 +8,7 @@
item_state = "gas_alt"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
+ burn_state = FIRE_PROOF
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
@@ -95,6 +96,7 @@
icon_state = "clown"
item_state = "clown_hat"
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | BLOCKHAIR
+ burn_state = FLAMMABLE
/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user)
@@ -130,24 +132,28 @@
desc = "A feminine clown mask for the dabbling crossdressers or female entertainers."
icon_state = "sexyclown"
item_state = "sexyclown"
+ burn_state = FLAMMABLE
/obj/item/clothing/mask/gas/mime
name = "mime mask"
desc = "The traditional mime's mask. It has an eerie facial posture."
icon_state = "mime"
item_state = "mime"
+ burn_state = FLAMMABLE
/obj/item/clothing/mask/gas/monkeymask
name = "monkey mask"
desc = "A mask used when acting as a monkey."
icon_state = "monkeymask"
item_state = "monkeymask"
+ burn_state = FLAMMABLE
/obj/item/clothing/mask/gas/sexymime
name = "sexy mime mask"
desc = "A traditional female mime's mask."
icon_state = "sexymime"
item_state = "sexymime"
+ burn_state = FLAMMABLE
/obj/item/clothing/mask/gas/death_commando
name = "Death Commando Mask"
@@ -158,12 +164,14 @@
name = "cyborg visor"
desc = "Beep boop"
icon_state = "death"
+ burn_state = FLAMMABLE
/obj/item/clothing/mask/gas/owl_mask
name = "owl mask"
desc = "Twoooo!"
icon_state = "owl"
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | NODROP
+ burn_state = FLAMMABLE
actions_types = list(/datum/action/item_action/hoot)
/obj/item/clothing/mask/gas/owl_mask/attack_self()
diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm
index 190804d1a92..8655c2b7541 100644
--- a/code/modules/clothing/masks/voice.dm
+++ b/code/modules/clothing/masks/voice.dm
@@ -9,6 +9,7 @@
// desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics."
var/obj/item/voice_changer/changer
origin_tech = "syndicate=4"
+ burn_state = FIRE_PROOF
/obj/item/clothing/mask/gas/voice/verb/Toggle_Voice_Changer()
set category = "Object"
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 2c6bdeddf87..b036946e4ae 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -8,6 +8,7 @@
actions_types = list(/datum/action/item_action/toggle)
strip_delay = 70
put_on_delay = 70
+ burn_state = FIRE_PROOF
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
if(magpulse)
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 2330f439547..f9aef32e067 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -6,6 +6,7 @@
permeability_coefficient = 0.05
flags = NOSLIP
origin_tech = "syndicate=3"
+ burn_state = FIRE_PROOF
var/list/clothing_choices = list()
silence_steps = 1
@@ -22,6 +23,7 @@
item_state = "jackboots"
armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0)
strip_delay = 70
+ burn_state = FIRE_PROOF
/obj/item/clothing/shoes/combat/swat //overpowered boots for death squads
name = "\improper SWAT shoes"
@@ -51,6 +53,7 @@
slowdown = SHOES_SLOWDOWN+1
strip_delay = 50
put_on_delay = 50
+ burn_state = FIRE_PROOF
/obj/item/clothing/shoes/galoshes/dry
name = "absorbent galoshes"
@@ -82,6 +85,7 @@
item_color = "hosred"
strip_delay = 50
put_on_delay = 50
+ burn_state = FIRE_PROOF
var/footstep = 1
silence_steps = 1
shoe_sound = "jackboot"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 8b5ea0d9af5..d46d7f83d1d 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -7,6 +7,7 @@
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
strip_delay = 60
put_on_delay = 40
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
@@ -148,6 +149,7 @@
cold_protection = UPPER_TORSO|LOWER_TORSO|HANDS
heat_protection = UPPER_TORSO|LOWER_TORSO|HANDS
strip_delay = 70
+ burn_state = FLAMMABLE
/obj/item/clothing/suit/armor/vest/warden/alt
name = "warden's jacket"
@@ -235,7 +237,7 @@
blood_overlay_type = "armor"
flags_size = ONESIZEFITSALL
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
-
+ burn_state = FLAMMABLE
//Reactive armor
/obj/item/clothing/suit/armor/reactive
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 06fbf32b056..4286064262f 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -7,6 +7,7 @@
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR | THICKMATERIAL
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/bio_suit
name = "bio suit"
@@ -25,6 +26,7 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
strip_delay = 70
put_on_delay = 70
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index a8fd6ea4c49..5124e1d1adf 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -189,6 +189,7 @@
item_state = "hazard"
blood_overlay_type = "armor"
allowed = list (/obj/item/device/flashlight, /obj/item/device/t_scanner, /obj/item/weapon/tank/emergency_oxygen)
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 676800f8f48..6a8908506b8 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -17,6 +17,7 @@
blood_overlay_type = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
@@ -30,6 +31,7 @@
blood_overlay_type = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
@@ -136,6 +138,7 @@
w_class = 3
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/hastur
@@ -515,6 +518,7 @@
desc = "A long, thick black leather coat."
icon_state = "leathercoat"
item_state = "leathercoat"
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/browncoat
name = "brown leather coat"
@@ -748,6 +752,7 @@
ignore_suitadjust = 1
actions_types = list()
adjust_flavour = null
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/officercoat
name = "Clown Officer's Coat"
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index 2178821e3fa..44a2f5b1c49 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -28,6 +28,7 @@
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
strip_delay = 60
put_on_delay = 60
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/fire/firefighter
icon_state = "firesuit"
@@ -72,6 +73,7 @@
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
strip_delay = 70
put_on_delay = 70
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/bomb_suit
name = "bomb suit"
@@ -92,6 +94,7 @@
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
strip_delay = 70
put_on_delay = 70
+ burn_state = FIRE_PROOF
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
@@ -119,6 +122,7 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 60, rad = 100)
strip_delay = 60
put_on_delay = 60
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/radiation
name = "Radiation suit"
@@ -135,4 +139,5 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 60, rad = 100)
flags_inv = HIDEJUMPSUIT|HIDETAIL
strip_delay = 60
- put_on_delay = 60
\ No newline at end of file
+ put_on_delay = 60
+ burn_state = FIRE_PROOF
\ No newline at end of file
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index c36a3f3ecea..b8ee1c3c896 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -6,6 +6,7 @@
permeability_coefficient = 0.01
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20)
unacidable = 1
+ burn_state = FIRE_PROOF
//Not given any special protective value since the magic robes are full-body protection --NEO
strip_delay = 50
put_on_delay = 50
@@ -65,6 +66,7 @@
unacidable = 1
strip_delay = 50
put_on_delay = 50
+ burn_state = FIRE_PROOF
/obj/item/clothing/suit/wizrobe/red
name = "red wizard robe"
@@ -117,6 +119,7 @@
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = 0
+ burn_state = FLAMMABLE
/obj/item/clothing/head/wizard/marisa/fake
name = "Witch Hat"
@@ -126,6 +129,7 @@
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = 0
+ burn_state = FLAMMABLE
/obj/item/clothing/suit/wizrobe/marisa/fake
name = "Witch Robe"
@@ -135,4 +139,5 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
- unacidable = 0
\ No newline at end of file
+ unacidable = 0
+ burn_state = FLAMMABLE
\ No newline at end of file
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index e417c899f7f..8e8e046ef1b 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -166,6 +166,7 @@
icon_state = "bronze"
item_color = "bronze"
materials = list(MAT_METAL=1000)
+ burn_state = FIRE_PROOF
/obj/item/clothing/accessory/medal/conduct
name = "distinguished conduct medal"
diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm
index 8f5a540f3c3..8d7a92e3e8a 100644
--- a/code/modules/clothing/under/chameleon.dm
+++ b/code/modules/clothing/under/chameleon.dm
@@ -7,6 +7,7 @@
desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
+ burn_state = FIRE_PROOF
armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
New()
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 886d48932aa..7b6b85326c3 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -17,6 +17,7 @@
item_state = "bl_suit"
item_color = "black"
flags_size = ONESIZEFITSALL
+ burn_state = FIRE_PROOF
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index 9b604da7277..2e01d170f3d 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -7,6 +7,7 @@
item_color = "chief"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10)
flags_size = ONESIZEFITSALL
+ burn_state = FIRE_PROOF
/obj/item/clothing/under/rank/chief_engineer/skirt
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding."
@@ -23,6 +24,7 @@
item_state = "atmos_suit"
item_color = "atmos"
flags_size = ONESIZEFITSALL
+ burn_state = FIRE_PROOF
/obj/item/clothing/under/rank/atmospheric_technician/skirt
desc = "It's a jumpskirt worn by atmospheric technicians."
@@ -40,6 +42,7 @@
item_color = "engine"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10)
flags_size = ONESIZEFITSALL
+ burn_state = FIRE_PROOF
/obj/item/clothing/under/rank/engineer/skirt
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index d912a2e289d..c37d6340609 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -146,6 +146,7 @@
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
heat_protection = UPPER_TORSO | LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
+ burn_state = FIRE_PROOF
/obj/item/clothing/under/acj
name = "administrative cybernetic jumpsuit"
@@ -163,6 +164,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
slowdown = -10
siemens_coefficient = 0
+ burn_state = LAVA_PROOF
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
@@ -334,6 +336,7 @@
item_state = "gladiator"
item_color = "gladiator"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
+ burn_state = FIRE_PROOF
//dress
@@ -467,6 +470,7 @@
item_color = "roman"
item_state = "armor"
strip_delay = 100
+ burn_state = FIRE_PROOF
/obj/item/clothing/under/maid
name = "maid costume"
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index aae17abc961..15ce27b7d5c 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -10,6 +10,7 @@
consume_sound = 'sound/items/drink.ogg'
possible_transfer_amounts = list(5,10,15,20,25,30,50)
volume = 50
+ burn_state = FIRE_PROOF
/obj/item/weapon/reagent_containers/food/drinks/New()
..()
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index ebdd151a4b5..bc1442038e9 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -10,6 +10,8 @@
lefthand_file = 'icons/goonstation/mob/inhands/items_lefthand.dmi'
righthand_file = 'icons/goonstation/mob/inhands/items_righthand.dmi'
materials = list(MAT_GLASS=500)
+ burn_state = FLAMMABLE
+ burntime = 5
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/egg)) //breaking eggs
@@ -25,6 +27,15 @@
else
..()
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fire_act()
+ if(!reagents.total_volume)
+ return
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/burn()
+ reagents.clear_reagents()
+ extinguish()
+
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() // *scream
if(reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 3e0cfb8f867..f14c0d19254 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -11,6 +11,7 @@
var/apply_method = "swallow"
var/transfer_efficiency = 1.0
var/instant_application = 0 //if we want to bypass the forcedfeed delay
+ burn_state = FLAMMABLE
/obj/item/weapon/reagent_containers/food/New()
..()
diff --git a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
index 706ea0e367b..381525a13ae 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
@@ -59,8 +59,8 @@
// Burns the food with a chance of starting a fire - for if you try cooking something that's already been cooked that way
// if burns = 0 then it'll just tell you that the item is already that foodtype and it would do nothing
-// if you wanted a different side effect set burns to 1 and override burn()
-/obj/machinery/cooker/proc/burn(mob/user, obj/item/weapon/reagent_containers/props)
+// if you wanted a different side effect set burns to 1 and override burn_food()
+/obj/machinery/cooker/proc/burn_food(mob/user, obj/item/weapon/reagent_containers/props)
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/burnt = new(get_turf(src))
setRegents(props, burnt)
to_chat(user, "You smell burning coming from the [src]!")
@@ -130,7 +130,7 @@
return
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks))
if(checkCooked(I))
- burn(user, I)
+ burn_food(user, I)
turnoff(I)
return
var/obj/item/weapon/reagent_containers/food/snacks/newfood = gettype()
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 23a5447f1d4..81d489d9da1 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -10,6 +10,7 @@
var/datum/seed/seed
var/potency = -1
var/awakening = 0
+ burn_state = FLAMMABLE
/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc,planttype)
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index 39e94160275..d68740eaf47 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -7,6 +7,7 @@
icon = 'icons/obj/weapons.dmi'
var/plantname
var/potency = 1
+ burn_state = FLAMMABLE
/obj/item/weapon/grown/New(newloc,planttype)
@@ -170,8 +171,11 @@
to_chat(M, "[user] smacks you with a [name]!FLOWER POWER")
to_chat(user, " Your [name]'s FLOWER POWER strikes [M]")
if(istype(M, /mob/living))
- to_chat(M, "You are heated by the warmth of the of the [name]!")
- M.bodytemperature += potency/2 * TEMPERATURE_DAMAGE_COEFFICIENT
+ to_chat(M, "You are lit on fire from the intense heat of the [name]!")
+ M.adjust_fire_stacks(potency / 20)
+ if(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")
/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user as mob)
if(!user.gloves)
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index 1749181b329..244b9fef8f3 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -6,7 +6,7 @@ var/global/list/plant_seed_sprites = list()
icon = 'icons/obj/seeds.dmi'
icon_state = "blank"
w_class = 2
-
+ burn_state = FLAMMABLE
var/seed_type
var/datum/seed/seed
var/modified = 0
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index aa7d9ea4607..d4ccee6e50f 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -18,6 +18,8 @@
anchored = 1
density = 1
opacity = 1
+ burn_state = FLAMMABLE
+ burntime = 30
var/health = 50
var/tmp/busy = 0
var/list/allowed_books = list(/obj/item/weapon/book, /obj/item/weapon/spellbook, /obj/item/weapon/storage/bible, /obj/item/weapon/tome) //Things allowed in the bookcase
@@ -167,6 +169,7 @@
throw_range = 5
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
attack_verb = list("bashed", "whacked", "educated")
+ burn_state = FLAMMABLE
var/dat // Actual page content
var/due_date = 0 // Game time in 1/10th seconds
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index 8972b675e1a..4a2acd645df 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -7,6 +7,8 @@
flags = CONDUCT
force = 10.0
throwforce = 0
+ burn_state = FLAMMABLE
+ burntime = 20
w_class = 4
/obj/item/weapon/moneybag/attack_hand(user as mob)
diff --git a/code/modules/mob/living/carbon/_defines.dm b/code/modules/mob/living/carbon/_defines.dm
index 2abbbf91cbc..163ce8f7c8d 100644
--- a/code/modules/mob/living/carbon/_defines.dm
+++ b/code/modules/mob/living/carbon/_defines.dm
@@ -4,7 +4,7 @@
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point
-#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point
+#define HEAT_DAMAGE_LEVEL_3 10 //Amount of damage applied when your body temperature passes the 1000K point
#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point
#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 3c18cddb18f..a4381ebf7a6 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -551,12 +551,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
visible_message("[src] has thrown [thrown_thing].")
newtonian_move(get_dir(target, src))
thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src)
-/*
-/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- ..()
- src.IgniteMob()
- bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10)
-*/
+
/mob/living/carbon/can_use_hands()
if(handcuffed)
return 0
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index b2b71d60545..1800adb31a8 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -487,14 +487,15 @@
return
if(RESIST_HEAT in mutations)
return
- var/thermal_protection = get_thermal_protection()
+ if(on_fire)
+ var/thermal_protection = get_thermal_protection()
- if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
- return
- if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT)
- bodytemperature += 11
- else
- bodytemperature += BODYTEMP_HEATING_MAX
+ if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
+ return
+ if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT)
+ bodytemperature += 11
+ else
+ bodytemperature += (BODYTEMP_HEATING_MAX + (fire_stacks * 12))
/mob/living/carbon/human/proc/get_thermal_protection()
var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 2049d5fd21d..50576bcecad 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -151,9 +151,13 @@
/mob/living/proc/IgniteMob()
if(fire_stacks > 0 && !on_fire)
on_fire = 1
+ visible_message("[src] catches fire!", \
+ "You're set on fire!")
set_light(light_range + 3,l_color = "#ED9200")
throw_alert("fire", /obj/screen/alert/fire)
update_fire()
+ return 1
+ return 0
/mob/living/proc/ExtinguishMob()
if(on_fire)
@@ -167,14 +171,20 @@
return
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
- fire_stacks = Clamp(fire_stacks + add_fire_stacks, -20, 20)
+ fire_stacks = Clamp(fire_stacks + add_fire_stacks, -20, 20)
+ if(on_fire && fire_stacks <= 0)
+ ExtinguishMob()
/mob/living/proc/handle_fire()
- if(fire_stacks < 0)
- fire_stacks++ //If we've doused ourselves in water to avoid fire, dry off slowly
- fire_stacks = min(0, fire_stacks)//So we dry ourselves back to default, nonflammable.
+ if(fire_stacks < 0) //If we've doused ourselves in water to avoid fire, dry off slowly
+ fire_stacks = min(0, fire_stacks + 1)//So we dry ourselves back to default, nonflammable.
if(!on_fire)
return 1
+ if(fire_stacks > 0)
+ adjust_fire_stacks(-0.1) //the fire is slowly consumed
+ else
+ ExtinguishMob()
+ return
var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
if(G.oxygen < 1)
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
@@ -183,7 +193,7 @@
location.hotspot_expose(700, 50, 1)
/mob/living/fire_act()
- adjust_fire_stacks(0.5)
+ adjust_fire_stacks(3)
IgniteMob()
//Mobs on Fire end
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index d2dbd5f14f2..2d08100e5e7 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -560,16 +560,24 @@
return 0
return 1
+/mob/living/simple_animal/handle_fire()
+ return
+
+/mob/living/simple_animal/update_fire()
+ return
+
+/mob/living/simple_animal/IgniteMob()
+ return 0
+
+/mob/living/simple_animal/ExtinguishMob()
+ return
+
/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE)
if(damage <= force_threshold || !damage_coeff[damagetype])
visible_message("[src] looks unharmed from the damage.")
else
apply_damage(damage, damagetype)
-
-/mob/living/simple_animal/update_fire()
- return
-
/mob/living/simple_animal/update_transform()
var/matrix/ntransform = matrix(transform) //aka transform.Copy()
var/changed = 0
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index e8db4c58110..513233912f2 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -10,6 +10,7 @@
var/obj/item/weapon/pen/haspen //The stored pen.
var/obj/item/weapon/toppaper //The topmost piece of paper.
slot_flags = SLOT_BELT
+ burn_state = FLAMMABLE
/obj/item/weapon/clipboard/New()
update_icon()
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 12f9e13a4e9..0dcff2dcee2 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -5,6 +5,7 @@
icon_state = "folder"
w_class = 2
pressure_resistance = 2
+ burn_state = FLAMMABLE
/obj/item/weapon/folder/blue
desc = "A blue folder."
@@ -39,7 +40,7 @@
if(!n_name)
return
n_name = sanitize(copytext(n_name, 1, MAX_NAME_LEN))
-
+
if((loc == usr || Adjacent(usr)) && usr.stat == 0)
name = "folder[(n_name ? text("- '[n_name]'") : null)]"
return
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index a3ec39243a9..492ea726739 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -16,6 +16,8 @@
pressure_resistance = 0
slot_flags = SLOT_HEAD
body_parts_covered = HEAD
+ burn_state = FLAMMABLE
+ burntime = 5
attack_verb = list("bapped")
var/info //What's actually written on the paper.
@@ -289,30 +291,6 @@
\[hr\] : Adds a horizontal rule.