diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm
index 88e2d685f57..d2fb4eec567 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol.dm
@@ -1126,7 +1126,7 @@
/datum/reagent/consumable/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST && prob(20))
if(M.on_fire)
- M.adjust_fire_stacks(3)
+ M.adjust_fire_stacks(6)
/datum/reagent/consumable/ethanol/dragons_breath/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
@@ -1148,7 +1148,7 @@
if(prob(2 * volume))
to_chat(M, "OH GOD OH GOD PLEASE NO!!")
if(M.on_fire)
- M.adjust_fire_stacks(5)
+ M.adjust_fire_stacks(20)
if(prob(50))
to_chat(M, "IT BURNS!!!!")
M.visible_message("[M] is consumed in flames!")
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm
index 7761772a44c..f9c98130549 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm
@@ -1,3 +1,80 @@
+/datum/reagent/phlogiston
+ name = "phlogiston"
+ id = "phlogiston"
+ description = "It appears to be liquid fire."
+ reagent_state = LIQUID
+ color = "#FFAF00"
+ process_flags = ORGANIC | SYNTHETIC
+ var/temp_fire = 4000
+ var/temp_deviance = 1000
+ var/size_divisor = 40
+ var/mob_burning = 6.6 // 33
+
+/datum/reagent/phlogiston/reaction_turf(turf/T, volume)
+ if(holder.chem_temp <= T0C - 50)
+ return
+ var/radius = min(max(0, volume / size_divisor), 8)
+ fireflash_sm(T, radius, rand(temp_fire - temp_deviance, temp_fire + temp_deviance), 500)
+
+/datum/reagent/phlogiston/reaction_mob(mob/living/M, method = TOUCH, volume)
+ if(holder.chem_temp <= T0C - 50)
+ return
+ M.adjust_fire_stacks(mob_burning)
+ M.IgniteMob()
+ if(method == INGEST)
+ M.adjustFireLoss(min(max(15, volume * 3), 45))
+ to_chat(M, "It burns!")
+ M.emote("scream")
+
+/datum/reagent/phlogiston/on_mob_life(mob/living/M)
+ if(holder.chem_temp <= T0C - 50)
+ return
+ M.adjust_fire_stacks(0.4)
+ M.IgniteMob()
+ return ..()
+
+/datum/reagent/phlogiston/firedust
+ name = "phlogiston dust"
+ id = "phlogiston_dust"
+ description = "And this is solid fire. However that works."
+ temp_fire = 1500
+ temp_deviance = 500
+ size_divisor = 80
+ mob_burning = 3 // 15
+
+/datum/reagent/napalm
+ name = "napalm"
+ id = "napalm"
+ description = "A highly flammable jellied fuel."
+ reagent_state = LIQUID
+ process_flags = ORGANIC | SYNTHETIC
+ color = "#C86432"
+
+/datum/reagent/napalm/reaction_temperature(exposed_temperature, exposed_volume)
+ if(exposed_temperature > T0C + 100)
+ var/radius = min(max(0, volume * 0.15), 8)
+ fireflash_sm(get_turf(holder.my_atom), radius, rand(3000, 6000), 500)
+ if(holder)
+ holder.del_reagent(id)
+
+/datum/reagent/napalm/reaction_turf(turf/T, volume)
+ if(isspaceturf(T))
+ return
+ if(!T.reagents)
+ T.create_reagents(volume)
+ T.reagents.add_reagent("napalm", volume)
+
+/datum/reagent/napalm/reaction_mob(mob/living/M, method = TOUCH, volume)
+ if(method == TOUCH)
+ if(M.on_fire)
+ M.adjust_fire_stacks(14)
+ M.emote("scream")
+
+/datum/reagent/napalm/on_mob_life(mob/living/M)
+ if(M.on_fire)
+ M.adjust_fire_stacks(2)
+ return ..()
+
/datum/reagent/fuel
name = "Welding fuel"
id = "fuel"
@@ -8,6 +85,7 @@
drink_name = "Glass of welder fuel"
drink_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
taste_message = "mistakes"
+ process_flags = ORGANIC | SYNTHETIC
var/max_radius = 7
var/min_radius = 0
var/volume_radius_modifier = -0.15
@@ -19,6 +97,11 @@
var/volume_explosion_radius_modifier = 0
var/combustion_temp = T0C + 200
+/datum/reagent/fuel/on_mob_life(mob/living/M)
+ if(M.on_fire)
+ M.adjust_fire_stacks(0.4)
+ return ..()
+
/datum/reagent/fuel/reaction_temperature(exposed_temperature, exposed_volume)
if(exposed_temperature > combustion_temp)
if(volume < 1)
@@ -48,9 +131,8 @@
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite!
if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
- ..()
+ if(M.on_fire)
+ M.adjust_fire_stacks(6)
/datum/reagent/plasma
name = "Plasma"
@@ -76,10 +158,10 @@
C.adjustPlasma(10)
return ..() | update_flags
-/datum/reagent/plasma/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma is stronger than fuel!
+/datum/reagent/plasma/reaction_mob(mob/living/M, method = TOUCH, volume)//Splashing people with plasma is stronger than fuel!
if(method == TOUCH)
- M.adjust_fire_stacks(volume / 5)
- ..()
+ if(M.on_fire)
+ M.adjust_fire_stacks(6)
/datum/reagent/thermite
@@ -91,6 +173,11 @@
process_flags = ORGANIC | SYNTHETIC
taste_message = "rust"
+/datum/reagent/thermite/reaction_mob(mob/living/M, method= TOUCH, volume)
+ if(method == TOUCH)
+ if(M.on_fire)
+ M.adjust_fire_stacks(20)
+
/datum/reagent/thermite/reaction_temperature(exposed_temperature, exposed_volume)
var/turf/simulated/S = holder.my_atom
if(!istype(S))
@@ -140,11 +227,9 @@
taste_message = null
/datum/reagent/clf3/on_mob_life(mob/living/M)
- var/update_flags = STATUS_UPDATE_NONE
- M.adjust_fire_stacks(2)
- var/burndmg = max(0.3*M.fire_stacks, 0.3)
- update_flags |= M.adjustFireLoss(burndmg, FALSE)
- return ..() | update_flags
+ if(M.on_fire)
+ M.adjust_fire_stacks(1)
+ return ..()
/datum/reagent/clf3/reaction_turf(turf/T, volume)
if(volume < 3)
@@ -152,11 +237,14 @@
var/radius = min((volume - 3) * 0.15, 3)
fireflash_sm(T, radius, 4500 + volume * 500, 350)
-/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, volume)
- if(method == TOUCH)
- M.adjust_fire_stacks(min(volume/5, 10))
+/datum/reagent/clf3/reaction_mob(mob/living/M, method = TOUCH, volume)
+ if(method == TOUCH || method == INGEST)
+ M.adjust_fire_stacks(10)
M.IgniteMob()
- M.bodytemperature += 30
+ if(method == INGEST)
+ M.adjustFireLoss(min(max(30, volume * 6), 90))
+ to_chat(M, "It burns!")
+ M.emote("scream")
/datum/reagent/sorium
name = "Sorium"
@@ -224,6 +312,7 @@
description = "Makes a very bright flash."
reagent_state = LIQUID
color = "#FFFF00"
+ penetrates_skin = TRUE
/datum/reagent/smoke_powder
name = "Smoke Powder"
@@ -238,42 +327,7 @@
description = "Makes a deafening noise."
reagent_state = LIQUID
color = "#0000FF"
-
-/datum/reagent/phlogiston
- name = "Phlogiston"
- id = "phlogiston"
- description = "Catches you on fire and makes you ignite."
- reagent_state = LIQUID
- color = "#FF9999"
- process_flags = ORGANIC | SYNTHETIC
-
-/datum/reagent/phlogiston/on_mob_life(mob/living/M)
- var/update_flags = STATUS_UPDATE_NONE
- M.adjust_fire_stacks(1)
- var/burndmg = max(0.3*M.fire_stacks, 0.3)
- update_flags |= M.adjustFireLoss(burndmg, FALSE)
- return ..() | update_flags
-
-/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume)
- M.adjust_fire_stacks(1)
- M.IgniteMob()
- ..()
-
-/datum/reagent/napalm
- name = "Napalm"
- id = "napalm"
- description = "Very flammable."
- reagent_state = LIQUID
- color = "#FF9999"
- process_flags = ORGANIC | SYNTHETIC
-
-/datum/reagent/napalm/on_mob_life(mob/living/M)
- M.adjust_fire_stacks(1)
- return ..()
-
-/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume)
- if(method == TOUCH)
- M.adjust_fire_stacks(min(volume/4, 20))
+ penetrates_skin = TRUE
/datum/reagent/cryostylane
name = "Cryostylane"
@@ -296,6 +350,10 @@
holder.temperature_reagents(holder.chem_temp - 200)
..()
+/datum/reagent/cryostylane/reaction_mob(mob/living/M, method = TOUCH, volume)
+ if(method == TOUCH)
+ M.ExtinguishMob()
+
/datum/reagent/cryostylane/reaction_turf(turf/T, volume)
if(volume >= 5)
for(var/mob/living/carbon/slime/M in T)
@@ -333,8 +391,7 @@
/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, volume)
// Put out fire
if(method == TOUCH)
- M.adjust_fire_stacks(-(volume / 5)) // more effective than water
- M.ExtinguishMob()
+ M.adjust_fire_stacks(-10) // more effective than water
/datum/reagent/firefighting_foam/reaction_obj(obj/O, volume)
O.extinguish()
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 6d8ea272cfe..5623023659b 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -23,8 +23,7 @@
/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
// Put out fire
- M.adjust_fire_stacks(-(volume / 10))
- M.ExtinguishMob()
+ M.adjust_fire_stacks(-(volume * 0.2))
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 6c0c1566414..55c7de4d326 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -212,6 +212,40 @@ datum/chemical_reaction/flash_powder
continue
C.Stun(5)
+/datum/chemical_reaction/phlogiston
+ name = "Phlogiston"
+ id = "phlogiston"
+ result = "phlogiston"
+ required_reagents = list("phosphorus" = 1, "plasma" = 1, "sacid" = 1, "stabilizing_agent" = 1)
+ result_amount = 4
+ mix_message = "The substance becomes sticky and extremely warm."
+
+/datum/chemical_reaction/phlogiston_dust
+ name = "Phlogiston Dust"
+ id = "phlogiston_dust"
+ result = "phlogiston_dust"
+ required_reagents = list("phlogiston" = 1, "charcoal" = 1, "phosphorus" = 1, "sulfur" = 1)
+ result_amount = 2
+ mix_message = "The substance becomes a pile of burning dust."
+
+/datum/chemical_reaction/phlogiston_fire //This MUST be above the smoke recipe.
+ name = "Phlogiston Fire"
+ id = "phlogiston_fire"
+ result = "phlogiston"
+ required_reagents = list("phosphorus" = 1, "plasma" = 1, "sacid" = 1)
+ mix_message = "The substance erupts into wild flames."
+
+/datum/chemical_reaction/phlogiston_fire/on_reaction(datum/reagents/holder, created_volume)
+ fireflash(get_turf(holder.my_atom), min(max(2, round(created_volume / 10)), 8))
+
+/datum/chemical_reaction/napalm
+ name = "Napalm"
+ id = "napalm"
+ result = "napalm"
+ required_reagents = list("fuel" = 1, "sugar" = 1, "ethanol" = 1)
+ result_amount = 3
+ mix_message = "The mixture congeals into a sticky gel."
+
/datum/chemical_reaction/smoke_powder
name = "smoke_powder"
id = "smoke_powder"
@@ -337,28 +371,6 @@ datum/chemical_reaction/flash_powder
if(ears.ear_damage >= 5)
to_chat(M, "Your ears start to ring!")
-
-/datum/chemical_reaction/phlogiston
- name = "phlogiston"
- id = "phlogiston"
- result = "phlogiston"
- required_reagents = list("phosphorus" = 1, "sacid" = 1, "plasma" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- var/turf/simulated/T = get_turf(holder.my_atom)
- for(var/turf/simulated/turf in range(min(created_volume/10,4),T))
- new /obj/effect/hotspot(turf)
-
-/datum/chemical_reaction/napalm
- name = "Napalm"
- id = "napalm"
- result = "napalm"
- required_reagents = list("sugar" = 1, "fuel" = 1, "ethanol" = 1 )
- result_amount = 1
-
/datum/chemical_reaction/cryostylane
name = "cryostylane"
id = "cryostylane"