public void HellionPortals(Player P, ref Vector2 PWhere, ref Vector2 DrakenWhere, ref Vector2 FlyTo, ref Vector2 FlySpeed, ref Vector2 FlyFriction) { for (int rotz = 0; rotz < 360; rotz += 360 / 3) { Vector2 where = npc.Center; Vector2 wheretogo2 = new Vector2(96f, rotz); Vector2 where2 = P.Center - npc.Center; where2.Normalize(); Vector2 wheretogoxxx = new Vector2(0.40f, 0f); Func <Vector2, Vector2, float, float, float> projectilefacing = delegate(Vector2 playerpos, Vector2 projpos, float time, float current) { Vector2 wheretogoxxx2 = new Vector2(wheretogoxxx.X, wheretogoxxx.Y); float val = current; val = current.AngleLerp((playerpos - projpos).ToRotation(), wheretogoxxx2.X); return(val); }; Func <Vector2, Vector2, float, Vector2, Vector2> projectilemoving = delegate(Vector2 playerpos, Vector2 projpos, float time, Vector2 current) { Vector2 wheretogo = new Vector2(wheretogo2.X, wheretogo2.Y); float angle = MathHelper.ToRadians(((wheretogo.Y + time * 2f))); Vector2 instore = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)) * wheretogo.X; if (TrueDraken.GetDraken() != null) { Vector2 gothere = TrueDraken.GetDraken().npc.Center + instore; Vector2 slideover = gothere - projpos; current = slideover / 2f; } current /= 1.125f; Vector2 speedz = current; float spzzed = speedz.Length(); speedz.Normalize(); if (spzzed > 50f) { current = (speedz * spzzed); } return(current); }; Func <float, bool> projectilepattern = (time) => (time > 60 && time % 200 == 0); int ize2 = ParadoxMirror.SummonMirror(where, Vector2.Zero, 100, 1100, (npc.Center - where).ToRotation(), ProjectileID.EmeraldBolt, projectilepattern, 15f, 200); (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilefacing = projectilefacing; (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilemoving = projectilemoving; Main.PlaySound(SoundID.Item, (int)Main.projectile[ize2].position.X, (int)Main.projectile[ize2].position.Y, 33, 0.25f, 0.5f); Main.projectile[ize2].netUpdate = true; } }
public override void Explode() { chargeup += 1; if (projectile.timeLeft == timeleftfirerate && projectile.ai[0] > 0) { Player owner = Main.player[projectile.owner]; if (owner != null && !owner.dead && owner.channel) { everyother += 1; everyother %= 3; Vector2 gotohere = new Vector2(); gotohere = projectile.velocity; //Main.MouseScreen - projectile.Center; gotohere.Normalize(); float accuracy = Math.Max(0.005f, 1f - ((chargeup) / 500f)); Vector2 perturbedSpeed = new Vector2(gotohere.X, gotohere.Y).RotatedByRandom(MathHelper.ToRadians(0)) * projectile.velocity.Length(); for (int i = 2; i < 8; i += 1) { int proj = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y), (new Vector2(perturbedSpeed.X, perturbedSpeed.Y) * 2f).RotatedByRandom((MathHelper.ToRadians((i * 75))) * accuracy).RotatedByRandom(MathHelper.ToRadians(160f) * accuracy), mod.ProjectileType("RainbowBolt"), (int)((projectile.damage * 0.60f) * damagescale), projectile.knockBack / 10f, owner.whoAmI); Main.projectile[proj].magic = true; Main.projectile[proj].minion = false; IdgProjectile.Sync(proj); } if (everyother == 2) { Vector2 backthere = new Vector2(-100, 0).RotatedByRandom(MathHelper.ToRadians(80)); //int proj2 = Projectile.NewProjectile(backthere, gohere, mod.ProjectileType("ProjectilePortalRealityShaperHit"), (int)(projectile.damage * damagescale), projectile.knockBack / 10f, owner.whoAmI, mod.ProjectileType("HotRound")); Func <Vector2, Vector2, float, float, Projectile, float> projectilefacingmore = delegate(Vector2 playerpos, Vector2 projpos, float time, float current, Projectile proj) { float val = current; if (projectile.active) { if (time < 100) { val = current.AngleLerp(projectile.velocity.ToRotation() + proj.ai[1], 0.15f); } else { val = current.AngleLerp(projectile.velocity.ToRotation() + proj.ai[1], 0.05f); } } return(val); }; Func <Vector2, Vector2, float, Vector2, Projectile, Vector2> projectilemovingmore = delegate(Vector2 playerpos, Vector2 projpos, float time, Vector2 current, Projectile proj) { if (projectile.active) { Vector2 normspeed = projectile.velocity; normspeed.Normalize(); Vector2 gothere333 = (playerpos + backthere.RotatedBy(projectile.velocity.ToRotation())) - normspeed * 128f; Vector2 slideover = gothere333 - projpos; current = slideover / 2f; } current /= 1.125f; if (projectile.active) { Vector2 speedz = current; float spzzed = speedz.Length(); speedz.Normalize(); if (spzzed > 100f) { current = (speedz * spzzed); } } else { proj.timeLeft = Math.Min(proj.timeLeft, 20); } return(current); }; Func <float, bool> projectilepattern = (time) => (time == 20); int ize2 = ParadoxMirror.SummonMirror(owner.Center, Vector2.Zero, (int)((projectile.damage * 3) * damagescale), 200, projectile.velocity.ToRotation(), mod.ProjectileType("HellionBeam"), projectilepattern, 2.5f, 145, true); (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilefacingmore = projectilefacingmore; (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilemovingmore = projectilemovingmore; Main.PlaySound(SoundID.Item, (int)Main.projectile[ize2].position.X, (int)Main.projectile[ize2].position.Y, 33, 0.25f, 0.5f); Main.projectile[ize2].owner = projectile.owner; Main.projectile[ize2].aiStyle = -2; Main.projectile[ize2].ai[1] = Main.rand.NextFloat(-MathHelper.ToRadians(20), MathHelper.ToRadians(20)); Main.projectile[ize2].friendly = true; Main.projectile[ize2].hostile = false; Main.projectile[ize2].usesLocalNPCImmunity = true; Main.projectile[ize2].localNPCHitCooldown = 15; Main.projectile[ize2].netUpdate = true; IdgProjectile.Sync(ize2); } } } }