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); }
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); }
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); }
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; } }
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; }
public override bool UseItem(Player player) { SGAmod.TryToggleUI(null); return(true); }
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(); } }