// Token: 0x06004AA6 RID: 19110 RVA: 0x0022CA48 File Offset: 0x0022AE48 public override DamageWorker.DamageResult Apply(DamageInfo dinfo, Thing victim) { Pawn pawn = victim as Pawn; if (pawn != null && pawn.Faction == Faction.OfPlayer) { Find.TickManager.slower.SignalForceNormalSpeedShort(); } Map map = victim.Map; DamageWorker.DamageResult damageResult = base.Apply(dinfo, victim); if (!damageResult.deflected && !dinfo.InstantPermanentInjury) { Rand.PushState(); WarpfireUtility.TryAttachWarpfire(victim, Rand.Range(0.15f, 0.25f)); Rand.PopState(); } if (victim.Destroyed && map != null && pawn == null) { foreach (IntVec3 c in victim.OccupiedRect()) { FilthMaker.TryMakeFilth(c, map, ThingDefOf.Filth_Ash, 1); } Plant plant = victim as Plant; if (plant != null && victim.def.plant.IsTree && plant.LifeStage != PlantLifeStage.Sowing && victim.def != ThingDefOf.BurnedTree) { DeadPlant deadPlant = (DeadPlant)GenSpawn.Spawn(ThingDefOf.BurnedTree, victim.Position, map, WipeMode.Vanish); deadPlant.Growth = plant.Growth; } } return(damageResult); }
// Token: 0x0600272B RID: 10027 RVA: 0x0012A5A4 File Offset: 0x001289A4 public override void Impact(Thing hitThing) { Map map = base.Map; base.Impact(hitThing); WarpfireUtility.TryStartWarpfireIn(base.Position, map, 0.1f); }
// Token: 0x06004AA7 RID: 19111 RVA: 0x0022CB98 File Offset: 0x0022AF98 public override void ExplosionAffectCell(Explosion explosion, IntVec3 c, List <Thing> damagedThings, bool canThrowMotes) { base.ExplosionAffectCell(explosion, c, damagedThings, canThrowMotes); if ((this.def == OGDamageDefOf.OG_Chaos_Deamon_Warpfire || this.def == OGDamageDefOf.OG_WarpStormStrike) && Rand.Chance(WarpfireUtility.ChanceToStartWarpfireIn(c, explosion.Map))) { WarpfireUtility.TryStartWarpfireIn(c, explosion.Map, Rand.Range(0.2f, 0.6f)); } }
// Token: 0x06002656 RID: 9814 RVA: 0x00123A60 File Offset: 0x00121E60 public static bool TryStartWarpfireIn(IntVec3 c, Map map, float fireSize) { float num = WarpfireUtility.ChanceToStartWarpfireIn(c, map); if (num <= 0f) { return(false); } Warpfire fire = (Warpfire)ThingMaker.MakeThing(AdeptusThingDefOf.OG_Warpfire, null); fire.fireSize = fireSize; GenSpawn.Spawn(fire, c, map, Rot4.North, WipeMode.Vanish, false); return(true); }
protected virtual void Ignite() { Map map = Map; Destroy(); float ignitionChance = def.projectile.explosionChanceToStartFire; var radius = def.projectile.explosionRadius; var cellsToAffect = SimplePool <List <IntVec3> > .Get(); cellsToAffect.Clear(); cellsToAffect.AddRange(def.projectile.damageDef.Worker.ExplosionCellsToHit(Position, map, radius)); FleckMaker.Static(Position, map, FleckDefOf.ExplosionFlash, radius * 4f); for (int i = 0; i < 4; i++) { FleckMaker.ThrowSmoke(Position.ToVector3Shifted() + Gen.RandomHorizontalVector(radius * 0.7f), map, radius * 0.6f); } Rand.PushState(); if (Rand.Chance(ignitionChance)) { foreach (var vec3 in cellsToAffect) { var fireSize = radius - vec3.DistanceTo(Position); if (fireSize > 0.1f) { if (this.def.projectile.damageDef == AdeptusDamageDefOf.OG_Chaos_Deamon_Warpfire) { WarpfireUtility.TryStartWarpfireIn(vec3, map, fireSize); } else { FireUtility.TryStartFireIn(vec3, map, fireSize); } } } } Rand.PopState(); //Fire explosion should be tiny. if (this.def.projectile.explosionEffect != null) { Effecter effecter = this.def.projectile.explosionEffect.Spawn(); effecter.Trigger(new TargetInfo(this.Position, map, false), new TargetInfo(this.Position, map, false)); effecter.Cleanup(); } GenExplosion.DoExplosion(this.Position, map, this.def.projectile.explosionRadius, this.def.projectile.damageDef, this.launcher, this.def.projectile.GetDamageAmount(1, null), this.def.projectile.GetArmorPenetration(1, null), this.def.projectile.soundExplode, this.equipmentDef, this.def, null, this.def.projectile.postExplosionSpawnThingDef, this.def.projectile.postExplosionSpawnChance, this.def.projectile.postExplosionSpawnThingCount, this.def.projectile.applyDamageToExplosionCellsNeighbors, this.def.projectile.preExplosionSpawnThingDef, this.def.projectile.preExplosionSpawnChance, this.def.projectile.preExplosionSpawnThingCount, this.def.projectile.explosionChanceToStartFire, this.def.projectile.explosionDamageFalloff); }
// Token: 0x06002652 RID: 9810 RVA: 0x00123790 File Offset: 0x00121B90 protected new void TrySpread() { IntVec3 intVec = base.Position; bool flag; Rand.PushState(); if (Rand.Chance(0.8f)) { intVec = base.Position + GenRadial.ManualRadialPattern[Rand.RangeInclusive(1, 8)]; flag = true; } else { intVec = base.Position + GenRadial.ManualRadialPattern[Rand.RangeInclusive(10, 20)]; flag = false; } Rand.PopState(); if (!intVec.InBounds(base.Map)) { return; } Rand.PushState(); bool startfire = Rand.Chance(WarpfireUtility.ChanceToStartWarpfireIn(intVec, base.Map)); Rand.PopState(); if (startfire) { if (!flag) { CellRect startRect = CellRect.SingleCell(base.Position); CellRect endRect = CellRect.SingleCell(intVec); if (!GenSight.LineOfSight(base.Position, intVec, base.Map, startRect, endRect, null)) { return; } WarpSpark spark = (WarpSpark)GenSpawn.Spawn(AdeptusThingDefOf.OG_WarpSpark, base.Position, base.Map, WipeMode.Vanish); spark.Launch(this, intVec, intVec, ProjectileHitFlags.All, null); } else { WarpfireUtility.TryStartWarpfireIn(intVec, base.Map, 0.1f); } } }
protected void TrySpread() { IntVec3 intVec = base.Position; bool flag; Rand.PushState(); if (Rand.Chance(0.8f)) { intVec = base.Position + GenRadial.ManualRadialPattern[Rand.RangeInclusive(1, 8)]; flag = true; } else { intVec = base.Position + GenRadial.ManualRadialPattern[Rand.RangeInclusive(10, 20)]; flag = false; } Rand.PopState(); if (!intVec.InBounds(base.Map)) { return; } float chance; if (this.def.projectile.damageDef == AdeptusDamageDefOf.OG_Chaos_Deamon_Warpfire) { chance = WarpfireUtility.ChanceToStartWarpfireIn(intVec, base.Map); } else { chance = FireUtility.ChanceToStartFireIn(intVec, base.Map); } Rand.PushState(); bool f = Rand.Chance(chance); Rand.PopState(); if (f) { if (!flag) { CellRect startRect = CellRect.SingleCell(base.Position); CellRect endRect = CellRect.SingleCell(intVec); if (!GenSight.LineOfSight(base.Position, intVec, base.Map, startRect, endRect, null)) { return; } Spark spark; if (this.def.projectile.damageDef == AdeptusDamageDefOf.OG_Chaos_Deamon_Warpfire) { spark = (Spark)GenSpawn.Spawn(AdeptusThingDefOf.OG_WarpSpark, base.Position, base.Map, WipeMode.Vanish); } else { spark = (Spark)GenSpawn.Spawn(ThingDefOf.Spark, base.Position, base.Map, WipeMode.Vanish); } spark.Launch(this, intVec, intVec, ProjectileHitFlags.All, false, null); } else { if (this.def.projectile.damageDef == AdeptusDamageDefOf.OG_Chaos_Deamon_Warpfire) { WarpfireUtility.TryStartWarpfireIn(intVec, base.Map, 0.1f); } else { FireUtility.TryStartFireIn(intVec, base.Map, 0.1f); } } } }