Example #1
0
        private void StartSpray()
        {
            SnowUtility.AddSnowRadial(this.OccupiedRect().RandomCell, Map, 4, -0.06f);

            spraySustainer          = SoundStarter.TrySpawnSustainer(SoundDefOf.GeyserSpray, new TargetInfo(Position, Map));
            spraySustainerStartTick = Find.TickManager.TicksGame;
        }
Example #2
0
        protected override void Impact(Thing hitThing)
        {
            SnowUtility.AddSnowRadial(Position, Map, 2f, 1f);
            MoteThrown moteThrown = (MoteThrown)ThingMaker.MakeThing(ThingDefOf.Mote_Smoke, null);

            moteThrown.Scale         = Rand.Range(1.5f, 2.5f) * 2;
            moteThrown.rotationRate  = Rand.Range(-30f, 30f);
            moteThrown.exactPosition = Position.ToVector3();
            moteThrown.SetVelocity((float)Rand.Range(30, 40), Rand.Range(0.5f, 0.7f));
            GenSpawn.Spawn(moteThrown, Position, Map, WipeMode.Vanish);
            base.Impact(hitThing);
        }
Example #3
0
        public override void CompTick()
        {
            base.CompTick();
            if (parent.IsHashIntervalTick(60))
            {
                if (Temperature > props.heatSuckMinTemperature)
                {
                    GenTemperature.PushHeat(parent.Position, parent.MapHeld, -props.coldPerSecond);
                }

                SnowUtility.AddSnowRadial(parent.Position, parent.Map, props.snowRadius, props.snowDepth);
            }
        }
        private void StartSpray()
        {
            SnowUtility.AddSnowRadial(this.OccupiedRect().RandomCell, base.Map, 4f, -0.06f);
            this.spraySustainer          = SoundDefOf.GeyserSpray.TrySpawnSustainer(new TargetInfo(base.Position, base.Map, false));
            this.spraySustainerStartTick = Find.TickManager.TicksGame;
            int Count = 0;

            foreach (Thing thing in GenRadial.RadialDistinctThingsAround(this.Position, this.Map, 10, true))
            {
                if (thing.def.defName == "AB_TarPuddle")
                {
                    Count++;
                }
            }
            if (Count < 15)
            {
                for (int iteration = 0; iteration < 3; iteration++)
                {
                    IntVec3 intVec;
                    if (!CellFinder.TryRandomClosewalkCellNear(this.Position, this.Map, 7, out intVec))
                    {
                        break;
                    }
                    Plant plant = intVec.GetPlant(this.Map);
                    if (plant != null && plant.def.defName != "AB_TarPuddle")
                    {
                        plant.Destroy(DestroyMode.Vanish);
                        Thing plantToSpawn = GenSpawn.Spawn(ThingDef.Named("AB_TarPuddle"), intVec, this.Map, WipeMode.Vanish);
                    }
                    else if (plant == null)
                    {
                        Thing plantToSpawn = GenSpawn.Spawn(ThingDef.Named("AB_TarPuddle"), intVec, this.Map, WipeMode.Vanish);
                    }
                }
            }
        }
Example #5
0
        protected override bool TryCastShot()
        {
            Pawn p   = this.CasterPawn;
            Map  map = this.CasterPawn.Map;
            CompAbilityUserMagic comp = this.CasterPawn.GetComp <CompAbilityUserMagic>();

            pawns.Clear();
            plants.Clear();
            GenClamor.DoClamor(p, this.UseAbilityProps.TargetAoEProperties.range, ClamorDefOf.Ability);
            Effecter snapeFreezeED = TorannMagicDefOf.TM_SnapFreezeED.Spawn();

            snapeFreezeED.Trigger(new TargetInfo(this.currentTarget.Cell, map, false), new TargetInfo(this.currentTarget.Cell, map, false));
            snapeFreezeED.Cleanup();
            SoundInfo info = SoundInfo.InMap(new TargetInfo(this.currentTarget.Cell, map, false), MaintenanceType.None);

            info.pitchFactor  = .4f;
            info.volumeFactor = 1.2f;
            TorannMagicDefOf.TM_WindLowSD.PlayOneShot(info);
            TargetInfo ti = new TargetInfo(this.currentTarget.Cell, map, false);

            TM_MoteMaker.MakeOverlay(ti, TorannMagicDefOf.TM_Mote_PsycastAreaEffect, map, Vector3.zero, 3f, 0f, .1f, .4f, 1.2f, -3f);
            float classBonus = 1f;

            if (p.story != null && p.story.traits != null && p.story.traits.HasTrait(TorannMagicDefOf.HeartOfFrost))
            {
                classBonus = 1.5f;
            }
            if (this.currentTarget != null && p != null && comp != null)
            {
                this.arcaneDmg = comp.arcaneDmg;
                this.TargetsAoE.Clear();
                this.FindTargets();
                float energy = -125000 * this.arcaneDmg * classBonus;
                GenTemperature.PushHeat(this.currentTarget.Cell, p.Map, energy);
                for (int i = 0; i < pawns.Count; i++)
                {
                    if (!pawns[i].RaceProps.IsMechanoid && pawns[i].RaceProps.body.AllPartsVulnerableToFrostbite.Count > 0)
                    {
                        float distanceModifier = 1f / (pawns[i].Position - currentTarget.Cell).LengthHorizontal;
                        if (distanceModifier > 1f)
                        {
                            distanceModifier = 1f;
                        }
                        int bites = Mathf.RoundToInt(Rand.Range(1f, 5f) * classBonus);
                        for (int j = 0; j < bites; j++)
                        {
                            if (Rand.Chance(TM_Calc.GetSpellSuccessChance(this.CasterPawn, pawns[i], true)) && Rand.Chance(distanceModifier))
                            {
                                TM_Action.DamageEntities(pawns[i], pawns[i].def.race.body.AllPartsVulnerableToFrostbite.RandomElement(), Rand.Range(10, 20) * distanceModifier, 1f, DamageDefOf.Frostbite, p);
                            }
                            if (Rand.Chance(TM_Calc.GetSpellSuccessChance(this.CasterPawn, pawns[i], true)) && Rand.Chance(distanceModifier))
                            {
                                HealthUtility.AdjustSeverity(pawns[i], HediffDefOf.Hypothermia, distanceModifier / 5f);
                            }
                        }
                    }
                }
                for (int i = 0; i < plants.Count; i++)
                {
                    float distanceModifier = 1f / (plants[i].Position - currentTarget.Cell).LengthHorizontal;
                    if (distanceModifier > 1f)
                    {
                        distanceModifier = 1f;
                    }
                    if (plants[i].def.plant.IsTree)
                    {
                        if (Rand.Chance(distanceModifier / 2f))
                        {
                            plants[i].MakeLeafless(Plant.LeaflessCause.Cold);
                        }
                    }
                    else
                    {
                        if (Rand.Chance(distanceModifier))
                        {
                            plants[i].MakeLeafless(Plant.LeaflessCause.Cold);
                        }
                    }
                    plants[i].Notify_ColorChanged();
                }
                List <IntVec3> cellList = GenRadial.RadialCellsAround(this.currentTarget.Cell, this.UseAbilityProps.TargetAoEProperties.range, true).ToList();
                bool           raining  = map.weatherManager.RainRate > 0f || map.weatherManager.SnowRate > 0f;
                for (int i = 0; i < cellList.Count; i++)
                {
                    cellList[i] = cellList[i].ClampInsideMap(map);
                    SnowUtility.AddSnowRadial(cellList[i], map, 2.4f, Rand.Range(.08f, .13f));
                    TM_FleckMaker.ThrowGenericFleck(FleckDefOf.AirPuff, cellList[i].ToVector3Shifted(), map, 2.5f, .05f, .05f, Rand.Range(2f, 3f), Rand.Range(-60, 60), .5f, -70, Rand.Range(0, 360));
                }
                List <IntVec3> windList = GenRadial.RadialCellsAround(this.currentTarget.Cell, this.UseAbilityProps.TargetAoEProperties.range + 1, true).Except(cellList).ToList();
                for (int i = 0; i < windList.Count; i++)
                {
                    windList[i] = windList[i].ClampInsideMap(map);
                    Vector3 angle = TM_Calc.GetVector(windList[i], this.currentTarget.Cell);
                    TM_FleckMaker.ThrowGenericFleck(FleckDefOf.AirPuff, windList[i].ToVector3Shifted(), map, Rand.Range(1.2f, 2f), .45f, Rand.Range(0f, .25f), .5f, -200, Rand.Range(3, 5), (Quaternion.AngleAxis(90, Vector3.up) * angle).ToAngleFlat(), Rand.Range(0, 360));
                }
            }

            this.burstShotsLeft = 0;
            return(true);
        }
Example #6
0
        private void DoComplexCalcs()
        {
            bool flag = false;

            Profiler.BeginSample("Determine flammability");
            Fire.flammableList.Clear();
            this.flammabilityMax = 0f;
            if (!base.Position.GetTerrain(base.Map).extinguishesFire)
            {
                if (this.parent == null)
                {
                    if (base.Position.TerrainFlammableNow(base.Map))
                    {
                        this.flammabilityMax = base.Position.GetTerrain(base.Map).GetStatValueAbstract(StatDefOf.Flammability, null);
                    }
                    List <Thing> list = base.Map.thingGrid.ThingsListAt(base.Position);
                    for (int i = 0; i < list.Count; i++)
                    {
                        Thing thing = list[i];
                        if (thing is Building_Door)
                        {
                            flag = true;
                        }
                        float statValue = thing.GetStatValue(StatDefOf.Flammability, true);
                        if (statValue >= 0.01f)
                        {
                            Fire.flammableList.Add(list[i]);
                            if (statValue > this.flammabilityMax)
                            {
                                this.flammabilityMax = statValue;
                            }
                            if (this.parent == null && this.fireSize > 0.4f && list[i].def.category == ThingCategory.Pawn)
                            {
                                list[i].TryAttachFire(this.fireSize * 0.2f);
                            }
                        }
                    }
                }
                else
                {
                    Fire.flammableList.Add(this.parent);
                    this.flammabilityMax = this.parent.GetStatValue(StatDefOf.Flammability, true);
                }
            }
            Profiler.EndSample();
            if (this.flammabilityMax < 0.01f)
            {
                this.Destroy(DestroyMode.Vanish);
            }
            else
            {
                Profiler.BeginSample("Do damage");
                Thing thing2;
                if (this.parent != null)
                {
                    thing2 = this.parent;
                }
                else if (Fire.flammableList.Count > 0)
                {
                    thing2 = Fire.flammableList.RandomElement <Thing>();
                }
                else
                {
                    thing2 = null;
                }
                if (thing2 != null)
                {
                    if (this.fireSize >= 0.4f || thing2 == this.parent || thing2.def.category != ThingCategory.Pawn)
                    {
                        this.DoFireDamage(thing2);
                    }
                }
                Profiler.EndSample();
                if (base.Spawned)
                {
                    Profiler.BeginSample("Room heat");
                    float num = this.fireSize * 160f;
                    if (flag)
                    {
                        num *= 0.15f;
                    }
                    GenTemperature.PushHeat(base.Position, base.Map, num);
                    Profiler.EndSample();
                    Profiler.BeginSample("Snow clear");
                    if (Rand.Value < 0.4f)
                    {
                        float radius = this.fireSize * 3f;
                        SnowUtility.AddSnowRadial(base.Position, base.Map, radius, -(this.fireSize * 0.1f));
                    }
                    Profiler.EndSample();
                    Profiler.BeginSample("Grow/extinguish");
                    this.fireSize += 0.00055f * this.flammabilityMax * 150f;
                    if (this.fireSize > 1.75f)
                    {
                        this.fireSize = 1.75f;
                    }
                    if (base.Map.weatherManager.RainRate > 0.01f)
                    {
                        if (this.VulnerableToRain())
                        {
                            if (Rand.Value < 6f)
                            {
                                base.TakeDamage(new DamageInfo(DamageDefOf.Extinguish, 10f, 0f, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown, null));
                            }
                        }
                    }
                    Profiler.EndSample();
                }
            }
        }
 private void StartSpray()
 {
     SnowUtility.AddSnowRadial(this.OccupiedRect().RandomCell, base.Map, 4f, -0.06f);
     this.spraySustainer          = SoundDefOf.GeyserSpray.TrySpawnSustainer(new TargetInfo(base.Position, base.Map, false));
     this.spraySustainerStartTick = Find.TickManager.TicksGame;
 }
Example #8
0
        public static bool DoComplexCalcs(Fire __instance)
        {
            bool flag = false;
            //flammableList.Clear();
            List <Thing> flammableList = new List <Thing>();

            flammabilityMax(__instance) = 0.0f;
            if (null != __instance.Map)
            {
                if (!__instance.Position.GetTerrain(__instance.Map).extinguishesFire)
                {
                    if (__instance.parent == null)
                    {
                        if (__instance.Position.TerrainFlammableNow(__instance.Map))
                        {
                            flammabilityMax(__instance) = __instance.Position.GetTerrain(__instance.Map).GetStatValueAbstract(StatDefOf.Flammability, (ThingDef)null);
                        }
                        List <Thing> thingList = __instance.Map.thingGrid.ThingsListAt(__instance.Position);
                        for (int index = 0; index < thingList.Count; ++index)
                        {
                            Thing thing = thingList[index];
                            if (thing is Building_Door)
                            {
                                flag = true;
                            }
                            float statValue = thing.GetStatValue(StatDefOf.Flammability, true);
                            if ((double)statValue >= 0.00999999977648258)
                            {
                                flammableList.Add(thingList[index]);
                                if ((double)statValue > (double)flammabilityMax(__instance))
                                {
                                    flammabilityMax(__instance) = statValue;
                                }
                                if (__instance.parent == null && (double)__instance.fireSize > 0.400000005960464 && (thingList[index].def.category == ThingCategory.Pawn && Rand.Chance(FireUtility.ChanceToAttachFireCumulative(thingList[index], 150f))))
                                {
                                    thingList[index].TryAttachFire(__instance.fireSize * 0.2f);
                                }
                            }
                        }
                    }
                    else
                    {
                        flammableList.Add(__instance.parent);
                        flammabilityMax(__instance) = __instance.parent.GetStatValue(StatDefOf.Flammability, true);
                    }
                }
                if ((double)flammabilityMax(__instance) < 0.00999999977648258)
                {
                    __instance.Destroy(DestroyMode.Vanish);
                }
                else
                {
                    Thing targ = __instance.parent == null ? (flammableList.Count <= 0 ? (Thing)null : flammableList[Rand.Range(0, flammableList.Count)]) : __instance.parent;
                    if (targ != null && ((double)__instance.fireSize >= 0.400000005960464 || targ == __instance.parent || targ.def.category != ThingCategory.Pawn))
                    {
                        DoFireDamage(__instance, targ);
                    }
                    if (!__instance.Spawned)
                    {
                        return(false);
                    }
                    float energy = __instance.fireSize * 160f;
                    if (flag)
                    {
                        energy *= 0.15f;
                    }
                    GenTemperature.PushHeat(__instance.Position, __instance.Map, energy);
                    if ((double)Rand.Value < 0.400000005960464)
                    {
                        SnowUtility.AddSnowRadial(__instance.Position, __instance.Map, __instance.fireSize * 3f, (float)-((double)__instance.fireSize * 0.100000001490116));
                    }
                    __instance.fireSize += (float)(0.000549999997019768 * (double)flammabilityMax(__instance) * 150.0);
                    if ((double)__instance.fireSize > 1.75)
                    {
                        __instance.fireSize = 1.75f;
                    }
                    if ((double)__instance.Map.weatherManager.RainRate <= 0.00999999977648258 || !VulnerableToRain(__instance) || (double)Rand.Value >= 6.0)
                    {
                        return(false);
                    }
                    //__instance.TakeDamage(new DamageInfo(DamageDefOf.Extinguish, 10f, 0.0f, -1f, (Thing)null, (BodyPartRecord)null, (ThingDef)null, DamageInfo.SourceCategory.ThingOrUnknown, (Thing)null));
                    DamageInfo daminfo = new DamageInfo(DamageDefOf.Extinguish, 10f, 0.0f, -1f, (Thing)null, (BodyPartRecord)null, (ThingDef)null, DamageInfo.SourceCategory.ThingOrUnknown, (Thing)null);
                    DamageWorker.DamageResult dresult = new DamageWorker.DamageResult();
                    Thing_Patch.TakeDamage(__instance, ref dresult, daminfo);
                }
            }
            return(false);
        }
 public override void TargetEffects(LocalTargetInfo targetInfo)
 {
     base.TargetEffects(targetInfo);
     SnowUtility.AddSnowRadial(targetInfo.Cell, this.pawn.Map, 3f, 1f);
 }
Example #10
0
        private void DoComplexCalcs()
        {
            bool flag = false;

            flammableList.Clear();
            flammabilityMax = 0f;
            if (!base.Position.GetTerrain(base.Map).extinguishesFire)
            {
                if (parent == null)
                {
                    if (base.Position.TerrainFlammableNow(base.Map))
                    {
                        flammabilityMax = base.Position.GetTerrain(base.Map).GetStatValueAbstract(StatDefOf.Flammability);
                    }
                    List <Thing> list = base.Map.thingGrid.ThingsListAt(base.Position);
                    for (int i = 0; i < list.Count; i++)
                    {
                        Thing thing = list[i];
                        if (thing is Building_Door)
                        {
                            flag = true;
                        }
                        float statValue = thing.GetStatValue(StatDefOf.Flammability);
                        if (!(statValue < 0.01f))
                        {
                            flammableList.Add(list[i]);
                            if (statValue > flammabilityMax)
                            {
                                flammabilityMax = statValue;
                            }
                            if (parent == null && fireSize > 0.4f && list[i].def.category == ThingCategory.Pawn)
                            {
                                list[i].TryAttachFire(fireSize * 0.2f);
                            }
                        }
                    }
                }
                else
                {
                    flammableList.Add(parent);
                    flammabilityMax = parent.GetStatValue(StatDefOf.Flammability);
                }
            }
            if (flammabilityMax < 0.01f)
            {
                Destroy();
            }
            else
            {
                Thing thing2 = (parent != null) ? parent : ((flammableList.Count <= 0) ? null : flammableList.RandomElement());
                if (thing2 != null && (!(fireSize < 0.4f) || thing2 == parent || thing2.def.category != ThingCategory.Pawn))
                {
                    DoFireDamage(thing2);
                }
                if (base.Spawned)
                {
                    float num = fireSize * 160f;
                    if (flag)
                    {
                        num *= 0.15f;
                    }
                    GenTemperature.PushHeat(base.Position, base.Map, num);
                    if (Rand.Value < 0.4f)
                    {
                        float radius = fireSize * 3f;
                        SnowUtility.AddSnowRadial(base.Position, base.Map, radius, 0f - fireSize * 0.1f);
                    }
                    fireSize += 0.00055f * flammabilityMax * 150f;
                    if (fireSize > 1.75f)
                    {
                        fireSize = 1.75f;
                    }
                    if (base.Map.weatherManager.RainRate > 0.01f && VulnerableToRain() && Rand.Value < 6f)
                    {
                        TakeDamage(new DamageInfo(DamageDefOf.Extinguish, 10f));
                    }
                }
            }
        }
Example #11
0
        private void DoComplexCalcs()
        {
            bool flag = false;

            Fire.flammableList.Clear();
            this.flammabilityMax = 0f;
            if (!base.Position.GetTerrain(base.Map).extinguishesFire)
            {
                if (base.parent == null)
                {
                    if (base.Position.TerrainFlammableNow(base.Map))
                    {
                        this.flammabilityMax = base.Position.GetTerrain(base.Map).GetStatValueAbstract(StatDefOf.Flammability, null);
                    }
                    List <Thing> list = base.Map.thingGrid.ThingsListAt(base.Position);
                    for (int i = 0; i < list.Count; i++)
                    {
                        Thing thing = list[i];
                        if (thing is Building_Door)
                        {
                            flag = true;
                        }
                        float statValue = thing.GetStatValue(StatDefOf.Flammability, true);
                        if (!(statValue < 0.0099999997764825821))
                        {
                            Fire.flammableList.Add(list[i]);
                            if (statValue > this.flammabilityMax)
                            {
                                this.flammabilityMax = statValue;
                            }
                            if (base.parent == null && this.fireSize > 0.40000000596046448 && list[i].def.category == ThingCategory.Pawn)
                            {
                                list[i].TryAttachFire((float)(this.fireSize * 0.20000000298023224));
                            }
                        }
                    }
                }
                else
                {
                    Fire.flammableList.Add(base.parent);
                    this.flammabilityMax = base.parent.GetStatValue(StatDefOf.Flammability, true);
                }
            }
            if (this.flammabilityMax < 0.0099999997764825821)
            {
                this.Destroy(DestroyMode.Vanish);
            }
            else
            {
                Thing thing2 = (base.parent == null) ? ((Fire.flammableList.Count <= 0) ? null : Fire.flammableList.RandomElement()) : base.parent;
                if (thing2 != null && (!(this.fireSize < 0.40000000596046448) || thing2 == base.parent || thing2.def.category != ThingCategory.Pawn))
                {
                    this.DoFireDamage(thing2);
                }
                if (base.Spawned)
                {
                    float num = (float)(this.fireSize * 160.0);
                    if (flag)
                    {
                        num = (float)(num * 0.15000000596046448);
                    }
                    GenTemperature.PushHeat(base.Position, base.Map, num);
                    if (Rand.Value < 0.40000000596046448)
                    {
                        float radius = (float)(this.fireSize * 3.0);
                        SnowUtility.AddSnowRadial(base.Position, base.Map, radius, (float)(0.0 - this.fireSize * 0.10000000149011612));
                    }
                    this.fireSize += (float)(0.00054999999701976776 * this.flammabilityMax * 150.0);
                    if (this.fireSize > 1.75)
                    {
                        this.fireSize = 1.75f;
                    }
                    if (base.Map.weatherManager.RainRate > 0.0099999997764825821 && this.VulnerableToRain() && Rand.Value < 6.0)
                    {
                        base.TakeDamage(new DamageInfo(DamageDefOf.Extinguish, 10, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown));
                    }
                }
            }
        }
Example #12
0
        private void DoComplexCalcs()
        {
            bool cellContainsDoor = false;

            Profiler.BeginSample("Determine flammability");
            //Determine list of flammables in my cell
            flammableList.Clear();
            flammabilityMax = 0;
            if (Position.GetTerrain(Map).extinguishesFire)
            {
                //  immediately extinguish; we just leave flammabilityMax at 0
            }
            else if (parent == null)
            {
                if (Position.TerrainFlammableNow(Map))
                {
                    flammabilityMax = Position.GetTerrain(Map).GetStatValueAbstract(StatDefOf.Flammability);
                }

                var cellThings = Map.thingGrid.ThingsListAt(Position);
                for (int i = 0; i < cellThings.Count; i++)
                {
                    var ct = cellThings[i];
                    if (ct is Building_Door)
                    {
                        cellContainsDoor = true;
                    }

                    var thingFlam = ct.GetStatValue(StatDefOf.Flammability);

                    if (thingFlam < 0.01f)
                    {
                        continue;
                    }

                    //Record its flammability
                    flammableList.Add(cellThings[i]);
                    if (thingFlam > flammabilityMax)
                    {
                        flammabilityMax = thingFlam;
                    }

                    //If I'm a static fire and it's a pawn and I'm big, ignite it
                    if (parent == null && fireSize > MinSizeForIgniteMovables && cellThings[i].def.category == ThingCategory.Pawn)
                    {
                        cellThings[i].TryAttachFire(fireSize * 0.2f);
                    }
                }
            }
            else
            {
                //Consider only my parent
                flammableList.Add(parent);
                flammabilityMax = parent.GetStatValue(StatDefOf.Flammability);
            }
            Profiler.EndSample();     //Determine flammability

            //Destroy me if I have nothing to burn
            if (flammabilityMax < 0.01f)
            {
                Destroy();
                return;
            }

            Profiler.BeginSample("Do damage");
            {
                //Choose what I'm going to damage
                Thing damagee;
                if (parent != null)
                {
                    damagee = parent;                                                           //Damage parent
                }
                else if (flammableList.Count > 0)
                {
                    damagee = flammableList.RandomElement();            //Damage random flammable thing in cell
                }
                else
                {
                    damagee = null;
                }

                //Damage whatever we're supposed to damage
                if (damagee != null)
                {
                    //We don't damage the target if it's not our parent, it would attach a fire, and we're too small
                    //This is to avoid tiny fires igniting passing pawns
                    if (!(fireSize < MinSizeForIgniteMovables && damagee != parent && damagee.def.category == ThingCategory.Pawn))
                    {
                        DoFireDamage(damagee);
                    }
                }
            }
            Profiler.EndSample();     //Do damage

            //If still spawned (after doing damage)...
            if (Spawned)
            {
                Profiler.BeginSample("Room heat");
                //Push some heat
                float fireEnergy = fireSize * HeatPerFireSizePerInterval;
                //Hack to reduce impact on doors, otherwise they hit insane temperatures fast
                if (cellContainsDoor)
                {
                    fireEnergy *= HeatFactorWhenDoorPresent;
                }
                GenTemperature.PushHeat(Position, Map, fireEnergy);
                Profiler.EndSample();         //Room heat

                Profiler.BeginSample("Snow clear");
                if (Rand.Value < 0.4f)
                {
                    //Clear some snow around the fire
                    float snowClearRadius = fireSize * SnowClearRadiusPerFireSize;
                    SnowUtility.AddSnowRadial(Position, Map, snowClearRadius, -(fireSize * SnowClearDepthFactor));
                }
                Profiler.EndSample();         //Snow clear


                Profiler.BeginSample("Grow/extinguish");
                //Try to grow the fire
                fireSize += FireBaseGrowthPerTick
                            * flammabilityMax
                            * ComplexCalcsInterval;

                if (fireSize > MaxFireSize)
                {
                    fireSize = MaxFireSize;
                }

                //Extinguish from sky (rain etc)
                if (Map.weatherManager.RainRate > 0.01f)
                {
                    if (VulnerableToRain())
                    {
                        if (Rand.Value < BaseSkyExtinguishChance * ComplexCalcsInterval)
                        {
                            TakeDamage(new DamageInfo(DamageDefOf.Extinguish, BaseSkyExtinguishDamage));
                        }
                    }
                }
                Profiler.EndSample();         //Grow/extinguish
            }
        }