[MIRROR] Prevents the most common case of fire settling with an excited group (#2845)

* Prevents the most common case of fire settling with an excited group (#56317)

Basically when a group with a breakdown timer one tick away from settling merges with a group with hotspots in
it, and the one with a high breakdown timer is larger, the group would settle without respecting the timer of
the hotspot group, causing fwoosh levels of flame.

There's two other ways to achieve this, if you had one group of tiles that are close to the same gasmix as
another
group, and they became inactive, we'd have the same issue. I've solved this by moving the hotspot subprocess to
after active turfs and before excited groups, just for safety ya feel me?

It's still in theory possible, but much much harder. The hard solution to this would be to integrate heat with
how we reset excited group timers, and split excited groups into smaller portions, but I'm not sure I like that
idea.
I need to mull it over.

* Prevents the most common case of fire settling with an excited group

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
This commit is contained in:
SkyratBot
2021-01-23 19:09:23 +01:00
committed by GitHub
parent 78c6f6d528
commit 493ee57b09
3 changed files with 25 additions and 22 deletions
@@ -439,6 +439,7 @@
if(should_display || SSair.display_all_groups)
E.hide_turfs()
display_turfs()
breakdown_cooldown = min(breakdown_cooldown, E.breakdown_cooldown) //Take the smaller of the two options
dismantle_cooldown = 0
else
SSair.excited_groups -= src
@@ -446,11 +447,12 @@
var/turf/open/T = t
T.excited_group = E
E.turf_list += T
E.dismantle_cooldown = 0
E.should_display = E.should_display | should_display
if(E.should_display || SSair.display_all_groups)
hide_turfs()
E.display_turfs()
E.breakdown_cooldown = min(breakdown_cooldown, E.breakdown_cooldown)
E.dismantle_cooldown = 0
/datum/excited_group/proc/reset_cooldowns()
breakdown_cooldown = 0