namespace Terraria { using Microsoft.Xna.Framework; using System; using System.Runtime.InteropServices; public class Projectile { public bool active; public int aiStyle; public int alpha; public int damage; public int direction; public bool friendly; public int height; public bool hostile; public int identity; public bool ignoreWater; public float knockBack; public bool lavaWet; public float light; public static int maxAI = 2; public int maxUpdates; public string name = ""; public bool netUpdate; public int numUpdates; public int owner = 8; public int penetrate = 1; public int[] playerImmune = new int[8]; public Vector2 position; public int restrikeDelay; public float rotation; public float scale = 1f; public int soundDelay; public bool tileCollide; public int timeLeft; public int type; public Vector2 velocity; public bool wet; public byte wetCount; public int whoAmI; public int width; public float[] ai = new float[maxAI]; public void AI() { if (this.aiStyle == 1) { if (((this.type == 20) || (this.type == 14)) || (this.type == 0x24)) { if (this.alpha > 0) { this.alpha -= 15; } if (this.alpha < 0) { this.alpha = 0; } } if (((this.type != 5) && (this.type != 14)) && ((this.type != 20) && (this.type != 0x24))) { this.ai[0]++; } if (this.ai[0] >= 15f) { this.ai[0] = 15f; this.velocity.Y += 0.1f; } this.rotation = ((float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X)) + 1.57f; if (this.velocity.Y > 16f) { this.velocity.Y = 16f; } } else if (this.aiStyle == 2) { this.ai[0]++; if (this.ai[0] >= 20f) { this.velocity.Y += 0.4f; this.velocity.X *= 0.97f; } this.rotation += ((Math.Abs(this.velocity.X) + Math.Abs(this.velocity.Y)) * 0.03f) * this.direction; if (this.velocity.Y > 16f) { this.velocity.Y = 16f; } } else { Color color; if (this.aiStyle == 3) { if (this.soundDelay == 0) { this.soundDelay = 8; Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 7); } if (this.type == 0x13) { for (int i = 0; i < 2; i++) { color = new Color(); int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, color, 2f); Main.dust[index].noGravity = true; Main.dust[index].velocity.X *= 0.3f; Main.dust[index].velocity.Y *= 0.3f; } } else if (this.type == 0x21) { if (Main.rand.Next(1) == 0) { int num3 = Dust.NewDust(this.position, this.width, this.height, 40, this.velocity.X * 0.25f, this.velocity.Y * 0.25f, 0, new Color(), 1.4f); Main.dust[num3].noGravity = true; } } else if (Main.rand.Next(5) == 0) { Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.5f, this.velocity.Y * 0.5f, 150, new Color(), 0.9f); } if (this.ai[0] == 0f) { this.ai[1]++; if (this.ai[1] >= 30f) { this.ai[0] = 1f; this.ai[1] = 0f; this.netUpdate = true; } } else { this.tileCollide = false; float num4 = 9f; float num5 = 0.4f; if (this.type == 0x13) { num4 = 13f; num5 = 0.6f; } else if (this.type == 0x21) { num4 = 15f; num5 = 0.8f; } Vector2 vector = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num6 = (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2)) - vector.X; float num7 = (Main.player[this.owner].position.Y + (Main.player[this.owner].height / 2)) - vector.Y; float num8 = (float) Math.Sqrt((double) ((num6 * num6) + (num7 * num7))); num8 = num4 / num8; num6 *= num8; num7 *= num8; if (this.velocity.X < num6) { this.velocity.X += num5; if ((this.velocity.X < 0f) && (num6 > 0f)) { this.velocity.X += num5; } } else if (this.velocity.X > num6) { this.velocity.X -= num5; if ((this.velocity.X > 0f) && (num6 < 0f)) { this.velocity.X -= num5; } } if (this.velocity.Y < num7) { this.velocity.Y += num5; if ((this.velocity.Y < 0f) && (num7 > 0f)) { this.velocity.Y += num5; } } else if (this.velocity.Y > num7) { this.velocity.Y -= num5; if ((this.velocity.Y > 0f) && (num7 < 0f)) { this.velocity.Y -= num5; } } if (Main.myPlayer == this.owner) { Rectangle rectangle = new Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height); Rectangle rectangle2 = new Rectangle((int) Main.player[this.owner].position.X, (int) Main.player[this.owner].position.Y, Main.player[this.owner].width, Main.player[this.owner].height); if (rectangle.Intersects(rectangle2)) { this.Kill(); } } } this.rotation += 0.4f * this.direction; } else if (this.aiStyle == 4) { this.rotation = ((float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X)) + 1.57f; if (this.ai[0] != 0f) { if ((this.alpha < 170) && ((this.alpha + 5) >= 170)) { for (int j = 0; j < 3; j++) { color = new Color(); Dust.NewDust(this.position, this.width, this.height, 0x12, this.velocity.X * 0.025f, this.velocity.Y * 0.025f, 170, color, 1.2f); } Dust.NewDust(this.position, this.width, this.height, 14, 0f, 0f, 170, new Color(), 1.1f); } this.alpha += 5; if (this.alpha >= 0xff) { this.Kill(); } } else { this.alpha -= 50; if (this.alpha <= 0) { this.alpha = 0; this.ai[0] = 1f; if (this.ai[1] == 0f) { this.ai[1]++; this.position += (Vector2) (this.velocity * 1f); } if ((this.type == 7) && (Main.myPlayer == this.owner)) { int type = this.type; if (this.ai[1] >= 6f) { type++; } int num10 = NewProjectile((this.position.X + this.velocity.X) + (this.width / 2), (this.position.Y + this.velocity.Y) + (this.height / 2), this.velocity.X, this.velocity.Y, type, this.damage, this.knockBack, this.owner); Main.projectile[num10].damage = this.damage; Main.projectile[num10].ai[1] = this.ai[1] + 1f; NetMessage.SendData(0x1b, -1, -1, "", num10, 0f, 0f, 0f); } } } } else if (this.aiStyle == 5) { if (this.soundDelay == 0) { this.soundDelay = 20 + Main.rand.Next(40); Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 9); } if (this.ai[0] == 0f) { this.ai[0] = 1f; } this.alpha += (int) (25f * this.ai[0]); if (this.alpha > 200) { this.alpha = 200; this.ai[0] = -1f; } if (this.alpha < 0) { this.alpha = 0; this.ai[0] = 1f; } this.rotation += ((Math.Abs(this.velocity.X) + Math.Abs(this.velocity.Y)) * 0.01f) * this.direction; if (Main.rand.Next(10) == 0) { Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.5f, this.velocity.Y * 0.5f, 150, new Color(), 1.2f); } if (Main.rand.Next(20) == 0) { Gore.NewGore(this.position, new Vector2(this.velocity.X * 0.2f, this.velocity.Y * 0.2f), Main.rand.Next(0x10, 0x12)); } } else if (this.aiStyle == 6) { this.velocity = (Vector2) (this.velocity * 0.95f); this.ai[0]++; if (this.ai[0] == 180f) { this.Kill(); } if (this.ai[1] == 0f) { this.ai[1] = 1f; for (int k = 0; k < 30; k++) { color = new Color(); Dust.NewDust(this.position, this.width, this.height, 10 + this.type, this.velocity.X, this.velocity.Y, 50, color, 1f); } } if (this.type == 10) { int num13 = ((int) (this.position.X / 16f)) - 1; int maxTilesX = ((int) ((this.position.X + this.width) / 16f)) + 2; int num15 = ((int) (this.position.Y / 16f)) - 1; int maxTilesY = ((int) ((this.position.Y + this.height) / 16f)) + 2; if (num13 < 0) { num13 = 0; } if (maxTilesX > Main.maxTilesX) { maxTilesX = Main.maxTilesX; } if (num15 < 0) { num15 = 0; } if (maxTilesY > Main.maxTilesY) { maxTilesY = Main.maxTilesY; } for (int m = num13; m < maxTilesX; m++) { for (int n = num15; n < maxTilesY; n++) { Vector2 vector2; vector2.X = m * 0x10; vector2.Y = n * 0x10; if (((((this.position.X + this.width) > vector2.X) && (this.position.X < (vector2.X + 16f))) && (((this.position.Y + this.height) > vector2.Y) && (this.position.Y < (vector2.Y + 16f)))) && ((Main.myPlayer == this.owner) && Main.tile[m, n].active)) { if (Main.tile[m, n].type == 0x17) { Main.tile[m, n].type = 2; WorldGen.SquareTileFrame(m, n, true); if (Main.netMode == 1) { NetMessage.SendTileSquare(-1, m - 1, n - 1, 3); } } if (Main.tile[m, n].type == 0x19) { Main.tile[m, n].type = 1; WorldGen.SquareTileFrame(m, n, true); if (Main.netMode == 1) { NetMessage.SendTileSquare(-1, m - 1, n - 1, 3); } } } } } } } else if (this.aiStyle == 7) { if (Main.player[this.owner].dead) { this.Kill(); } else { Vector2 vector3 = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num19 = (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2)) - vector3.X; float num20 = (Main.player[this.owner].position.Y + (Main.player[this.owner].height / 2)) - vector3.Y; float num21 = (float) Math.Sqrt((double) ((num19 * num19) + (num20 * num20))); this.rotation = ((float) Math.Atan2((double) num20, (double) num19)) - 1.57f; if (this.ai[0] == 0f) { if (((num21 > 300f) && (this.type == 13)) || ((num21 > 400f) && (this.type == 0x20))) { this.ai[0] = 1f; } int num22 = ((int) (this.position.X / 16f)) - 1; int num23 = ((int) ((this.position.X + this.width) / 16f)) + 2; int num24 = ((int) (this.position.Y / 16f)) - 1; int num25 = ((int) ((this.position.Y + this.height) / 16f)) + 2; if (num22 < 0) { num22 = 0; } if (num23 > Main.maxTilesX) { num23 = Main.maxTilesX; } if (num24 < 0) { num24 = 0; } if (num25 > Main.maxTilesY) { num25 = Main.maxTilesY; } for (int num26 = num22; num26 < num23; num26++) { for (int num27 = num24; num27 < num25; num27++) { Vector2 vector4; if (Main.tile[num26, num27] == null) { Main.tile[num26, num27] = new Tile(); } vector4.X = num26 * 0x10; vector4.Y = num27 * 0x10; if (((((this.position.X + this.width) > vector4.X) && (this.position.X < (vector4.X + 16f))) && (((this.position.Y + this.height) > vector4.Y) && (this.position.Y < (vector4.Y + 16f)))) && (Main.tile[num26, num27].active && Main.tileSolid[Main.tile[num26, num27].type])) { if (Main.player[this.owner].grapCount < 10) { Main.player[this.owner].grappling[Main.player[this.owner].grapCount] = this.whoAmI; Player player1 = Main.player[this.owner]; player1.grapCount++; } if (Main.myPlayer == this.owner) { int num28 = 0; int num29 = -1; int timeLeft = 0x186a0; for (int num31 = 0; num31 < 0x3e8; num31++) { if ((Main.projectile[num31].active && (Main.projectile[num31].owner == this.owner)) && (Main.projectile[num31].aiStyle == 7)) { if (Main.projectile[num31].timeLeft < timeLeft) { num29 = num31; timeLeft = Main.projectile[num31].timeLeft; } num28++; } } if (num28 > 3) { Main.projectile[num29].Kill(); } } WorldGen.KillTile(num26, num27, true, true, false); Main.PlaySound(0, num26 * 0x10, num27 * 0x10, 1); this.velocity.X = 0f; this.velocity.Y = 0f; this.ai[0] = 2f; this.position.X = ((num26 * 0x10) + 8) - (this.width / 2); this.position.Y = ((num27 * 0x10) + 8) - (this.height / 2); this.damage = 0; this.netUpdate = true; if (Main.myPlayer == this.owner) { NetMessage.SendData(13, -1, -1, "", this.owner, 0f, 0f, 0f); } break; } } if (this.ai[0] == 2f) { return; } } } else if (this.ai[0] == 1f) { float num32 = 11f; if (this.type == 0x20) { num32 = 15f; } if (num21 < 24f) { this.Kill(); } num21 = num32 / num21; num19 *= num21; num20 *= num21; this.velocity.X = num19; this.velocity.Y = num20; } else if (this.ai[0] == 2f) { int num33 = ((int) (this.position.X / 16f)) - 1; int num34 = ((int) ((this.position.X + this.width) / 16f)) + 2; int num35 = ((int) (this.position.Y / 16f)) - 1; int num36 = ((int) ((this.position.Y + this.height) / 16f)) + 2; if (num33 < 0) { num33 = 0; } if (num34 > Main.maxTilesX) { num34 = Main.maxTilesX; } if (num35 < 0) { num35 = 0; } if (num36 > Main.maxTilesY) { num36 = Main.maxTilesY; } bool flag = true; for (int num37 = num33; num37 < num34; num37++) { for (int num38 = num35; num38 < num36; num38++) { Vector2 vector5; if (Main.tile[num37, num38] == null) { Main.tile[num37, num38] = new Tile(); } vector5.X = num37 * 0x10; vector5.Y = num38 * 0x10; if (((((this.position.X + (this.width / 2)) > vector5.X) && ((this.position.X + (this.width / 2)) < (vector5.X + 16f))) && (((this.position.Y + (this.height / 2)) > vector5.Y) && ((this.position.Y + (this.height / 2)) < (vector5.Y + 16f)))) && (Main.tile[num37, num38].active && Main.tileSolid[Main.tile[num37, num38].type])) { flag = false; } } } if (flag) { this.ai[0] = 1f; } else if (Main.player[this.owner].grapCount < 10) { Main.player[this.owner].grappling[Main.player[this.owner].grapCount] = this.whoAmI; Player player2 = Main.player[this.owner]; player2.grapCount++; } } } } else if (this.aiStyle == 8) { if (this.type == 0x1b) { color = new Color(); int num39 = Dust.NewDust(new Vector2(this.position.X + this.velocity.X, this.position.Y + this.velocity.Y), this.width, this.height, 0x1d, this.velocity.X, this.velocity.Y, 100, color, 3f); Main.dust[num39].noGravity = true; num39 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1d, this.velocity.X, this.velocity.Y, 100, new Color(), 1.5f); } else { for (int num40 = 0; num40 < 2; num40++) { color = new Color(); int num41 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, color, 2f); Main.dust[num41].noGravity = true; Main.dust[num41].velocity.X *= 0.3f; Main.dust[num41].velocity.Y *= 0.3f; } } if (this.type != 0x1b) { this.ai[1]++; } if (this.ai[1] >= 20f) { this.velocity.Y += 0.2f; } this.rotation += 0.3f * this.direction; if (this.velocity.Y > 16f) { this.velocity.Y = 16f; } } else if (this.aiStyle == 9) { if (this.type == 0x22) { color = new Color(); int num42 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, color, 3.5f); Main.dust[num42].noGravity = true; Dust dust1 = Main.dust[num42]; dust1.velocity = (Vector2) (dust1.velocity * 1.4f); num42 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, new Color(), 1.5f); } else { if ((this.soundDelay == 0) && ((Math.Abs(this.velocity.X) + Math.Abs(this.velocity.Y)) > 2f)) { this.soundDelay = 10; Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 9); } int num43 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 15, 0f, 0f, 100, new Color(), 2f); Dust dust2 = Main.dust[num43]; dust2.velocity = (Vector2) (dust2.velocity * 0.3f); Main.dust[num43].position.X = ((this.position.X + (this.width / 2)) + 4f) + Main.rand.Next(-4, 5); Main.dust[num43].position.Y = (this.position.Y + (this.height / 2)) + Main.rand.Next(-4, 5); Main.dust[num43].noGravity = true; } if ((Main.myPlayer == this.owner) && (this.ai[0] == 0f)) { if (Main.player[this.owner].channel) { float num44 = 12f; Vector2 vector6 = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num45 = (Main.mouseState.X + Main.screenPosition.X) - vector6.X; float num46 = (Main.mouseState.Y + Main.screenPosition.Y) - vector6.Y; float num47 = (float) Math.Sqrt((double) ((num45 * num45) + (num46 * num46))); num47 = (float) Math.Sqrt((double) ((num45 * num45) + (num46 * num46))); if (num47 > num44) { num47 = num44 / num47; num45 *= num47; num46 *= num47; if ((num45 != this.velocity.X) || (num46 != this.velocity.Y)) { this.netUpdate = true; } this.velocity.X = num45; this.velocity.Y = num46; } else { if ((num45 != this.velocity.X) || (num46 != this.velocity.Y)) { this.netUpdate = true; } this.velocity.X = num45; this.velocity.Y = num46; } } else { this.Kill(); } } if (this.type == 0x22) { this.rotation += 0.3f * this.direction; } else if ((this.velocity.X != 0f) || (this.velocity.Y != 0f)) { this.rotation = ((float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X)) - 2.355f; } if (this.velocity.Y > 16f) { this.velocity.Y = 16f; } } else if (this.aiStyle == 10) { if (this.type == 0x1f) { if (Main.rand.Next(2) == 0) { int num48 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x20, 0f, this.velocity.Y / 2f, 0, new Color(), 1f); Main.dust[num48].velocity.X *= 0.4f; } } else if (Main.rand.Next(20) == 0) { Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0, 0f, 0f, 0, new Color(), 1f); } if ((Main.myPlayer == this.owner) && (this.ai[0] == 0f)) { if (Main.player[this.owner].channel) { float num49 = 12f; Vector2 vector7 = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num50 = (Main.mouseState.X + Main.screenPosition.X) - vector7.X; float num51 = (Main.mouseState.Y + Main.screenPosition.Y) - vector7.Y; float num52 = (float) Math.Sqrt((double) ((num50 * num50) + (num51 * num51))); num52 = (float) Math.Sqrt((double) ((num50 * num50) + (num51 * num51))); if (num52 > num49) { num52 = num49 / num52; num50 *= num52; num51 *= num52; if ((num50 != this.velocity.X) || (num51 != this.velocity.Y)) { this.netUpdate = true; } this.velocity.X = num50; this.velocity.Y = num51; } else { if ((num50 != this.velocity.X) || (num51 != this.velocity.Y)) { this.netUpdate = true; } this.velocity.X = num50; this.velocity.Y = num51; } } else { this.ai[0] = 1f; this.netUpdate = true; } } if (this.ai[0] == 1f) { this.velocity.Y += 0.41f; } this.rotation += 0.1f; if (this.velocity.Y > 10f) { this.velocity.Y = 10f; } } else if (this.aiStyle == 11) { this.rotation += 0.02f; if (Main.myPlayer == this.owner) { if (!Main.player[this.owner].dead) { float num53 = 4f; Vector2 vector8 = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num54 = (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2)) - vector8.X; float num55 = (Main.player[this.owner].position.Y + (Main.player[this.owner].height / 2)) - vector8.Y; float num56 = (float) Math.Sqrt((double) ((num54 * num54) + (num55 * num55))); num56 = (float) Math.Sqrt((double) ((num54 * num54) + (num55 * num55))); if (num56 > Main.screenWidth) { this.position.X = (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2)) - (this.width / 2); this.position.Y = (Main.player[this.owner].position.Y + (Main.player[this.owner].height / 2)) - (this.height / 2); } else if (num56 > 64f) { num56 = num53 / num56; num54 *= num56; num55 *= num56; if ((num54 != this.velocity.X) || (num55 != this.velocity.Y)) { this.netUpdate = true; } this.velocity.X = num54; this.velocity.Y = num55; } else { if ((this.velocity.X != 0f) || (this.velocity.Y != 0f)) { this.netUpdate = true; } this.velocity.X = 0f; this.velocity.Y = 0f; } } else { this.Kill(); } } } else if (this.aiStyle == 12) { this.scale -= 0.05f; if (this.scale <= 0f) { this.Kill(); } if (this.ai[0] > 4f) { this.alpha = 150; this.light = 0.8f; color = new Color(); int num57 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1d, this.velocity.X, this.velocity.Y, 100, color, 2.5f); Main.dust[num57].noGravity = true; Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1d, this.velocity.X, this.velocity.Y, 100, new Color(), 1.5f); } else { this.ai[0]++; } this.rotation += 0.3f * this.direction; } else if (this.aiStyle == 13) { if (Main.player[this.owner].dead) { this.Kill(); } else { Main.player[this.owner].itemAnimation = 5; Main.player[this.owner].itemTime = 5; if ((this.position.X + (this.width / 2)) > (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2))) { Main.player[this.owner].direction = 1; } else { Main.player[this.owner].direction = -1; } Vector2 vector9 = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num58 = (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2)) - vector9.X; float num59 = (Main.player[this.owner].position.Y + (Main.player[this.owner].height / 2)) - vector9.Y; float num60 = (float) Math.Sqrt((double) ((num58 * num58) + (num59 * num59))); if (this.ai[0] != 0f) { if (this.ai[0] == 1f) { this.tileCollide = false; this.rotation = ((float) Math.Atan2((double) num59, (double) num58)) - 1.57f; float num61 = 11f; if (num60 < 50f) { this.Kill(); } num60 = num61 / num60; num58 *= num60; num59 *= num60; this.velocity.X = num58; this.velocity.Y = num59; } } else { if (num60 > 600f) { this.ai[0] = 1f; } this.rotation = ((float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X)) + 1.57f; this.ai[1]++; if (this.ai[1] > 2f) { this.alpha = 0; } if (this.ai[1] >= 10f) { this.ai[1] = 15f; this.velocity.Y += 0.3f; } } } } else if (this.aiStyle == 14) { this.ai[0]++; if (this.ai[0] > 5f) { this.ai[0] = 5f; if ((this.velocity.Y == 0f) && (this.velocity.X != 0f)) { this.velocity.X *= 0.97f; if ((this.velocity.X > -0.01) && (this.velocity.X < 0.01)) { this.velocity.X = 0f; this.netUpdate = true; } } this.velocity.Y += 0.2f; } this.rotation += this.velocity.X * 0.1f; } else if (this.aiStyle == 15) { if (this.type == 0x19) { if (Main.rand.Next(15) == 0) { Dust.NewDust(this.position, this.width, this.height, 14, 0f, 0f, 150, new Color(), 1.3f); } } else if (this.type == 0x1a) { int num62 = Dust.NewDust(this.position, this.width, this.height, 0x1d, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, new Color(), 2.5f); Main.dust[num62].noGravity = true; Main.dust[num62].velocity.X /= 2f; Main.dust[num62].velocity.Y /= 2f; } else if (this.type == 0x23) { int num63 = Dust.NewDust(this.position, this.width, this.height, 6, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, new Color(), 3f); Main.dust[num63].noGravity = true; Main.dust[num63].velocity.X *= 2f; Main.dust[num63].velocity.Y *= 2f; } if (Main.player[this.owner].dead) { this.Kill(); } else { Main.player[this.owner].itemAnimation = 5; Main.player[this.owner].itemTime = 5; if ((this.position.X + (this.width / 2)) > (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2))) { Main.player[this.owner].direction = 1; } else { Main.player[this.owner].direction = -1; } Vector2 vector10 = new Vector2(this.position.X + (this.width * 0.5f), this.position.Y + (this.height * 0.5f)); float num64 = (Main.player[this.owner].position.X + (Main.player[this.owner].width / 2)) - vector10.X; float num65 = (Main.player[this.owner].position.Y + (Main.player[this.owner].height / 2)) - vector10.Y; float num66 = (float) Math.Sqrt((double) ((num64 * num64) + (num65 * num65))); if (this.ai[0] == 0f) { this.tileCollide = true; if (num66 > 300f) { this.ai[0] = 1f; } else { this.ai[1]++; if (this.ai[1] > 2f) { this.alpha = 0; } if (this.ai[1] >= 5f) { this.ai[1] = 15f; this.velocity.Y += 0.5f; this.velocity.X *= 0.95f; } } } else if (this.ai[0] == 1f) { this.tileCollide = false; float num67 = 11f; if (num66 < 20f) { this.Kill(); } num66 = num67 / num66; num64 *= num66; num65 *= num66; this.velocity.X = num64; this.velocity.Y = num65; } this.rotation += this.velocity.X * 0.03f; } } else if (this.aiStyle == 0x10) { if (((this.owner == Main.myPlayer) && (this.timeLeft <= 3)) && (this.ai[1] == 0f)) { this.ai[1] = 1f; this.netUpdate = true; } if (this.type == 0x25) { try { int num68 = ((int) (this.position.X / 16f)) - 1; int num69 = ((int) ((this.position.X + this.width) / 16f)) + 2; int num70 = ((int) (this.position.Y / 16f)) - 1; int num71 = ((int) ((this.position.Y + this.height) / 16f)) + 2; if (num68 < 0) { num68 = 0; } if (num69 > Main.maxTilesX) { num69 = Main.maxTilesX; } if (num70 < 0) { num70 = 0; } if (num71 > Main.maxTilesY) { num71 = Main.maxTilesY; } for (int num72 = num68; num72 < num69; num72++) { for (int num73 = num70; num73 < num71; num73++) { if (((Main.tile[num72, num73] != null) && Main.tile[num72, num73].active) && (Main.tileSolid[Main.tile[num72, num73].type] || (Main.tileSolidTop[Main.tile[num72, num73].type] && (Main.tile[num72, num73].frameY == 0)))) { Vector2 vector11; vector11.X = num72 * 0x10; vector11.Y = num73 * 0x10; if (((((this.position.X + this.width) - 4f) > vector11.X) && ((this.position.X + 4f) < (vector11.X + 16f))) && ((((this.position.Y + this.height) - 4f) > vector11.Y) && ((this.position.Y + 4f) < (vector11.Y + 16f)))) { this.velocity.X = 0f; this.velocity.Y = -0.2f; } } } } } catch { } } if (this.ai[1] > 0f) { this.alpha = 0xff; if ((this.type == 0x1c) || (this.type == 0x25)) { this.position.X += this.width / 2; this.position.Y += this.height / 2; this.width = 0x80; this.height = 0x80; this.position.X -= this.width / 2; this.position.Y -= this.height / 2; this.damage = 100; this.knockBack = 8f; } else if (this.type == 0x1d) { this.position.X += this.width / 2; this.position.Y += this.height / 2; this.width = 250; this.height = 250; this.position.X -= this.width / 2; this.position.Y -= this.height / 2; this.damage = 250; this.knockBack = 10f; } else if (this.type == 30) { this.position.X += this.width / 2; this.position.Y += this.height / 2; this.width = 0x80; this.height = 0x80; this.position.X -= this.width / 2; this.position.Y -= this.height / 2; this.knockBack = 8f; } } else if ((this.type != 30) && (Main.rand.Next(4) == 0)) { if (this.type != 30) { this.damage = 0; } Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, new Color(), 1f); } this.ai[0]++; if (((this.type == 30) && (this.ai[0] > 10f)) || ((this.type != 30) && (this.ai[0] > 5f))) { this.ai[0] = 10f; if ((this.velocity.Y == 0f) && (this.velocity.X != 0f)) { this.velocity.X *= 0.97f; if (this.type == 0x1d) { this.velocity.X *= 0.99f; } if ((this.velocity.X > -0.01) && (this.velocity.X < 0.01)) { this.velocity.X = 0f; this.netUpdate = true; } } this.velocity.Y += 0.2f; } this.rotation += this.velocity.X * 0.1f; } } } public Color GetAlpha(Color newColor) { int r; int g; int b; if (((this.type == 9) || (this.type == 15)) || (this.type == 0x22)) { r = newColor.R - (this.alpha / 3); g = newColor.G - (this.alpha / 3); b = newColor.B - (this.alpha / 3); } else if ((this.type == 0x10) || (this.type == 0x12)) { r = newColor.R; g = newColor.G; b = newColor.B; } else { r = newColor.R - this.alpha; g = newColor.G - this.alpha; b = newColor.B - this.alpha; } int a = newColor.A - this.alpha; if (a < 0) { a = 0; } if (a > 0xff) { a = 0xff; } return new Color(r, g, b, a); } public void Kill() { if (this.active) { Color color; if (this.type == 1) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int i = 0; i < 10; i++) { color = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 7, 0f, 0f, 0, color, 1f); } } else if (this.type == 2) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int j = 0; j < 20; j++) { Color newColor = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, newColor, 1f); } } else if (this.type == 3) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int k = 0; k < 10; k++) { Color color3 = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 1, this.velocity.X * 0.1f, this.velocity.Y * 0.1f, 0, color3, 0.75f); } } else if (this.type == 4) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int m = 0; m < 10; m++) { Color color4 = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 14, 0f, 0f, 150, color4, 1.1f); } } else if (this.type == 5) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); for (int n = 0; n < 60; n++) { Color color5 = new Color(); Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.5f, this.velocity.Y * 0.5f, 150, color5, 1.5f); } } else if ((this.type == 9) || (this.type == 12)) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); for (int num6 = 0; num6 < 10; num6++) { Color color6 = new Color(); Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.1f, this.velocity.Y * 0.1f, 150, color6, 1.2f); } for (int num7 = 0; num7 < 3; num7++) { Gore.NewGore(this.position, new Vector2(this.velocity.X * 0.05f, this.velocity.Y * 0.05f), Main.rand.Next(0x10, 0x12)); } if ((this.type == 12) && (this.damage < 100)) { for (int num8 = 0; num8 < 10; num8++) { Color color7 = new Color(); Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.1f, this.velocity.Y * 0.1f, 150, color7, 1.2f); } for (int num9 = 0; num9 < 3; num9++) { Gore.NewGore(this.position, new Vector2(this.velocity.X * 0.05f, this.velocity.Y * 0.05f), Main.rand.Next(0x10, 0x12)); } } } else if (((this.type == 14) || (this.type == 20)) || (this.type == 0x24)) { Collision.HitTiles(this.position, this.velocity, this.width, this.height); Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); } else if ((this.type == 15) || (this.type == 0x22)) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); for (int num10 = 0; num10 < 20; num10++) { Color color8 = new Color(); int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, -this.velocity.X * 0.2f, -this.velocity.Y * 0.2f, 100, color8, 2f); Main.dust[index].noGravity = true; Dust dust1 = Main.dust[index]; dust1.velocity = (Vector2) (dust1.velocity * 2f); color = new Color(); index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, -this.velocity.X * 0.2f, -this.velocity.Y * 0.2f, 100, color, 1f); Dust dust2 = Main.dust[index]; dust2.velocity = (Vector2) (dust2.velocity * 2f); } } else if (this.type == 0x10) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); for (int num12 = 0; num12 < 20; num12++) { color = new Color(); int num13 = Dust.NewDust(new Vector2(this.position.X - this.velocity.X, this.position.Y - this.velocity.Y), this.width, this.height, 15, 0f, 0f, 100, color, 2f); Main.dust[num13].noGravity = true; Dust dust3 = Main.dust[num13]; dust3.velocity = (Vector2) (dust3.velocity * 2f); color = new Color(); num13 = Dust.NewDust(new Vector2(this.position.X - this.velocity.X, this.position.Y - this.velocity.Y), this.width, this.height, 15, 0f, 0f, 100, color, 1f); } } else if (this.type == 0x11) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int num14 = 0; num14 < 5; num14++) { color = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0, 0f, 0f, 0, color, 1f); } } else if (this.type == 0x1f) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int num15 = 0; num15 < 5; num15++) { color = new Color(); int num16 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x20, 0f, 0f, 0, color, 1f); Dust dust4 = Main.dust[num16]; dust4.velocity = (Vector2) (dust4.velocity * 0.6f); } } else if (this.type == 0x15) { Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); for (int num17 = 0; num17 < 10; num17++) { color = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1a, 0f, 0f, 0, color, 0.8f); } } else if (this.type == 0x18) { for (int num18 = 0; num18 < 10; num18++) { color = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 1, this.velocity.X * 0.1f, this.velocity.Y * 0.1f, 0, color, 0.75f); } } else if (this.type == 0x1b) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); for (int num19 = 0; num19 < 30; num19++) { color = new Color(); int num20 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1d, this.velocity.X * 0.1f, this.velocity.Y * 0.1f, 100, color, 3f); Main.dust[num20].noGravity = true; color = new Color(); Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1d, this.velocity.X * 0.1f, this.velocity.Y * 0.1f, 100, color, 2f); } } else { Vector2 vector; if (((this.type == 0x1c) || (this.type == 30)) || (this.type == 0x25)) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 14); this.position.X += this.width / 2; this.position.Y += this.height / 2; this.width = 0x16; this.height = 0x16; this.position.X -= this.width / 2; this.position.Y -= this.height / 2; for (int num21 = 0; num21 < 20; num21++) { color = new Color(); int num22 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1f, 0f, 0f, 100, color, 1.5f); Dust dust5 = Main.dust[num22]; dust5.velocity = (Vector2) (dust5.velocity * 1.4f); } for (int num23 = 0; num23 < 10; num23++) { color = new Color(); int num24 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, color, 2.5f); Main.dust[num24].noGravity = true; Dust dust6 = Main.dust[num24]; dust6.velocity = (Vector2) (dust6.velocity * 5f); color = new Color(); num24 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, color, 1.5f); Dust dust7 = Main.dust[num24]; dust7.velocity = (Vector2) (dust7.velocity * 3f); } vector = new Vector2(); int num25 = Gore.NewGore(new Vector2(this.position.X, this.position.Y), vector, Main.rand.Next(0x3d, 0x40)); Gore gore1 = Main.gore[num25]; gore1.velocity = (Vector2) (gore1.velocity * 0.4f); Main.gore[num25].velocity.X++; Main.gore[num25].velocity.Y++; vector = new Vector2(); num25 = Gore.NewGore(new Vector2(this.position.X, this.position.Y), vector, Main.rand.Next(0x3d, 0x40)); Gore gore2 = Main.gore[num25]; gore2.velocity = (Vector2) (gore2.velocity * 0.4f); Main.gore[num25].velocity.X--; Main.gore[num25].velocity.Y++; vector = new Vector2(); num25 = Gore.NewGore(new Vector2(this.position.X, this.position.Y), vector, Main.rand.Next(0x3d, 0x40)); Gore gore3 = Main.gore[num25]; gore3.velocity = (Vector2) (gore3.velocity * 0.4f); Main.gore[num25].velocity.X++; Main.gore[num25].velocity.Y--; num25 = Gore.NewGore(new Vector2(this.position.X, this.position.Y), new Vector2(), Main.rand.Next(0x3d, 0x40)); Gore gore4 = Main.gore[num25]; gore4.velocity = (Vector2) (gore4.velocity * 0.4f); Main.gore[num25].velocity.X--; Main.gore[num25].velocity.Y--; } else if (this.type == 0x1d) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 14); this.position.X += this.width / 2; this.position.Y += this.height / 2; this.width = 200; this.height = 200; this.position.X -= this.width / 2; this.position.Y -= this.height / 2; for (int num26 = 0; num26 < 50; num26++) { color = new Color(); int num27 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 0x1f, 0f, 0f, 100, color, 2f); Dust dust8 = Main.dust[num27]; dust8.velocity = (Vector2) (dust8.velocity * 1.4f); } for (int num28 = 0; num28 < 80; num28++) { color = new Color(); int num29 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, color, 3f); Main.dust[num29].noGravity = true; Dust dust9 = Main.dust[num29]; dust9.velocity = (Vector2) (dust9.velocity * 5f); color = new Color(); num29 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, color, 2f); Dust dust10 = Main.dust[num29]; dust10.velocity = (Vector2) (dust10.velocity * 3f); } for (int num31 = 0; num31 < 2; num31++) { vector = new Vector2(); int num30 = Gore.NewGore(new Vector2((this.position.X + (this.width / 2)) - 24f, (this.position.Y + (this.height / 2)) - 24f), vector, Main.rand.Next(0x3d, 0x40)); Main.gore[num30].scale = 1.5f; Main.gore[num30].velocity.X += 1.5f; Main.gore[num30].velocity.Y += 1.5f; vector = new Vector2(); num30 = Gore.NewGore(new Vector2((this.position.X + (this.width / 2)) - 24f, (this.position.Y + (this.height / 2)) - 24f), vector, Main.rand.Next(0x3d, 0x40)); Main.gore[num30].scale = 1.5f; Main.gore[num30].velocity.X -= 1.5f; Main.gore[num30].velocity.Y += 1.5f; vector = new Vector2(); num30 = Gore.NewGore(new Vector2((this.position.X + (this.width / 2)) - 24f, (this.position.Y + (this.height / 2)) - 24f), vector, Main.rand.Next(0x3d, 0x40)); Main.gore[num30].scale = 1.5f; Main.gore[num30].velocity.X += 1.5f; Main.gore[num30].velocity.Y -= 1.5f; vector = new Vector2(); num30 = Gore.NewGore(new Vector2((this.position.X + (this.width / 2)) - 24f, (this.position.Y + (this.height / 2)) - 24f), vector, Main.rand.Next(0x3d, 0x40)); Main.gore[num30].scale = 1.5f; Main.gore[num30].velocity.X -= 1.5f; Main.gore[num30].velocity.Y -= 1.5f; } this.position.X += this.width / 2; this.position.Y += this.height / 2; this.width = 10; this.height = 10; this.position.X -= this.width / 2; this.position.Y -= this.height / 2; } } if (this.owner == Main.myPlayer) { if (((this.type == 0x1c) || (this.type == 0x1d)) || (this.type == 0x25) && (true == false)) { int num32 = 3; if (this.type == 0x1d) { num32 = 7; } int num33 = ((int) (this.position.X / 16f)) - num32; int maxTilesX = ((int) (this.position.X / 16f)) + num32; int num35 = ((int) (this.position.Y / 16f)) - num32; int maxTilesY = ((int) (this.position.Y / 16f)) + num32; if (num33 < 0) { num33 = 0; } if (maxTilesX > Main.maxTilesX) { maxTilesX = Main.maxTilesX; } if (num35 < 0) { num35 = 0; } if (maxTilesY > Main.maxTilesY) { maxTilesY = Main.maxTilesY; } bool flag = false; for (int num37 = num33; num37 <= maxTilesX; num37++) { for (int num38 = num35; num38 <= maxTilesY; num38++) { float num39 = Math.Abs((float) (num37 - (this.position.X / 16f))); float num40 = Math.Abs((float) (num38 - (this.position.Y / 16f))); if (((Math.Sqrt((double) ((num39 * num39) + (num40 * num40))) < num32) && (Main.tile[num37, num38] != null)) && (Main.tile[num37, num38].wall == 0)) { flag = true; goto Label_1605; } } Label_1605:; } for (int num42 = num33; num42 <= maxTilesX; num42++) { for (int num43 = num35; num43 <= maxTilesY; num43++) { float num44 = Math.Abs((float) (num42 - (this.position.X / 16f))); float num45 = Math.Abs((float) (num43 - (this.position.Y / 16f))); if (Math.Sqrt((double) ((num44 * num44) + (num45 * num45))) < num32) { bool flag2 = true; if ((Main.tile[num42, num43] != null) && Main.tile[num42, num43].active) { flag2 = false; if ((this.type == 0x1c) || (this.type == 0x25)) { if (((((!Main.tileSolid[Main.tile[num42, num43].type] || Main.tileSolidTop[Main.tile[num42, num43].type]) || ((Main.tile[num42, num43].type == 0) || (Main.tile[num42, num43].type == 1))) || (((Main.tile[num42, num43].type == 2) || (Main.tile[num42, num43].type == 0x17)) || ((Main.tile[num42, num43].type == 30) || (Main.tile[num42, num43].type == 40)))) || ((((Main.tile[num42, num43].type == 6) || (Main.tile[num42, num43].type == 7)) || ((Main.tile[num42, num43].type == 8) || (Main.tile[num42, num43].type == 9))) || (((Main.tile[num42, num43].type == 10) || (Main.tile[num42, num43].type == 0x35)) || ((Main.tile[num42, num43].type == 0x36) || (Main.tile[num42, num43].type == 0x39))))) || ((((Main.tile[num42, num43].type == 0x3b) || (Main.tile[num42, num43].type == 60)) || ((Main.tile[num42, num43].type == 0x3f) || (Main.tile[num42, num43].type == 0x40))) || ((((Main.tile[num42, num43].type == 0x41) || (Main.tile[num42, num43].type == 0x42)) || ((Main.tile[num42, num43].type == 0x43) || (Main.tile[num42, num43].type == 0x44))) || ((Main.tile[num42, num43].type == 70) || (Main.tile[num42, num43].type == 0x25))))) { flag2 = true; } } else if (this.type == 0x1d) { flag2 = true; } if ((Main.tileDungeon[Main.tile[num42, num43].type] || (Main.tile[num42, num43].type == 0x1a)) || ((Main.tile[num42, num43].type == 0x3a) || (Main.tile[num42, num43].type == 0x15))) { flag2 = false; } if (flag2) { WorldGen.KillTile(num42, num43, false, false, false); if (!Main.tile[num42, num43].active && (Main.netMode == 1)) { NetMessage.SendData(0x11, -1, -1, "", 0, (float) num42, (float) num43, 0f); } } } if ((flag2 && (Main.tile[num42, num43] != null)) && ((Main.tile[num42, num43].wall > 0) && flag)) { WorldGen.KillWall(num42, num43, false); if ((Main.tile[num42, num43].wall == 0) && (Main.netMode == 1)) { NetMessage.SendData(0x11, -1, -1, "", 2, (float) num42, (float) num43, 0f); } } } } } } if (Main.netMode != 0) { NetMessage.SendData(0x1d, -1, -1, "", this.identity, (float) this.owner, 0f, 0f); } int number = -1; if (this.aiStyle == 10) { int num48 = (((int) this.position.X) + (this.width / 2)) / 0x10; int num49 = (((int) this.position.Y) + (this.width / 2)) / 0x10; int type = 0; int num51 = 2; if (this.type == 0x1f) { type = 0x35; num51 = 0xa9; } if (!Main.tile[num48, num49].active) { WorldGen.PlaceTile(num48, num49, type, false, true, -1); if (Main.tile[num48, num49].active && (Main.tile[num48, num49].type == type)) { NetMessage.SendData(0x11, -1, -1, "", 1, (float) num48, (float) num49, (float) type); } else { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, num51, 1, false); } } else { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, num51, 1, false); } } if ((this.type == 1) && (Main.rand.Next(3) < 2)) { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 40, 1, false); } if ((this.type == 2) && (Main.rand.Next(5) < 4)) { if (Main.rand.Next(4) == 0) { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 0x29, 1, false); } else { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 40, 1, false); } } if ((this.type == 3) && (Main.rand.Next(5) < 4)) { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 0x2a, 1, false); } if ((this.type == 4) && (Main.rand.Next(5) < 4)) { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 0x2f, 1, false); } if ((this.type == 12) && (this.damage > 100)) { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 0x4b, 1, false); } if ((this.type == 0x15) && (Main.rand.Next(5) < 4)) { number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 0x9a, 1, false); } if ((Main.netMode == 1) && (number >= 0)) { NetMessage.SendData(0x15, -1, -1, "", number, 0f, 0f, 0f); } } this.active = false; } } public static int NewProjectile(float X, float Y, float SpeedX, float SpeedY, int Type, int Damage, float KnockBack, int Owner = 8) { int index = 0x3e8; for (int i = 0; i < 0x3e8; i++) { if (!Main.projectile[i].active) { index = i; break; } } if (index != 0x3e8) { Main.projectile[index].SetDefaults(Type); Main.projectile[index].position.X = X - (Main.projectile[index].width * 0.5f); Main.projectile[index].position.Y = Y - (Main.projectile[index].height * 0.5f); Main.projectile[index].owner = Owner; Main.projectile[index].velocity.X = SpeedX; Main.projectile[index].velocity.Y = SpeedY; Main.projectile[index].damage = Damage; Main.projectile[index].knockBack = KnockBack; Main.projectile[index].identity = index; Main.projectile[index].wet = Collision.WetCollision(Main.projectile[index].position, Main.projectile[index].width, Main.projectile[index].height); if ((Main.netMode != 0) && (Owner == Main.myPlayer)) { NetMessage.SendData(0x1b, -1, -1, "", index, 0f, 0f, 0f); } if (Owner != Main.myPlayer) { return index; } if (Type == 0x1c) { Main.projectile[index].timeLeft = 180; } if (Type == 0x1d) { Main.projectile[index].timeLeft = 300; } if (Type == 30) { Main.projectile[index].timeLeft = 180; } if (Type == 0x25) { Main.projectile[index].timeLeft = 180; } } return index; } public void SetDefaults(int Type) { for (int i = 0; i < maxAI; i++) { this.ai[i] = 0f; } for (int j = 0; j < 8; j++) { this.playerImmune[j] = 0; } this.lavaWet = false; this.wetCount = 0; this.wet = false; this.ignoreWater = false; this.hostile = false; this.netUpdate = false; this.numUpdates = 0; this.maxUpdates = 0; this.identity = 0; this.restrikeDelay = 0; this.light = 0f; this.penetrate = 1; this.tileCollide = true; this.position = new Vector2(); this.velocity = new Vector2(); this.aiStyle = 0; this.alpha = 0; this.type = Type; this.active = true; this.rotation = 0f; this.scale = 1f; this.owner = 8; this.timeLeft = 0xe10; this.name = ""; this.friendly = false; this.damage = 0; this.knockBack = 0f; if (this.type == 1) { this.name = "Wooden Arrow"; this.width = 10; this.height = 10; this.aiStyle = 1; this.friendly = true; } else if (this.type == 2) { this.name = "Fire Arrow"; this.width = 10; this.height = 10; this.aiStyle = 1; this.friendly = true; this.light = 1f; } else if (this.type == 3) { this.name = "Shuriken"; this.width = 0x16; this.height = 0x16; this.aiStyle = 2; this.friendly = true; this.penetrate = 4; } else if (this.type == 4) { this.name = "Unholy Arrow"; this.width = 10; this.height = 10; this.aiStyle = 1; this.friendly = true; this.light = 0.2f; this.penetrate = 3; } else if (this.type == 5) { this.name = "Jester's Arrow"; this.width = 10; this.height = 10; this.aiStyle = 1; this.friendly = true; this.light = 0.4f; this.penetrate = -1; this.timeLeft = 40; this.alpha = 100; this.ignoreWater = true; } else if (this.type == 6) { this.name = "Enchanted Boomerang"; this.width = 0x16; this.height = 0x16; this.aiStyle = 3; this.friendly = true; this.penetrate = -1; } else if ((this.type == 7) || (this.type == 8)) { this.name = "Vilethorn"; this.width = 0x1c; this.height = 0x1c; this.aiStyle = 4; this.friendly = true; this.penetrate = -1; this.tileCollide = false; this.alpha = 0xff; this.ignoreWater = true; } else if (this.type == 9) { this.name = "Starfury"; this.width = 0x18; this.height = 0x18; this.aiStyle = 5; this.friendly = true; this.penetrate = 2; this.alpha = 50; this.scale = 0.8f; this.light = 1f; } else if (this.type == 10) { this.name = "Purification Powder"; this.width = 0x40; this.height = 0x40; this.aiStyle = 6; this.friendly = true; this.tileCollide = false; this.penetrate = -1; this.alpha = 0xff; this.ignoreWater = true; } else if (this.type == 11) { this.name = "Vile Powder"; this.width = 0x30; this.height = 0x30; this.aiStyle = 6; this.friendly = true; this.tileCollide = false; this.penetrate = -1; this.alpha = 0xff; this.ignoreWater = true; } else if (this.type == 12) { this.name = "Fallen Star"; this.width = 0x10; this.height = 0x10; this.aiStyle = 5; this.friendly = true; this.penetrate = -1; this.alpha = 50; this.light = 1f; } else if (this.type == 13) { this.name = "Hook"; this.width = 0x12; this.height = 0x12; this.aiStyle = 7; this.friendly = true; this.penetrate = -1; this.tileCollide = false; } else if (this.type == 14) { this.name = "Musket Ball"; this.width = 4; this.height = 4; this.aiStyle = 1; this.friendly = true; this.penetrate = 1; this.light = 0.5f; this.alpha = 0xff; this.maxUpdates = 1; this.scale = 1.2f; this.timeLeft = 600; } else if (this.type == 15) { this.name = "Ball of Fire"; this.width = 0x10; this.height = 0x10; this.aiStyle = 8; this.friendly = true; this.light = 0.8f; this.alpha = 100; } else if (this.type == 0x10) { this.name = "Magic Missile"; this.width = 10; this.height = 10; this.aiStyle = 9; this.friendly = true; this.light = 0.8f; this.alpha = 100; } else if (this.type == 0x11) { this.name = "Dirt Ball"; this.width = 10; this.height = 10; this.aiStyle = 10; this.friendly = true; } else if (this.type == 0x12) { this.name = "Orb of Light"; this.width = 0x20; this.height = 0x20; this.aiStyle = 11; this.friendly = true; this.light = 1f; this.alpha = 150; this.tileCollide = false; this.penetrate = -1; this.timeLeft *= 5; this.ignoreWater = true; } else if (this.type == 0x13) { this.name = "Flamarang"; this.width = 0x16; this.height = 0x16; this.aiStyle = 3; this.friendly = true; this.penetrate = -1; this.light = 1f; } else if (this.type == 20) { this.name = "Green Laser"; this.width = 4; this.height = 4; this.aiStyle = 1; this.friendly = true; this.penetrate = -1; this.light = 0.75f; this.alpha = 0xff; this.maxUpdates = 2; this.scale = 1.4f; this.timeLeft = 600; } else if (this.type == 0x15) { this.name = "Bone"; this.width = 0x10; this.height = 0x10; this.aiStyle = 2; this.scale = 1.2f; this.friendly = true; } else if (this.type == 0x16) { this.name = "Water Stream"; this.width = 12; this.height = 12; this.aiStyle = 12; this.friendly = true; this.alpha = 0xff; this.penetrate = -1; this.maxUpdates = 1; this.ignoreWater = true; } else if (this.type == 0x17) { this.name = "Harpoon"; this.width = 4; this.height = 4; this.aiStyle = 13; this.friendly = true; this.penetrate = -1; this.alpha = 0xff; } else if (this.type == 0x18) { this.name = "Spiky Ball"; this.width = 14; this.height = 14; this.aiStyle = 14; this.friendly = true; this.penetrate = 3; } else if (this.type == 0x19) { this.name = "Ball 'O Hurt"; this.width = 0x16; this.height = 0x16; this.aiStyle = 15; this.friendly = true; this.penetrate = -1; } else if (this.type == 0x1a) { this.name = "Blue Moon"; this.width = 0x16; this.height = 0x16; this.aiStyle = 15; this.friendly = true; this.penetrate = -1; } else if (this.type == 0x1b) { this.name = "Water Bolt"; this.width = 0x10; this.height = 0x10; this.aiStyle = 8; this.friendly = true; this.light = 0.8f; this.alpha = 200; this.timeLeft /= 2; this.penetrate = 10; } else if (this.type == 0x1c) { this.name = "Bomb"; this.width = 0x16; this.height = 0x16; this.aiStyle = 0x10; this.friendly = true; this.penetrate = -1; } else if (this.type == 0x1d) { this.name = "Dynamite"; this.width = 10; this.height = 10; this.aiStyle = 0x10; this.friendly = true; this.penetrate = -1; } else if (this.type == 30) { this.name = "Grenade"; this.width = 14; this.height = 14; this.aiStyle = 0x10; this.friendly = true; this.penetrate = -1; } else if (this.type == 0x1f) { this.name = "Sand Ball"; this.knockBack = 6f; this.width = 10; this.height = 10; this.aiStyle = 10; this.friendly = true; this.hostile = true; this.penetrate = -1; } else if (this.type == 0x20) { this.name = "Ivy Whip"; this.width = 0x12; this.height = 0x12; this.aiStyle = 7; this.friendly = true; this.penetrate = -1; this.tileCollide = false; } else if (this.type == 0x21) { this.name = "Thorn Chakrum"; this.width = 0x1c; this.height = 0x1c; this.aiStyle = 3; this.friendly = true; this.scale = 0.9f; this.penetrate = -1; } else if (this.type == 0x22) { this.name = "Flamelash"; this.width = 14; this.height = 14; this.aiStyle = 9; this.friendly = true; this.light = 0.8f; this.alpha = 100; this.penetrate = 2; } else if (this.type == 0x23) { this.name = "Sunfury"; this.width = 0x16; this.height = 0x16; this.aiStyle = 15; this.friendly = true; this.penetrate = -1; } else if (this.type == 0x24) { this.name = "Meteor Shot"; this.width = 4; this.height = 4; this.aiStyle = 1; this.friendly = true; this.penetrate = 2; this.light = 0.6f; this.alpha = 0xff; this.maxUpdates = 1; this.scale = 1.4f; this.timeLeft = 600; } else if (this.type == 0x25) { this.name = "Bomb"; this.width = 0x16; this.height = 0x16; this.aiStyle = 0x10; this.friendly = true; this.penetrate = -1; this.tileCollide = false; } else { this.active = false; } this.width = (int) (this.width * this.scale); this.height = (int) (this.height * this.scale); } public void Update(int i) { if (this.active) { Vector2 velocity = this.velocity; if (((this.position.X <= Main.leftWorld) || ((this.position.X + this.width) >= Main.rightWorld)) || ((this.position.Y <= Main.topWorld) || ((this.position.Y + this.height) >= Main.bottomWorld))) { this.Kill(); } else { this.whoAmI = i; if (this.soundDelay > 0) { this.soundDelay--; } this.netUpdate = false; for (int j = 0; j < 8; j++) { if (this.playerImmune[j] > 0) { this.playerImmune[j]--; } } this.AI(); if ((this.owner < 8) && !Main.player[this.owner].active) { this.Kill(); } if (!this.ignoreWater) { bool flag = Collision.LavaCollision(this.position, this.width, this.height); if (flag) { this.lavaWet = true; } if (Collision.WetCollision(this.position, this.width, this.height)) { if (this.wetCount == 0) { this.wetCount = 10; if (!this.wet) { if (!flag) { for (int k = 0; k < 10; k++) { Color newColor = new Color(); int index = Dust.NewDust(new Vector2(this.position.X - 6f, (this.position.Y + (this.height / 2)) - 8f), this.width + 12, 0x18, 0x21, 0f, 0f, 0, newColor, 1f); Main.dust[index].velocity.Y -= 4f; Main.dust[index].velocity.X *= 2.5f; Main.dust[index].scale = 1.3f; Main.dust[index].alpha = 100; Main.dust[index].noGravity = true; } Main.PlaySound(0x13, (int) this.position.X, (int) this.position.Y, 1); } else { for (int m = 0; m < 10; m++) { Color color2 = new Color(); int num5 = Dust.NewDust(new Vector2(this.position.X - 6f, (this.position.Y + (this.height / 2)) - 8f), this.width + 12, 0x18, 0x23, 0f, 0f, 0, color2, 1f); Main.dust[num5].velocity.Y -= 1.5f; Main.dust[num5].velocity.X *= 2.5f; Main.dust[num5].scale = 1.3f; Main.dust[num5].alpha = 100; Main.dust[num5].noGravity = true; } Main.PlaySound(0x13, (int) this.position.X, (int) this.position.Y, 1); } } this.wet = true; } } else if (this.wet) { this.wet = false; if (this.wetCount == 0) { this.wetCount = 10; if (!this.lavaWet) { for (int n = 0; n < 10; n++) { Color color3 = new Color(); int num7 = Dust.NewDust(new Vector2(this.position.X - 6f, this.position.Y + (this.height / 2)), this.width + 12, 0x18, 0x21, 0f, 0f, 0, color3, 1f); Main.dust[num7].velocity.Y -= 4f; Main.dust[num7].velocity.X *= 2.5f; Main.dust[num7].scale = 1.3f; Main.dust[num7].alpha = 100; Main.dust[num7].noGravity = true; } Main.PlaySound(0x13, (int) this.position.X, (int) this.position.Y, 1); } else { for (int num8 = 0; num8 < 10; num8++) { Color color4 = new Color(); int num9 = Dust.NewDust(new Vector2(this.position.X - 6f, (this.position.Y + (this.height / 2)) - 8f), this.width + 12, 0x18, 0x23, 0f, 0f, 0, color4, 1f); Main.dust[num9].velocity.Y -= 1.5f; Main.dust[num9].velocity.X *= 2.5f; Main.dust[num9].scale = 1.3f; Main.dust[num9].alpha = 100; Main.dust[num9].noGravity = true; } Main.PlaySound(0x13, (int) this.position.X, (int) this.position.Y, 1); } } } if (!this.wet) { this.lavaWet = false; } if (this.wetCount > 0) { this.wetCount = (byte) (this.wetCount - 1); } } if (this.tileCollide) { Vector2 vector2 = this.velocity; bool fallThrough = true; if (((this.type == 9) || (this.type == 12)) || (((this.type == 15) || (this.type == 13)) || (this.type == 0x1f))) { fallThrough = false; } if (this.aiStyle == 10) { this.velocity = Collision.AnyCollision(this.position, this.velocity, this.width, this.height); } else if (this.wet) { Vector2 vector3 = this.velocity; this.velocity = Collision.TileCollision(this.position, this.velocity, this.width, this.height, fallThrough, fallThrough); velocity = (Vector2) (this.velocity * 0.5f); if (this.velocity.X != vector3.X) { velocity.X = this.velocity.X; } if (this.velocity.Y != vector3.Y) { velocity.Y = this.velocity.Y; } } else { this.velocity = Collision.TileCollision(this.position, this.velocity, this.width, this.height, fallThrough, fallThrough); } if (vector2 != this.velocity) { if (this.type == 0x24) { if (this.penetrate > 1) { Collision.HitTiles(this.position, this.velocity, this.width, this.height); Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); this.penetrate--; if (this.velocity.X != vector2.X) { this.velocity.X = -vector2.X; } if (this.velocity.Y != vector2.Y) { this.velocity.Y = -vector2.Y; } } else { this.Kill(); } } else if (((this.aiStyle == 3) || (this.aiStyle == 13)) || (this.aiStyle == 15)) { Collision.HitTiles(this.position, this.velocity, this.width, this.height); if (this.type == 0x21) { if (this.velocity.X != vector2.X) { this.velocity.X = -vector2.X; } if (this.velocity.Y != vector2.Y) { this.velocity.Y = -vector2.Y; } } else { this.ai[0] = 1f; if (this.aiStyle == 3) { this.velocity.X = -vector2.X; this.velocity.Y = -vector2.Y; } } this.netUpdate = true; Main.PlaySound(0, (int) this.position.X, (int) this.position.Y, 1); } else if (this.aiStyle == 8) { Main.PlaySound(2, (int) this.position.X, (int) this.position.Y, 10); this.ai[0]++; if (this.ai[0] >= 5f) { this.position += this.velocity; this.Kill(); } else { if (this.velocity.Y != vector2.Y) { this.velocity.Y = -vector2.Y; } if (this.velocity.X != vector2.X) { this.velocity.X = -vector2.X; } } } else if (this.aiStyle == 14) { if (this.velocity.X != vector2.X) { this.velocity.X = vector2.X * -0.5f; } if ((this.velocity.Y != vector2.Y) && (vector2.Y > 1f)) { this.velocity.Y = vector2.Y * -0.5f; } } else if (this.aiStyle == 0x10) { if (this.velocity.X != vector2.X) { this.velocity.X = vector2.X * -0.4f; if (this.type == 0x1d) { this.velocity.X *= 0.8f; } } if ((this.velocity.Y != vector2.Y) && (vector2.Y > 0.7)) { this.velocity.Y = vector2.Y * -0.4f; if (this.type == 0x1d) { this.velocity.Y *= 0.8f; } } } else { this.position += this.velocity; this.Kill(); } } } if ((this.type != 7) && (this.type != 8)) { if (this.wet) { this.position += velocity; } else { this.position += this.velocity; } } if ((((this.aiStyle != 3) || (this.ai[0] != 1f)) && ((this.aiStyle != 7) || (this.ai[0] != 1f))) && (((this.aiStyle != 13) || (this.ai[0] != 1f)) && ((this.aiStyle != 15) || (this.ai[0] != 1f)))) { if (this.velocity.X < 0f) { this.direction = -1; } else { this.direction = 1; } } if (this.active) { if (this.light > 0f) { Lighting.addLight((int) ((this.position.X + (this.width / 2)) / 16f), (int) ((this.position.Y + (this.height / 2)) / 16f), this.light); } if (this.type == 2) { Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, 0f, 0f, 100, new Color(), 1f); } else if (this.type == 4) { if (Main.rand.Next(5) == 0) { Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 14, 0f, 0f, 150, new Color(), 1.1f); } } else if (this.type == 5) { Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.5f, this.velocity.Y * 0.5f, 150, new Color(), 1.2f); } Rectangle rectangle = new Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height); if ((this.hostile && (Main.myPlayer < 8)) && (this.damage > 0)) { int myPlayer = Main.myPlayer; if ((Main.player[myPlayer].active && !Main.player[myPlayer].dead) && !Main.player[myPlayer].immune) { Rectangle rectangle2 = new Rectangle((int) Main.player[myPlayer].position.X, (int) Main.player[myPlayer].position.Y, Main.player[myPlayer].width, Main.player[myPlayer].height); if (rectangle.Intersects(rectangle2)) { int direction = this.direction; if ((Main.player[myPlayer].position.X + (Main.player[myPlayer].width / 2)) < (this.position.X + (this.width / 2))) { direction = -1; } else { direction = 1; } Main.player[myPlayer].Hurt(this.damage * 2, direction, false, false); if (Main.netMode != 0) { NetMessage.SendData(0x1a, -1, -1, "", myPlayer, (float) this.direction, (float) (this.damage * 2), 0f); } } } } if ((this.friendly && (this.type != 0x12)) && (this.owner == Main.myPlayer)) { if ((this.aiStyle == 0x10) && (this.ai[1] > 0f)) { for (int num12 = 0; num12 < 8; num12++) { if ((Main.player[num12].active && !Main.player[num12].dead) && !Main.player[num12].immune) { Rectangle rectangle3 = new Rectangle((int) Main.player[num12].position.X, (int) Main.player[num12].position.Y, Main.player[num12].width, Main.player[num12].height); if (rectangle.Intersects(rectangle3)) { if ((Main.player[num12].position.X + (Main.player[num12].width / 2)) < (this.position.X + (this.width / 2))) { this.direction = -1; } else { this.direction = 1; } Main.player[num12].Hurt(this.damage, this.direction, true, false); if (Main.netMode != 0) { NetMessage.SendData(0x1a, -1, -1, "", num12, (float) this.direction, (float) this.damage, 1f); } } } } } int num13 = (int) (this.position.X / 16f); int maxTilesX = ((int) ((this.position.X + this.width) / 16f)) + 1; int num15 = (int) (this.position.Y / 16f); int maxTilesY = ((int) ((this.position.Y + this.height) / 16f)) + 1; if (num13 < 0) { num13 = 0; } if (maxTilesX > Main.maxTilesX) { maxTilesX = Main.maxTilesX; } if (num15 < 0) { num15 = 0; } if (maxTilesY > Main.maxTilesY) { maxTilesY = Main.maxTilesY; } for (int num17 = num13; num17 < maxTilesX; num17++) { for (int num18 = num15; num18 < maxTilesY; num18++) { if ((Main.tile[num17, num18] != null) && (((((Main.tile[num17, num18].type == 3) || (Main.tile[num17, num18].type == 0x18)) || ((Main.tile[num17, num18].type == 0x1c) || (Main.tile[num17, num18].type == 0x20))) || (((Main.tile[num17, num18].type == 0x33) || (Main.tile[num17, num18].type == 0x34)) || ((Main.tile[num17, num18].type == 0x3d) || (Main.tile[num17, num18].type == 0x3e)))) || (((Main.tile[num17, num18].type == 0x45) || (Main.tile[num17, num18].type == 0x47)) || ((Main.tile[num17, num18].type == 0x49) || (Main.tile[num17, num18].type == 0x4a))))) { WorldGen.KillTile(num17, num18, false, false, false); if (Main.netMode == 1) { NetMessage.SendData(0x11, -1, -1, "", 0, (float) num17, (float) num18, 0f); } } } } if (this.damage > 0) { for (int num19 = 0; num19 < 0x3e8; num19++) { if ((Main.npc[num19].active && !Main.npc[num19].friendly) && ((this.owner < 0) || (Main.npc[num19].immune[this.owner] == 0))) { Rectangle rectangle4 = new Rectangle((int) Main.npc[num19].position.X, (int) Main.npc[num19].position.Y, Main.npc[num19].width, Main.npc[num19].height); if (rectangle.Intersects(rectangle4)) { if (this.aiStyle == 3) { if (this.ai[0] == 0f) { this.velocity.X = -this.velocity.X; this.velocity.Y = -this.velocity.Y; this.netUpdate = true; } this.ai[0] = 1f; } else if (this.aiStyle == 0x10) { if (this.timeLeft > 3) { this.timeLeft = 3; } if ((Main.npc[num19].position.X + (Main.npc[num19].width / 2)) < (this.position.X + (this.width / 2))) { this.direction = -1; } else { this.direction = 1; } } Main.npc[num19].StrikeNPC(this.damage, this.knockBack, this.direction); if (Main.netMode != 0) { NetMessage.SendData(0x1c, -1, -1, "", num19, (float) this.damage, this.knockBack, (float) this.direction); } if (this.penetrate != 1) { Main.npc[num19].immune[this.owner] = 10; } if (this.penetrate > 0) { this.penetrate--; if (this.penetrate == 0) { break; } } if (this.aiStyle == 7) { this.ai[0] = 1f; this.damage = 0; this.netUpdate = true; } else if (this.aiStyle == 13) { this.ai[0] = 1f; this.netUpdate = true; } } } } } if ((this.damage > 0) && Main.player[Main.myPlayer].hostile) { for (int num20 = 0; num20 < 8; num20++) { if ((((num20 != this.owner) && Main.player[num20].active) && (!Main.player[num20].dead && !Main.player[num20].immune)) && ((Main.player[num20].hostile && (this.playerImmune[num20] <= 0)) && ((Main.player[Main.myPlayer].team == 0) || (Main.player[Main.myPlayer].team != Main.player[num20].team)))) { Rectangle rectangle5 = new Rectangle((int) Main.player[num20].position.X, (int) Main.player[num20].position.Y, Main.player[num20].width, Main.player[num20].height); if (rectangle.Intersects(rectangle5)) { if (this.aiStyle == 3) { if (this.ai[0] == 0f) { this.velocity.X = -this.velocity.X; this.velocity.Y = -this.velocity.Y; this.netUpdate = true; } this.ai[0] = 1f; } else if (this.aiStyle == 0x10) { if (this.timeLeft > 3) { this.timeLeft = 3; } if ((Main.player[num20].position.X + (Main.player[num20].width / 2)) < (this.position.X + (this.width / 2))) { this.direction = -1; } else { this.direction = 1; } } Main.player[num20].Hurt(this.damage, this.direction, true, false); if (Main.netMode != 0) { NetMessage.SendData(0x1a, -1, -1, "", num20, (float) this.direction, (float) this.damage, 1f); } this.playerImmune[num20] = 40; if (this.penetrate > 0) { this.penetrate--; if (this.penetrate == 0) { break; } } if (this.aiStyle == 7) { this.ai[0] = 1f; this.damage = 0; this.netUpdate = true; } else if (this.aiStyle == 13) { this.ai[0] = 1f; this.netUpdate = true; } } } } } } this.timeLeft--; if (this.timeLeft <= 0) { this.Kill(); } if (this.penetrate == 0) { this.Kill(); } if ((this.active && this.netUpdate) && (this.owner == Main.myPlayer)) { NetMessage.SendData(0x1b, -1, -1, "", i, 0f, 0f, 0f); } if (this.active && (this.maxUpdates > 0)) { this.numUpdates--; if (this.numUpdates >= 0) { this.Update(i); } else { this.numUpdates = this.maxUpdates; } } this.netUpdate = false; } } } } } }