public override void Kill(int timeLeft) { int projType = ProjectileType <Gambler.Projectiles.EaterCardProj2>(); for (int l = 0; l < Main.projectile.Length; l++) { Projectile proj = Main.projectile[l]; if (proj.active && proj.type == projType && proj.owner == projectile.owner) { proj.Kill(); } } for (int i = 0; i < 10; i++) { int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 18); Main.dust[dust].velocity *= 1.5f; Main.dust[dust].scale *= 1f; } projType = ProjectileType <Gambler.Projectiles.EaterCardProj3>(); bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0f, 0f, projType, projectile.damage * 5, 0, projectile.owner), dummy); OrchidModProjectile.spawnDustCircle(projectile.Center, 18, 5, 3 + Main.rand.Next(5), false, 1.5f, 1f, 7f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 18, 10, 5 + Main.rand.Next(5), false, 1f, 1f, 5f, true, true, false, 0, 0, true); Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 83); }
public override void SafeAI() { Player player = Main.player[projectile.owner]; projectile.width = projectile.damage * 4; projectile.height = projectile.width; projectile.position.X = player.Center.X - projectile.width / 2; projectile.position.Y = player.Center.Y - projectile.width / 2; for (int i = 0; i < 20; i++) { int dust2 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 6); Main.dust[dust2].scale = 1.2f; Main.dust[dust2].noGravity = true; Main.dust[dust2].velocity.X /= 3; Main.dust[dust2].velocity.Y /= 3; } OrchidModProjectile.spawnExplosionGore(projectile); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 6), 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 3), 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 2), 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 6), 15, true, 1.5f, 1f, 5f); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 3), 15, true, 1.5f, 1f, 5f); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 2), 15, true, 1.5f, 1f, 5f); }
public override bool OnTileCollide(Vector2 oldVelocity) { bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; for (int i = 0; i < 3; i++) { int projType = ProjectileType <Gambler.Projectiles.JungleSlimeCardProjAlt>(); Vector2 vel = new Vector2(0f, -3f).RotatedBy(MathHelper.ToRadians(20 * (i - 1))); OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.position.X + (5 * (i - 1)), projectile.position.Y - 10, vel.X, vel.Y, projType, (int)(projectile.damage * 0.75f), projectile.knockBack, projectile.owner), dummy); } if (projectile.velocity.Y > 0f) { projectile.velocity.Y = -8; if (this.baseDamage < projectile.damage) { projectile.damage = this.baseDamage; OrchidModProjectile.spawnDustCircle(projectile.Center, 60, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, false, true); } } else { projectile.velocity.Y = 1f; } if (projectile.velocity.X != oldVelocity.X) { projectile.velocity.X = -oldVelocity.X; projectile.velocity.Y = 0f; } return(false); }
public override void BonusProjectiles(Player player, OrchidModPlayer modPlayer, Projectile projectile, OrchidModGlobalProjectile modProjectile, bool dummy) { if (modProjectile.gamblerInternalCooldown == 0) { modProjectile.gamblerInternalCooldown = 30; float scale = 1f - (Main.rand.NextFloat() * .3f); int rand = Main.rand.Next(3) + 1; int projType = ProjectileType <Gambler.Projectiles.ForestCardProj>(); for (int i = 0; i < rand; i++) { Vector2 target = Main.MouseWorld; Vector2 heading = target - projectile.position; heading.Normalize(); heading *= new Vector2(0f, 10f).Length(); Vector2 vel = heading.RotatedByRandom(MathHelper.ToRadians(30)); vel = vel * scale; int newProjectile = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, projectile.damage, projectile.knockBack, player.whoAmI), dummy); Main.projectile[newProjectile].ai[1] = 1f; Main.projectile[newProjectile].netUpdate = true; if (i == 0) { OrchidModProjectile.spawnDustCircle(projectile.Center, 31, 10, 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); } } } }
public override void SafeKill(int timeLeft, Player player, OrchidModPlayer modPlayer) { Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 85); int dmg = projectile.damage; OrchidModProjectile.spawnDustCircle(projectile.Center, 184, 200, 15, false, 1.5f, 1f, 5f); OrchidModProjectile.spawnDustCircle(projectile.Center, 184, 175, 30, false, 1.5f, 1f, 5f); Vector2 move = Vector2.Zero; float distance = 500f; for (int k = 0; k < 200; k++) { if (Main.npc[k].active && !Main.npc[k].friendly) { Vector2 newMove = Main.npc[k].Center - projectile.Center; float distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y); if (distanceTo < distance) { OrchidModAlchemistNPC modTarget = Main.npc[k].GetGlobalNPC <OrchidModAlchemistNPC>(); modTarget.alchemistWater = 60 * 10; } } } }
public override bool OnTileCollide(Vector2 oldVelocity) { if (projectile.velocity.Y > 0f) { projectile.velocity.Y = -10; projectile.ai[1] = 1f; if (this.baseDamage < projectile.damage) { if (this.baseDamage < projectile.damage - 6) { OrchidModProjectile.spawnDustCircle(projectile.Center, 60, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, false, true); } projectile.damage = this.baseDamage; } } else { projectile.velocity.Y = 1f; projectile.ai[1] = 0f; } if (projectile.velocity.X != oldVelocity.X) { projectile.velocity.X = -oldVelocity.X; projectile.velocity.Y = 0f; } return(false); }
public override void BonusProjectiles(Player player, OrchidModPlayer modPlayer, Projectile projectile, OrchidModGlobalProjectile modProjectile, bool dummy) { if (modProjectile.gamblerInternalCooldown == 0) { modProjectile.gamblerInternalCooldown = 40; int projType = ProjectileType <Gambler.Projectiles.SnowCardProj>(); Vector2 target = Main.MouseWorld; Vector2 vel = new Vector2(0f, 0f); float absX = (float)Math.Sqrt((projectile.Center.X - target.X) * (projectile.Center.X - target.X)); float absY = (float)Math.Sqrt((projectile.Center.Y - target.Y) * (projectile.Center.Y - target.Y)); if (absX > absY) { vel.X = target.X < projectile.Center.X ? 1f : -1f; } else { vel.Y = target.Y < projectile.Center.Y ? 1f : -1f; } vel.Normalize(); vel *= new Vector2(0f, 5f).Length(); int newProjectile = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, projectile.damage, projectile.knockBack, player.whoAmI), dummy); Main.projectile[newProjectile].ai[1] = 1f; Main.projectile[newProjectile].netUpdate = true; OrchidModProjectile.spawnDustCircle(projectile.Center, 31, 25, 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); } }
public override void KillSecond(int timeLeft, Player player, OrchidModPlayer modPlayer, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem) { if (alchProj.fireFlask.type != 0) { int type = ProjectileType <Alchemist.Projectiles.Water.SlimeFlaskProj>(); int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0f, 0f, type, dmg, 0.5f, projectile.owner); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, 10, 10, true, 1f, 1f, 5f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 6, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, true); Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45); if (player.HasBuff(BuffType <Alchemist.Buffs.SlimeFlaskBuff>())) { int nb = 2 + Main.rand.Next(3); for (int i = 0; i < nb; i++) { Vector2 vel = (new Vector2(0f, -(float)(3 + Main.rand.Next(4))).RotatedByRandom(MathHelper.ToRadians(80))); int spawnProj = ProjectileType <Alchemist.Projectiles.Fire.EmberVialProjAlt>(); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj, 0, 0f, projectile.owner); } int itemType = ItemType <Alchemist.Weapons.Fire.EmberVial>(); int dmgAlt = OrchidModAlchemistHelper.getSecondaryDamage(player, modPlayer, itemType, alchProj.nbElements, true); int rand = alchProj.nbElements + Main.rand.Next(2); for (int i = 0; i < rand; i++) { Vector2 vel = (new Vector2(0f, -3f).RotatedByRandom(MathHelper.ToRadians(60))); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, ProjectileType <Alchemist.Projectiles.Fire.EmberVialProj>(), dmgAlt, 0f, projectile.owner); } } } }
public override void SafeAI() { if (!this.initialized) { this.rotation = 0.3f * (Main.rand.Next(2) == 0 ? -1 : 1); OrchidModProjectile.spawnDustCircle(projectile.Center, 64, 5, 5, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); this.initialized = true; } projectile.rotation += this.rotation; int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 64); Main.dust[dust].scale *= 1.5f; Main.dust[dust].noGravity = true; Main.dust[dust].noLight = true; if (projectile.ai[0] != -1f && Main.myPlayer == projectile.owner) { if (projectile.position.Y >= projectile.ai[0]) { OrchidModProjectile.spawnDustCircle(projectile.Center, 64, 5, 5, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true); Vector2 mousePos = Main.MouseWorld; projectile.velocity.X = (mousePos.X > projectile.Center.X ? projectile.velocity.Y : -projectile.velocity.Y); projectile.velocity.Y = 0f; projectile.ai[0] = -1f; projectile.netUpdate = true; } } }
public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>(); if (projectile.owner == Main.myPlayer) { modTarget.gamblerDungeonCardCount++; if (modTarget.gamblerDungeonCardCount >= 3) { modTarget.gamblerDungeonCardCount = 0; OrchidModProjectile.spawnDustCircle(projectile.Center, 29, 10, 15, true, 1.3f, 1f, 8f, true, true, false, 0, 0, true); Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45); int projType = ProjectileType <Gambler.Projectiles.DungeonCardProjAlt>(); float scale = 10f - (Main.rand.NextFloat() * 2.5f); Vector2 vel = (projectile.velocity.RotatedByRandom(MathHelper.ToRadians(20))); vel.Normalize(); vel *= scale; bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; int newProjInt = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, (int)(projectile.damage * 5), 0.1f, projectile.owner), dummy); Projectile newProj = Main.projectile[newProjInt]; newProj.ai[1] = (int)target.whoAmI; newProj.netUpdate = true; } } if (modPlayer.gamblerElementalLens) { target.AddBuff(31, 60 * 3); // Confused } }
public override bool PreDrawCatalyst(SpriteBatch spriteBatch, Projectile projectile, Player player, ref Color lightColor) { Texture2D texture; Vector2 position; Color color; OrchidModProjectile.SetSpriteBatch(spriteBatch, blendState: BlendState.Additive); { /*if (player.itemAnimation > 0) * { * var progress = 1 - player.itemAnimation / (float)player.itemAnimationMax; * var scale = projectile.scale * 0.5f * OrchidHelper.GradientValue<float>(MathHelper.Lerp, progress, 0, .8f, 1, .8f, .4f, 0); * * texture = OrchidHelper.GetExtraTexture(15); * position = projectile.Center - Main.screenPosition + new Vector2(0, projectile.gfxOffY) + new Vector2(MathHelper.Lerp(20f, -20f, progress), 0).RotatedBy(projectile.ai[0]); * color = Main.DiscoColor * 0.8f; * spriteBatch.Draw(texture, position, new Rectangle(0, 0, 180, 30), color, projectile.ai[0] + MathHelper.PiOver2, new Vector2(90, 30), scale, SpriteEffects.None, 0); * }*/ texture = OrchidHelper.GetExtraTexture(16); position = projectile.Center - Main.screenPosition + new Vector2(0, projectile.gfxOffY); color = Main.DiscoColor * 0.55f; spriteBatch.Draw(texture, position, null, color, projectile.rotation, texture.Size() * 0.5f, projectile.scale, SpriteEffects.None, 0f); } OrchidModProjectile.SetSpriteBatch(spriteBatch); lightColor = Color.White; return(true); }
public override void AI() { if (projectile.timeLeft == 1) { projectile.friendly = true; OrchidModProjectile.spawnDustCircle(projectile.Center, 44, 5, 5 + Main.rand.Next(3), true, 1.5f, 1f, 3f, true, true, false, 0, 0, true); } }
public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { OrchidModProjectile.spawnDustCircle(projectile.Center, 127, 20, 20, true, 1f); if (OrchidModShamanHelper.getNbShamanicBonds(player, modPlayer, mod) > 2) { target.AddBuff((72), 5 * 60); // Midas } }
public override void DrawEffects(NPC npc, ref Color drawColor) { if (npc.HasBuff(BuffType <Alchemist.Buffs.Debuffs.Attraction>()) && Main.time % 90 == 0) { OrchidModProjectile.spawnDustCircle(npc.Center, 60, 10, 10, true, 1.5f, 1f, 2f); OrchidModProjectile.spawnDustCircle(npc.Center, 60, 10, 12, true, 1.5f, 1f, 4f); } }
public override void Reaction(Player player, OrchidModPlayer modPlayer) { int spawnProj = ProjectileType <Alchemist.Projectiles.Nature.JungleLilyFlaskReaction>(); Projectile.NewProjectile(player.Center.X, player.Center.Y, 0f, 0f, spawnProj, 0, 0f, player.whoAmI); OrchidModProjectile.spawnDustCircle(player.Center, 15, 10, 7, true, 1.5f, 1f, 3f); OrchidModProjectile.spawnDustCircle(player.Center, 15, 15, 10, true, 1.5f, 1f, 5f); }
public override void Kill(int timeLeft) { int range = 50; // OrchidModProjectile.spawnDustCircle(projectile.Center, 67, (int)(range / 2), 5, true, 1.5f, 1f, 6f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 67, 5, 6, true, 1f, 1f, 4f); spawnGenericExplosion(projectile, projectile.damage, 1f, range * 2, 2, false, 27); }
public override void Kill(int timeLeft) { OrchidModProjectile.spawnDustCircle(projectile.Center, 170, 20, 15, true, 1f, 0f); int dust = Dust.NewDust(projectile.Center, 0, 0, 270, 0.0f, 0.0f, 0, new Color(), Main.rand.Next(30, 130) * 0.013f); Main.dust[dust].noGravity = true; Main.dust[dust].velocity *= 0.2f; Main.dust[dust].scale = 2.5f; }
public override void AI() { Player player = Main.player[Main.myPlayer]; // < TEST MP OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>(); NPC target = Main.npc[(int)projectile.ai[1]]; projectile.velocity *= 0.95f; if (Main.time % 5 == 0) { projectile.frame++; } if (projectile.frame == 7) { projectile.frame = 0; } if (target.active == false) { projectile.Kill(); } if (projectile.timeLeft < 540) { for (int k = 0; k < Main.player.Length; k++) { Player playerMove = Main.player[k]; Vector2 newMove = playerMove.Center - projectile.Center; float distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y); if (distanceTo < 100f) { newMove *= 3f / distanceTo; projectile.velocity = newMove; projectile.netUpdate = true; } if (projectile.owner == Main.myPlayer) { if (playerMove.Hitbox.Intersects(projectile.Hitbox)) { bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; if (!dummy) { OrchidModGamblerHelper.addGamblerChip(this.gamblingChipChance, player, modPlayer); } bool crit = (Main.rand.Next(101) <= modPlayer.gamblerCrit + this.baseCritChance); player.ApplyDamageToNPC(target, Main.DamageVar(projectile.damage), 0.1f, player.direction, crit); OrchidModProjectile.spawnDustCircle(projectile.Center, 29, 10, 10, true, 1.3f, 1f, 5f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(target.Center, 29, 10, 10, true, 1.3f, 1f, 5f, true, true, false, 0, 0, true); Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45); projectile.Kill(); } } } } }
public override void Kill(int timeLeft) { int dustType = this.redDust ? 60 : 59; OrchidModProjectile.spawnDustCircle(projectile.Center, dustType, 10, 5, true, 1.5f, 1f, 5f); for (int i = 0; i < 3; i++) { Main.dust[Dust.NewDust(projectile.position, projectile.width, projectile.height, dustType)].noGravity = true; } }
public override void SafeAI() { if (!this.initialized) { this.initialized = true; this.baseVelocity = projectile.velocity; } Player player = Main.player[projectile.owner]; OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>(); int cardType = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj ? modPlayer.gamblerCardDummy.type : modPlayer.gamblerCardCurrent.type; projectile.rotation += projectile.ai[1] * 0.05f; this.fireTimer--; this.dustVal--; projectile.velocity += this.baseVelocity / 100f; if (Main.rand.Next(20) == 0) { int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 27); Main.dust[dust].scale *= 1.5f; Main.dust[dust].noGravity = true; } if (Main.myPlayer == projectile.owner) { Vector2 vectorDist = player.Center - projectile.Center; float distanceTo = (float)Math.Sqrt(vectorDist.X * vectorDist.X + vectorDist.Y * vectorDist.Y); if ((!(Main.mouseLeft && cardType == ItemType <Gambler.Weapons.Cards.GoblinArmyCard>() && modPlayer.GamblerDeckInHand) && projectile.timeLeft < 840) || distanceTo > distance) { bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; OrchidModProjectile.spawnDustCircle(projectile.Center, 27, 5, 5, true, 1.3f, 1f, 5f, true, true, false, 0, 0, true); OrchidModProjectile.spawnDustCircle(projectile.Center, 27, 5, 5, true, 1.3f, 1f, 3f, true, true, false, 0, 0, true); projectile.Kill(); } } if (fireTimer <= 0 && projectile.ai[1] == 1f) { Vector2 target = Main.MouseWorld; Vector2 heading = target - projectile.Center; heading.Normalize(); heading *= 15f; int projType = ProjectileType <Gambler.Projectiles.GoblinArmyCardProjAlt>(); bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, heading.X, heading.Y, projType, projectile.damage, projectile.knockBack, projectile.owner), dummy); OrchidModProjectile.spawnDustCircle(projectile.Center, 27, 5, 5, true, 1.3f, 1f, 3f, true, true, false, 0, 0, true); fireTimerRef -= fireTimerRef > 15 ? 4 : 0; fireTimer = fireTimerRef; Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 8); } this.spawnDust(27, (int)distance); }
public override void SafeAI() { OrchidModProjectile.resetIFrames(projectile); for (int i = 0; i < 10; i++) { int dust2 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 18); Main.dust[dust2].scale = 1.2f; Main.dust[dust2].noGravity = true; Main.dust[dust2].velocity.X /= 3; Main.dust[dust2].velocity.Y /= 3; } }
public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { if (justHit == 0) { projectile.damage += 2; OrchidModProjectile.spawnDustCircle(projectile.Center, 178, 10, 10, true, 1.5f, 1f, 2f); } projectile.velocity.Y = -6; projectile.velocity.X *= 0.5f; this.justHit = 30; }
public override void SafeAI() { for (int i = 0; i < 20; i++) { int dust2 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 6); Main.dust[dust2].scale = 1.2f; Main.dust[dust2].noGravity = true; Main.dust[dust2].velocity.X /= 3; Main.dust[dust2].velocity.Y /= 3; } OrchidModProjectile.spawnExplosionGore(projectile); }
public override void Kill(int timeLeft) { int damage = (int)((projectile.damage / 8) * (projectile.frame + 1)); int range = (int)(25 * (projectile.frame + 1)); int nb = (int)(10 * (projectile.frame + 1)); OrchidModProjectile.spawnDustCircle(projectile.Center, sporeType, range, nb, true, 1.5f, 1f, 8f); spawnGenericExplosion(projectile, damage, projectile.knockBack, range * 2, 2, true, 14); int spawnProj = 0; int spawnProj2 = 0; switch (sporeType) { case 6: spawnProj = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProjAlt>(); break; case 59: spawnProj = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProjAlt>(); break; case 61: spawnProj = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProjAlt>(); break; case 63: spawnProj = ProjectileType <Alchemist.Projectiles.Air.AirSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Air.AirSporeProjAlt>(); break; default: break; } if (spawnProj != 0) { for (int i = 0; i < 5; i++) { Vector2 vel = (new Vector2(0f, -5f).RotatedBy(MathHelper.ToRadians(Main.rand.Next(360)))); int newSpore = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj, this.sporeDamage, 0f, projectile.owner); Main.projectile[newSpore].localAI[1] = 1f; } for (int i = 0; i < 5; i++) { Vector2 vel = (new Vector2(0f, (float)(3 + Main.rand.Next(4))).RotatedByRandom(MathHelper.ToRadians(180))); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj2, 0, 0f, projectile.owner); } } }
public override void AI() { projectile.alpha += 30; if (projectile.timeLeft == 80) { storeVelocity = projectile.velocity; storeDamage = projectile.damage; } if (projectile.timeLeft > 35) { projectile.velocity *= 0f; projectile.damage = 0; dustScale += 0.0195f; } if (projectile.timeLeft == 35) { projectile.damage = storeDamage; projectile.velocity = storeVelocity; projectile.extraUpdates = 1; OrchidModProjectile.spawnDustCircle(projectile.Center, 92, 20, 5, true, 1.5f, 1f, 1f, true, true, false, 0, 0, true); for (int i = 0; i < 5; i++) { int index = Dust.NewDust(projectile.position, projectile.width, projectile.height, 92); Main.dust[index].scale = 1.5f; Main.dust[index].velocity = projectile.velocity.RotatedByRandom(MathHelper.ToRadians(20)); Main.dust[index].noGravity = true; } } for (int i = 0; i < 3; i++) { Vector2 Position = projectile.position; int index2 = Dust.NewDust(Position, projectile.width, projectile.height, 92); Main.dust[index2].scale = (float)90 * 0.010f + dustScale / 3; Main.dust[index2].velocity *= 0.2f; Main.dust[index2].noGravity = true; } if (!this.initialized) { this.initialized = true; Player player = Main.player[projectile.owner]; OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>(); int newCrit = 10 * OrchidModShamanHelper.getNbShamanicBonds(player, modPlayer, mod) + modPlayer.shamanCrit + player.inventory[player.selectedItem].crit; OrchidModGlobalProjectile modProjectile = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>(); modProjectile.baseCritChance = newCrit; } }
public override void Kill(int timeLeft) { OrchidModProjectile.spawnDustCircle(projectile.Center, 172, 25, 10, true, 1.5f, 1f, 5f); int projType = ProjectileType <Gambler.Projectiles.MushroomCardProjExplosion>(); bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.position.X, projectile.position.Y, 0f, 0f, projType, (int)(projectile.damage * 0.8), 3f, projectile.owner, 0.0f, 0.0f), dummy); int dustType = 172; for (int i = 0; i < 3; i++) { Main.dust[Dust.NewDust(projectile.position, projectile.width, projectile.height, dustType)].noGravity = true; } }
public override void Kill(int timeLeft) { int range = 50; OrchidModProjectile.spawnDustCircle(projectile.Center, sporeType, (int)(range / 3), 5, true, 1.25f, 1f, 4f, true, true, false, 0, 0, true); spawnGenericExplosion(projectile, projectile.damage, projectile.knockBack, range * 3, 2, false); if (Main.rand.Next(2) == 0) { int spawnProj = 0; int spawnProj2 = 0; switch (sporeType) { case 6: spawnProj = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProjAlt>(); break; case 59: spawnProj = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProjAlt>(); break; case 61: spawnProj = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProjAlt>(); break; case 63: spawnProj = ProjectileType <Alchemist.Projectiles.Air.AirSporeProj>(); spawnProj2 = ProjectileType <Alchemist.Projectiles.Air.AirSporeProjAlt>(); break; default: break; } if (spawnProj != 0) { Vector2 vel = (new Vector2(0f, -5f).RotatedBy(MathHelper.ToRadians(Main.rand.Next(360)))); int newSpore = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj, this.sporeDamage, 0f, projectile.owner); Main.projectile[newSpore].localAI[1] = 1f; vel = (new Vector2(0f, (float)(3 + Main.rand.Next(4))).RotatedByRandom(MathHelper.ToRadians(180))); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj2, 0, 0f, projectile.owner); } } }
public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer) { if (justHit == 0) { projectile.damage += 2; bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj; int projType = ProjectileType <Gambler.Projectiles.KingSlimeCardProj2>(); OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0f, 0f, projType, projectile.damage, projectile.knockBack, projectile.owner), dummy); OrchidModProjectile.spawnDustCircle(projectile.Center, 59, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, false, true); } projectile.velocity.Y = -10f; projectile.velocity.X *= 0.5f; this.justHit = 30; projectile.ai[1] = 1f; }
public override void BonusProjectiles(Player player, OrchidModPlayer modPlayer, Projectile projectile, OrchidModGlobalProjectile modProjectile, bool dummy) { if (modProjectile.gamblerInternalCooldown == 0) { modProjectile.gamblerInternalCooldown = 50; int projType = ProjectileType <Gambler.Projectiles.OceanCardProj>(); Vector2 target = Main.MouseWorld; Vector2 heading = target - projectile.position; heading.Normalize(); heading *= new Vector2(0f, 5f).Length(); int newProjectile = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, heading.X, heading.Y, projType, projectile.damage, projectile.knockBack, player.whoAmI), dummy); Main.projectile[newProjectile].ai[1] = 1f; Main.projectile[newProjectile].netUpdate = true; OrchidModProjectile.spawnDustCircle(projectile.Center, 31, 10, 10, true, 1.5f, 1f, 3f, true, true, false, 0, 0, true); } }
public override void SafeKill(int timeLeft, Player player, OrchidModPlayer modPlayer) { Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 85); int dmg = projectile.damage; OrchidModProjectile.spawnDustCircle(projectile.Center, 102, 100, 20, false, 1.5f, 1f, 5f); OrchidModProjectile.spawnDustCircle(projectile.Center, 102, 150, 20, false, 1.5f, 1f, 5f); Player targetPlayer = Main.player[Main.myPlayer]; Vector2 center = new Vector2(projectile.position.X + projectile.width * 0.5f, projectile.position.Y + projectile.height * 0.5f); float offsetX = targetPlayer.Center.X - center.X; float offsetY = targetPlayer.Center.Y - center.Y; float distance = (float)Math.Sqrt(offsetX * offsetX + offsetY * offsetY); if (distance < 300f) { if (!targetPlayer.moonLeech) { int damage = player.statLifeMax2 - player.statLife; if (dmg > damage) { dmg = damage; } if (dmg > 0) { player.HealEffect(dmg, true); player.statLife += dmg; } } } Vector2 move = Vector2.Zero; distance = 500f; for (int k = 0; k < 200; k++) { if (Main.npc[k].active && !Main.npc[k].friendly) { Vector2 newMove = Main.npc[k].Center - projectile.Center; float distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y); if (distanceTo < distance) { OrchidModAlchemistNPC modTarget = Main.npc[k].GetGlobalNPC <OrchidModAlchemistNPC>(); modTarget.alchemistNature = 600; } } } }