Exemple #1
0
        public override void ModifyHitNPC(NPC target, ref int damage, ref float knockback, ref bool crit, ref int hitDirection)
        {
            hitDirection = Math.Sign(projectile.velocity.X);
            if (hitDirection == 0)
            {
                hitDirection = 1;
            }

            knockback *= (projectile.velocity.Length() / 120f);

            if (!crit)
            {
                projectile.ai[1] /= 5f;
            }

            crit = false;

            float damagescalez = Math.Min((Owner.channel ? MathHelper.Clamp(projectile.ai[1] / (120f / Owner.meleeSpeed), 0.33f, 1f) : 1f) * (projectile.velocity.Length() / 3f), 5f);

            damage = (int)(damage * damagescalez);
            if (projectile.ai[1] < 30)
            {
                damage = (int)(damage * 0.50);
                damage = (int)(damage * 0.25f);
            }
            else
            {
                SGAmod.AddScreenShake((float)Math.Pow(damage, 0.75f) * 0.025f, 720, target.Center);
            }
        }
 public override bool UseItem(Player player)
 {
     SGAmod.CalamityNoRevengenceNoDeathNoU();
     NPC.SpawnOnPlayer(player.whoAmI, mod.NPCType("Harbinger"));
     //Main.PlaySound(15, (int)player.position.X, (int)player.position.Y, 0);
     return(true);
 }
Exemple #3
0
        public override bool PreKill(int timeLeft)
        {
            Main.PlaySound(SoundID.Item, (int)projectile.position.X, (int)projectile.position.Y, 10);

            if (timeLeft < 2 && stickin >= 0)
            {
                var snd = Main.PlaySound(SoundID.Item14, projectile.Center);
                if (snd != null)
                {
                    snd.Pitch = 0.75f;
                    if (SGAmod.ScreenShake < 16)
                    {
                        SGAmod.AddScreenShake(10, 1200, projectile.Center);
                    }
                }
            }

            int proj = Projectile.NewProjectile(projectile.Center, Vector2.Normalize(projectile.velocity) * 2f, ProjectileID.StickyGrenade, projectile.damage * 2, projectile.knockBack * 3f, projectile.owner);

            if (proj >= 0)
            {
                Main.projectile[proj].melee     = true;
                Main.projectile[proj].thrown    = false;
                Main.projectile[proj].ranged    = false;
                Main.projectile[proj].trap      = true;
                Main.projectile[proj].timeLeft  = 1;
                Main.projectile[proj].netUpdate = true;
            }

            return(true);
        }
 public override bool UseItem(Player player)
 {
     if (item.consumable == true)
     {
         SGAmod.CalamityNoRevengenceNoDeathNoU();
         NPC.SpawnOnPlayer(player.whoAmI, mod.NPCType("SPinky"));
         Main.PlaySound(15, (int)player.position.X, (int)player.position.Y, 0);
         //player.GetModPlayer<SGAPlayer>().Locked=new Vector2(player.Center.X-2000,4000);
     }
     return(true);
 }
Exemple #5
0
        public override bool PreKill(int timeLeft)
        {
            Main.PlaySound(SoundID.Item, (int)projectile.position.X, (int)projectile.position.Y, 10);
            for (int num315 = 0; num315 < 20; num315 = num315 + 1)
            {
                int num316 = Dust.NewDust(new Vector2(projectile.position.X, projectile.position.Y), projectile.width, projectile.height, mod.DustType("HotDust"), projectile.velocity.X + (float)(Main.rand.Next(-250, 250) / 15f), projectile.velocity.Y + (float)(Main.rand.Next(-250, 250) / 10f), 50, Main.hslToRgb(0.4f, 0f, 0.95f), 1f);
                Main.dust[num316].noGravity = true;
                Vector2 velop = new Vector2(projectile.velocity.X + (float)(Main.rand.Next(-250, 250) / 15f), projectile.velocity.Y + (float)(Main.rand.Next(-250, 250) / 10f));
                Main.dust[num316].velocity = velop / 8f;
                Dust dust3 = Main.dust[num316];
                dust3.velocity *= 0.75f;
            }

            if (timeLeft < 2 && stickin >= 0)
            {
                var snd = Main.PlaySound(SoundID.Item14, projectile.Center);
                if (snd != null)
                {
                    snd.Pitch = 0.75f;
                    if (SGAmod.ScreenShake < 20)
                    {
                        SGAmod.AddScreenShake(16, 1280, projectile.Center);
                    }
                }

                Projectile.NewProjectile(projectile.Center, Vector2.Normalize(projectile.velocity) * 2f, ModContent.ProjectileType <HeatedBlowBackShot>(), projectile.damage * 3, projectile.knockBack * 3f, projectile.owner);

                for (float gg = 1f; gg < 7.26f; gg += 0.25f)
                {
                    Vector2 velo = Main.rand.NextVector2CircularEdge(gg, gg) * 2f;
                    Gore.NewGore(projectile.Center + new Vector2(0, 0), velo, Main.rand.Next(61, 64), (5f - Math.Abs(gg)) / 3f);

                    velo = Main.rand.NextVector2CircularEdge(gg, gg);
                    int gorer = Gore.NewGore(projectile.Center + new Vector2(0, 0), Vector2.Zero, Main.rand.Next(61, 64), (5f - Math.Abs(gg)) / 3f);
                    if (gorer >= 0)
                    {
                        Main.gore[gorer].velocity = (Vector2.Normalize(projectile.velocity) * ((gg * 2f) + 3f)) + (velo / 1f);
                    }
                }
            }

            if (stickin > -1)
            {
                NPC himz = Main.npc[stickin];
                if (himz != null && himz.active)
                {
                    himz.AddBuff(mod.BuffType("ThermalBlaze"), 60 * 3);
                }
            }
            return(true);
        }
Exemple #6
0
        public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            projectile.penetrate += 1;
            if (SGAmod.ScreenShake < 12)
            {
                SGAmod.AddScreenShake(16f, 1200, target.Center);
            }
            SoundEffectInstance sound = Main.PlaySound(SoundID.DD2_MonkStaffGroundImpact, (int)target.Center.X, (int)target.Center.Y);

            if (sound != null)
            {
                sound.Pitch = 0.85f;
            }
        }
Exemple #7
0
        public static void AttemptAddRelic(string npcname)
        {
            string relicbase = "SGAmod/Items/Placeable/Relics/Tiles/RelicBase";
            //ISGABoss boss = mnpc as ISGABoss;

            string itemName = "Relic_Item_" + npcname;
            string tileName = "Relic_Placed_" + npcname;

            if (!addedRelics.Contains(itemName))
            {
                addedRelics.Add(itemName);

                SGAmod sga = SGAmod.Instance;
                sga.AddItem("Relic_Item_" + npcname, new SGAPlacableRelic("Relic_Item_" + npcname, npcname));
                sga.AddTile("Relic_Placed_" + npcname, new SGARelicTile(), relicbase);
            }
        }
        public override void AI()
        {
            if (projectile.localAI[1] == 0)
            {
                HalfVector2 half = new HalfVector2(projectile.Center.X, projectile.Center.Y);
                projectile.localAI[0] = ReLogic.Utilities.ReinterpretCast.UIntAsFloat(half.PackedValue);
                projectile.localAI[1] = 1;
                SGAmod.AddScreenShake(24f, 320, projectile.Center);
            }

            if (projectile.ai[0] % 1 == 0 && projectile.ai[1] > 0 && projectile.ai[0] < 12)        //GetType() == typeof(SurtWaveBrimFlame))
            {
                Vector2 where = new Vector2(Main.rand.Next(-64, 64), Main.rand.Next(-64, 64));
                int proj2 = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y - projectile.ai[0] * 15) + where, new Vector2(0, -8), mod.ProjectileType("BoulderBlast"), (int)((float)projectile.damage * 0.75f), projectile.knockBack / 3f, projectile.owner);
                Main.projectile[proj2].melee                = true;
                Main.projectile[proj2].magic                = false;
                Main.projectile[proj2].timeLeft             = 3;
                Main.projectile[proj2].usesLocalNPCImmunity = true;
                Main.projectile[proj2].localNPCHitCooldown  = -1;
                Main.projectile[proj2].netUpdate            = true;
                IdgProjectile.Sync(proj2);
            }

            projectile.scale += 0.2f;

            projectile.ai[0] += 1;

            Vector2 basepoint = (new HalfVector2()
            {
                PackedValue = ReLogic.Utilities.ReinterpretCast.FloatAsUInt(projectile.localAI[0])
            }.ToVector2()) + new Vector2(0, -8);


            Lighting.AddLight(basepoint, 2f * (Color.Yellow.ToVector3() * ((float)projectile.timeLeft / 24f)));
            Lighting.AddLight(projectile.Center, Color.Yellow.ToVector3());

            if (projectile.ai[0] < 4)
            {
                int thisoned = Projectile.NewProjectile(new Vector2(projectile.Center.X, basepoint.Y), new Vector2(Main.rand.NextFloat(-5f, 5f), Main.rand.NextFloat(-8f, -3f) - (projectile.ai[0] / 0.75f)), ModContent.ProjectileType <SurtRocks>(), projectile.damage * 6, projectile.knockBack * 2f, Main.player[projectile.owner].whoAmI);
                IdgProjectile.Sync(thisoned);
            }
        }
        public override void OnEnded()
        {
            if (missed > -10)
            {
                NPC[] enemies = Main.npc.Where(testby => testby.IsValidEnemy() && (testby.Center - Owner.MountedCenter).LengthSquared() < 4000000).OrderBy(testby => Main.rand.Next()).ToArray();

                if (enemies.Length > 0)
                {
                    foreach (NPC enemy in enemies)
                    {
                        enemy.StrikeNPC(score, projectile.knockBack, 0, false);
                        Owner.addDPS(score);
                    }
                }
                var explode = SGAmod.AddScreenExplosion(projectile.Center, 60, 2f, 2000);
                explode.warmupTime = 60;
                explode.decayTime  = 24;
                missed             = -10;
            }
        }
        public override void AI()
        {
            NPC enemy = Main.npc[(int)projectile.ai[1]];

            if (startingloc == default)
            {
                color1      = Main.hslToRgb(projectile.ai[0], 1f, 0.70f);
                color2      = Color.Lerp(color1, Color.White, 0.25f);
                startingloc = projectile.Center;
            }

            projectile.localAI[0] += 1f;

            if (enemy != null && enemy.active && projectile.localAI[1] < 1)
            {
                if (hitboxchoose == default)
                {
                    hitboxchoose = new Vector2(Main.rand.Next(enemy.width), Main.rand.Next(enemy.height));
                }
                projectile.velocity = (enemy.position + hitboxchoose) - projectile.Center;

                if (projectile.localAI[0] == 5)
                {
                    int damage = Main.DamageVar(projectile.damage);
                    enemy.StrikeNPC(damage, 0, 1, projectile.penetrate > 99);
                    if (SGAmod.ScreenShake < 12)
                    {
                        SGAmod.AddScreenShake(4f, 420, projectile.Center);
                    }
                    Main.player[projectile.owner].addDPS(damage);
                }
            }
            else
            {
                projectile.localAI[1]++;
            }

            projectile.position -= projectile.velocity;
        }
Exemple #11
0
 public override bool UseItem(Player player)
 {
     SGAmod.TryToggleUI(null);
     return(true);
 }
Exemple #12
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            if (player != null && player.active)
            {
                SGAPlayer modply = player.GetModPlayer <SGAPlayer>();

                if (projectile.ai[0] > 3000 || player.dead)
                {
                    projectile.Kill();
                }
                else
                {
                    Vector2 mousePos = Main.MouseWorld;

                    ///Holding

                    if (projectile.owner == Main.myPlayer)
                    {
                        Vector2 diff = mousePos - player.Center;
                        diff.Normalize();
                        if (player.channel && projectile.ai[0] < 200 && projectile.ai[1] < 1)
                        {
                            projectile.velocity  = diff;
                            projectile.direction = Main.MouseWorld.X > player.position.X ? 1 : -1;
                        }
                        projectile.netUpdate = true;
                    }

                    int dir = projectile.direction;
                    player.ChangeDir(dir);
                    projectile.direction = dir;

                    player.heldProj = projectile.whoAmI;

                    bool isholding = (player.channel && projectile.ai[0] < 200 && projectile.ai[1] < 1);

                    if (isholding)
                    {
                        player.itemRotation = (float)Math.Atan2(projectile.velocity.Y * dir, projectile.velocity.X * dir);
                        projectile.rotation = player.itemRotation - MathHelper.ToRadians(90);
                        projectile.timeLeft = cooldowntime;
                        projectile.ai[0]   += chargeuprate;
                        if ((int)projectile.ai[0] == (int)(chargeuprate * 3f))
                        {
                            Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, soundcharge).WithVolume(.7f).WithPitchVariance(.25f), projectile.Center);
                        }
                        //float speedzz = projectile.velocity.Length();
                        //projectile.velocity.Normalize();
                        //projectile.velocity*=(speedzz+0.05f);
                    }
                    projectile.Center    = (player.Center + new Vector2(dir * 6, 0)) + (projectile.velocity * 12f) - (projectile.velocity * (0.08f * projectile.ai[0]));
                    projectile.position -= projectile.velocity;
                    player.itemTime      = 2;
                    player.itemAnimation = 2;

                    //Projectiles



                    if (!isholding)
                    {
                        projectile.velocity /= 1.15f;

                        if (projectile.ai[1] < 1)
                        {
                            Vector2 position = projectile.Center;
                            Vector2 offset   = new Vector2(projectile.velocity.X, projectile.velocity.Y);
                            offset.Normalize();
                            offset *= 16f;
                            offset += projectile.velocity;

                            float scalar      = GetType() == typeof(SBCCannonHoldingMK2) ? 30f : 30f;
                            float damagescale = (projectile.damage * (1f + (projectile.ai[0] / scalar)));

                            SGAmod.AddScreenShake(4f * (1f + (projectile.ai[0] / scalar)), 240, player.Center);

                            Vector2 perturbedSpeed  = projectile.velocity.RotatedByRandom(MathHelper.ToRadians(0));
                            Vector2 perturbedSpeed2 = perturbedSpeed;
                            perturbedSpeed2.Normalize();
                            float basespeed = 1f + (GetType() == typeof(SBCCannonHoldingMK2) ? 0.4f : -0.4f);
                            float scale     = 1.5f + ((projectile.ai[0] / 30f) * basespeed);                    // - (Main.rand.NextFloat() * .2f);
                            perturbedSpeed  = perturbedSpeed * (scale * 4f);
                            perturbedSpeed += perturbedSpeed2;
                            offset         -= perturbedSpeed;
                            perturbedSpeed /= 2f;
                            int prog = Projectile.NewProjectile(position.X + offset.X, position.Y + offset.Y, perturbedSpeed.X, perturbedSpeed.Y, mod.ProjectileType("SBCBall"), (int)damagescale, projectile.knockBack, player.whoAmI, GetType() == typeof(SBCCannonHolding) ? 0f : 100f, (float)projectile.damage);
                            IdgProjectile.Sync(prog);
                            Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, soundfire).WithVolume(.7f).WithPitchVariance(.25f), projectile.Center);
                        }


                        projectile.ai[1] = 1;
                    }
                }
            }
            else
            {
                projectile.Kill();
            }
        }