Goonstation Forums
Showers don't put out fires - Printable Version

+- Goonstation Forums (https://forum.ss13.co)
+-- Forum: Discussion (https://forum.ss13.co/forumdisplay.php?fid=6)
+--- Forum: Bug Reports (https://forum.ss13.co/forumdisplay.php?fid=9)
+---- Forum: Features (https://forum.ss13.co/forumdisplay.php?fid=23)
+---- Thread: Showers don't put out fires (/showthread.php?tid=6936)



Showers don't put out fires - NateTheSquid - 08-19-2016

See title. I was on heavy fire, put myself mostly out, turned on a shower and stood under it. Did absolutely nothing, died. Water puts out fire, so, logically showers should work.


RE: Showers don't put out fires - Arborinus - 08-19-2016

http://forum.ss13.co/showthread.php?tid=709


RE: Showers don't put out fires - Noah Buttes - 08-19-2016

(08-19-2016, 10:37 AM)Arborinus Wrote: http://forum.ss13.co/showthread.php?tid=709

Actually, that's not quite correct.

Let's take a look at the code to see why! For Science! 


Here's the reaction_mob() for firefoam
Code:
            reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
                src = null
                if (method == TOUCH)
                    var/mob/living/L = M
                    if (istype(L) && L.burning)
                        L.update_burning(-50)
                return

And here's the equivalent for water:

Code:
            reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
                ..()
                src = null
                if(!volume)
                    volume = 10
                if(method == TOUCH)
                    var/mob/living/L = M
                    if(istype(L) && L.burning)
                        L.update_burning(-volume)
                return

Both reagents will reduce burning when applied to someone, they just scale differently.

Water reduces burning by 1 per unit of water splashed on the person, while firefoam reduces it by a flat 50 regardless of volume. 

Here's the relevant part of shower code
Code:
    proc/spray()

        src.last_spray = world.time

        if (src && src.default_reagent)

            src.reagents.add_reagent(default_reagent,120)

            //also add some water for ~wet floor~ immersion

            src.reagents.add_reagent("water",40)




        if (src && src.reagents.total_volume) //We still have reagents after, I dunno, a potassium reaction




            // "blood - 2.7867e-018" because remove_any() uses ratios (Convair880).

            for (var/current_id in src.reagents.reagent_list)

                var/datum/reagent/current_reagent = src.reagents.reagent_list[current_id]

                if (current_reagent.id == "water" || current_reagent.id == "cleaner")

                    continue

                if (current_reagent.volume < 0.5)

                    src.reagents.del_reagent(current_reagent.id)




            var/datum/effects/system/steam_spread/steam = unpool(/datum/effects/system/steam_spread)

            steam.set_up(5, 0, get_turf(src))

            steam.attach(src)

            steam.start()




            for (var/atom/A in range(1, get_turf(src))) // View and oview are unreliable as heck, apparently?

                if ( A == src ) continue




                // Added. We don't care about unmodified shower heads, though (Convair880).

                if (ismob(A))

                    var/mob/M = A

                    if (M.stat != 2)

                        if ((!src.reagents.has_reagent("water") && !src.reagents.has_reagent("cleaner")) || ((src.reagents.has_reagent("water") && src.reagents.has_reagent("cleaner")) && src.reagents.reagent_list.len > 2))

                            logTheThing("combat", M, null, "is hit by chemicals [log_reagents(src)] from a shower head at [log_loc(M)].")




                src.reagents.reaction(A, 1, 40) // why the FUCK was this ingest ?? ?? ? ?? ? ?? ? ?? ? ???




        spawn(50)

            if (src && src.reagents.total_volume)

                src.reagents.del_reagent(default_reagent)

                src.reagents.remove_any(40)




        src.use_power(50)

        return

Note that the 1 in src.reagents.reaction(A, 1, 40) means it's a touch reaction.

In other words, code-wise, a shower SHOULD be putting out people who are on fire.

If I had to guess why people aren't getting properly extinguished, I'd say that it probably has something to do with the relatively small amount of water being splashed onto people. Of those 40 units in the reaction, there are 30 units of space cleaner and only 10 units of water.
10 units every half second is going to take a while to extinguish any burning assistants under the showerhead.


RE: Showers don't put out fires - atamusvaleo - 08-19-2016

If you've seen any of these silly people doing the "light yourself on fire" challenge, you'll well understand that a shower isn't going to do much for you.