public override void Tick() { base.Tick(); age++; if (this.ticksToImpact >= 0) { DrawEffects(this.ExactPosition, base.Map); } this.ticksToImpact--; this.ticksFollowingImpact--; base.Position = this.ExactPosition.ToIntVec3(); bool flag = !this.ExactPosition.InBounds(base.Map); if (flag) { this.ticksToImpact++; this.Destroy(DestroyMode.Vanish); } else { bool flag2 = this.ticksToImpact <= 0 && !impacted; if (flag2) { bool flag3 = this.DestinationCell.InBounds(base.Map); if (flag3) { base.Position = this.DestinationCell; } this.ImpactSomething(); } } if (this.impacted) { if (this.ticksFollowingImpact > 0 && Find.TickManager.TicksGame % 5 == 0) { CellRect cellRect = CellRect.CenteredOn(base.Position, 2); cellRect.ClipInsideMap(base.Map); IntVec3 spreadingDarknessCell; if (!(cellRect.CenterCell.GetTerrain(base.Map).passability == Traversability.Impassable) && !cellRect.CenterCell.IsValid || !cellRect.CenterCell.InBounds(base.Map)) { this.ticksFollowingImpact = -1; } for (int i = 0; i < 2; i++) { spreadingDarknessCell = cellRect.RandomCell; if (spreadingDarknessCell.IsValid && spreadingDarknessCell.InBounds(base.Map)) { GenExplosion.DoExplosion(spreadingDarknessCell, base.Map, .4f, TMDamageDefOf.DamageDefOf.TM_DeathBolt, this.pawn, Mathf.RoundToInt((Rand.Range(.4f * this.def.projectile.GetDamageAmount(1, null), .8f * this.def.projectile.GetDamageAmount(1, null)) + (3f * pwrVal)) * this.arcaneDmg), 2, this.def.projectile.soundExplode, def, null, null, null, 0f, 1, false, null, 0f, 0, 0.0f, true); TM_MoteMaker.ThrowDiseaseMote(base.Position.ToVector3Shifted(), base.Map, .6f); if (powered) { TM_MoteMaker.ThrowBoltMote(base.Position.ToVector3Shifted(), base.Map, 0.3f); } } } } if (this.ticksFollowingImpact < 0) { this.Destroy(DestroyMode.Vanish); } } }