Example #1
0
 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
         {
         }
     });
 }
Example #2
0
        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);
        }
Example #3
0
 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
         {
         }
     });
 }
Example #4
0
        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
                {
                }
            });
        }