protected virtual void AsyncRelease(StarverPlayer player) { Task.Run(() => { try { player.SetBuff(BuffID.ShadowDodge, 60 * 3); player.SetBuff(BuffID.Webbed, 60 * 3); unsafe { Vector *Source = stackalloc Vector[Max]; Vector *ReversedSource = stackalloc Vector[Max]; Vector velocity = new Vector(15, 0); int damage = 1080 * 2; damage += (int)(Math.Sqrt(player.Level) * 3); for (int i = 0; i < Max; i++) { Source[i] = Vector.FromPolar(Math.PI * 2 * i / Max, RadiumMax); ReversedSource[i] = Source[i]; ReversedSource[i].Angle += Math.PI / 2; } #region First stage var rotation = 0.0; while (rotation < 2 * Math.PI) { for (int i = 0; i < Max; i++) { #region NoReverse velocity.Angle = Source[i].Angle - Math.PI / 2 - Math.PI / 12; player.NewProj(player.Center + Source[i], velocity, FromIn[0], damage, 20f); // Source[i].Length -= 16 * 2 / 3; Source[i].Angle += Math.PI / 2 / 30; #endregion #region Reverse velocity.Angle = ReversedSource[i].Angle + Math.PI / 2 + Math.PI / 12; player.NewProj(player.Center + ReversedSource[i], velocity, FromIn[1], damage, 20f); // ReversedSource[i].Length += 16 * 2 / 3; ReversedSource[i].Angle -= Math.PI / 2 / 30; #endregion } rotation += Math.PI / 2 / 30; Thread.Sleep(2000 / 30); } #endregion #region Second stage(Beams) damage /= 2; damage *= 3; for (int i = 0; i < Beams.Length; i++) { player.ProjCircle(player.Center, 16 * 4 + 16 * 8 * i, -13 - 2 * i, Beams[i], 10 + 5 * i, (int)(damage * (1 + 0.1f * i))); Thread.Sleep(175 + 25 * i); } #endregion } } catch { } }); }
Vector *FillArray(Vector *array) { int *elem; for (var i = 0; i < 4; i++) { elem = (int *)ecs.vector_add(ref array, ref ArrParams); *elem = i; } return(array); }
private void AsyncRelease(StarverPlayer player) { Task.Run(() => { try { unsafe { int Count = 20; Vector *Block = stackalloc Vector[Count]; Vector vel; int level = 0; int MaxLevels = 7; double offset = 0; float length = 16 * 6f; ProjQueue Projs = new ProjQueue((MaxLevels + 1) * Count); { while (level < MaxLevels) { for (int i = 0; i < Count; i++) { Block[i] = Vector.FromPolar(offset + Math.PI * 2 * i / Count, length); vel = Block[i]; vel.Angle -= Math.PI * 2 / 4; vel.Length = 8 - level; Projs.Push(player.NewProj(player.Center + Block[i], Block[i].ToLenOf(0.4f), ProjectileID.TiedEighthNote, 600 - level * 6, 4), vel); if (i % 5 == 0) { Thread.Sleep(1); } } length += 16 * 3.5f; offset += Math.PI / 3 / 7; level++; Thread.Sleep(100 - 1 * Count / 5); } while (level-- >= 0) { Projs.Launch(Count); Thread.Sleep(200); } } } } catch { } }); }
protected override void AsyncRelease(StarverPlayer player) { Task.Run(() => { try { unsafe { int count = Rand.Next(6, 15); int damage = 1500; damage += (int)(5 * Math.Sqrt(player.Level)); int *Indexes = stackalloc int[count]; Vector *Positions = stackalloc Vector[count]; Vector2 *AlsoPositions = (Vector2 *)Positions; for (int i = 0; i < count; i++) { AlsoPositions[i] = player.Center; AlsoPositions[i] += Rand.NextVector2(16 * 50, 16 * 45); Indexes[i] = player.NewProj(AlsoPositions[i], Rand.NextVector2(0.35f), ProjectileID.NebulaArcanum, damage + Rand.Next(50)); } var timer = 0; while (timer < 4000) { for (int i = 0; i < count; i++) { #region Fix var proj = Main.projectile[Indexes[i]]; if (!proj.active || proj.type != ProjectileID.NebulaArcanum) { Indexes[i] = player.NewProj(AlsoPositions[i], Rand.NextVector2(0.35f), ProjectileID.NebulaArcanum, damage + Rand.Next(50)); proj = Main.projectile[Indexes[i]]; } proj.position = AlsoPositions[i]; proj.SendData(); #endregion player.NewProj(Main.projectile[Indexes[i]].Center, Rand.NextVector2(13 + Rand.Next(6)), Projs.Next(), damage / Rand.Next(2, 4) + Rand.Next(70)); Thread.Sleep(2); player.NewProj(Main.projectile[Indexes[i]].Center, Rand.NextVector2(13 + Rand.Next(6)), Projs.Next(), damage / Rand.Next(2, 4) + Rand.Next(70)); } Thread.Sleep(100); timer += 100; } for (int i = 0; i < count; i++) { AlsoPositions[i] = player.Center; Positions[i] += Vector.FromPolar(Math.PI * 2 * i / count + Math.PI / 2, 16 * 60); player.ProjSector(AlsoPositions[i], 19, 16 * 3, Positions[i].Angle + Math.PI, Math.PI / 3, damage, ProjectileID.DD2SquireSonicBoom, 5); } } } catch { } }); }