Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ AI_155_MysticSnakeCoil()

void Terraria.Projectile.AI_155_MysticSnakeCoil ( )
inlineprivate

Definition at line 42239 of file Projectile.cs.

42240 {
42241 if (Main.netMode != 1 && !Main.player[owner].active)
42242 {
42243 float num = ai[0];
42244 float y = position.Y;
42245 Point point = base.Center.ToTileCoordinates();
42246 Point end = new Point(point.X, (int)y / 16);
42247 Point start = new Point(point.X, (int)num / 16);
42249 Kill();
42250 return;
42251 }
42252 int num2 = 100;
42253 int num3 = 1800;
42254 if (ai[1] == 0f)
42255 {
42256 spriteDirection = ((!(Main.player[owner].Center.X > base.Center.X)) ? 1 : (-1));
42257 ai[1] = 1f;
42258 velocity.Y = -5f;
42259 }
42260 if (ai[1] == 1f)
42261 {
42262 localAI[1] += 1f;
42263 float num4 = Utils.Remap(localAI[1], 15f, 30f, 0f, 1f);
42264 int num5 = ((localAI[1] >= 60f) ? 1 : 0);
42265 velocity.Y = -3f * (1f - num4) + (float)(-32 * num5);
42266 velocity.Y = (int)velocity.Y;
42267 if (localAI[1] == 60f)
42268 {
42269 for (int i = 0; i < 30; i++)
42270 {
42271 Dust dust = Dust.NewDustDirect(base.TopLeft + new Vector2(-6f, 0f), 24, 16, 27, 0f, 0f, 150, Color.Transparent, 0.6f);
42272 dust.velocity *= 1f;
42273 dust.velocity.X *= 0.5f;
42274 dust.velocity.Y = -3f;
42275 dust.fadeIn = 1.2f;
42276 dust.noGravity = true;
42277 dust.position.X += Main.rand.NextFloatDirection() * 8f;
42278 dust.velocity = new Vector2(0f, -1f).RotatedBy((float)Math.PI / 4f * Main.rand.NextFloatDirection() * 0f) * (Main.rand.NextFloatDirection() * 9f);
42279 if (dust.velocity.Y < 0f)
42280 {
42281 dust.velocity.Y *= 1f + Main.rand.NextFloat() * 3f;
42282 }
42283 }
42284 }
42285 bool flag = num4 > 0f && num5 <= 0;
42286 if ((Main.rand.Next(6) == 0 || num5 > 0) && !flag)
42287 {
42288 Dust dust2 = Dust.NewDustDirect(base.TopLeft + new Vector2(-6f, 0f), 24, 16, 27, 0f, 0f, 150, Color.Transparent, 0.6f);
42289 dust2.velocity *= 1f;
42290 dust2.velocity.X *= 0.5f;
42291 dust2.velocity.Y = -3f;
42292 dust2.fadeIn = 1.2f;
42293 dust2.noGravity = true;
42294 }
42295 alpha = Utils.Clamp(alpha - 5, 0, 255);
42296 if (++frameCounter >= 12)
42297 {
42298 frameCounter = 0;
42299 if (++frame >= 4)
42300 {
42301 frame = 0;
42302 }
42303 }
42304 if (Main.myPlayer == owner)
42305 {
42306 float num6 = ai[0];
42307 float y2 = position.Y;
42308 Point point2 = base.Center.ToTileCoordinates();
42309 Point point3 = new Point(point2.X, (int)y2 / 16);
42310 Point point4 = new Point(point2.X, (int)num6 / 16);
42311 bool flag2 = point4.Y - point3.Y >= num2;
42312 int x = point4.X;
42313 if (!WorldGen.InWorld(x, point3.Y, 40) || !WorldGen.InWorld(x, point4.Y, 40))
42314 {
42315 flag2 = true;
42316 }
42317 if (!flag2)
42318 {
42319 for (int num7 = point4.Y; num7 >= point3.Y; num7--)
42320 {
42321 if (Main.tile[x, num7].active() && !Main.tileCut[Main.tile[x, num7].type] && Main.tile[x, num7].type != 504)
42322 {
42323 flag2 = true;
42324 break;
42325 }
42326 }
42327 }
42328 if (flag2)
42329 {
42330 int num8 = 0;
42331 for (int num9 = point4.Y; num9 > point3.Y; num9--)
42332 {
42333 if ((WorldGen.TileEmpty(x, num9) || Main.tileCut[Main.tile[x, num9].type]) && WorldGen.PlaceTile(x, num9, 504, mute: false, forced: false, owner))
42334 {
42335 num8++;
42336 if (Main.netMode == 1)
42337 {
42338 NetMessage.SendData(17, -1, -1, null, 1, x, num9, 504f);
42339 }
42340 }
42341 }
42342 timeLeft = num3;
42343 ai[1] = 2f;
42344 netUpdate = true;
42345 base.Top = new Vector2(x * 16 + 8, point3.Y * 16 + 16);
42347 }
42348 }
42349 }
42350 if (ai[1] != 2f)
42351 {
42352 return;
42353 }
42354 alpha = 0;
42355 _ = timeLeft;
42356 float num10 = ai[0];
42357 float y3 = position.Y;
42358 Point point5 = base.Center.ToTileCoordinates();
42359 Point end2 = new Point(point5.X, (int)y3 / 16);
42360 Point start2 = new Point(point5.X, (int)num10 / 16);
42361 int x2 = start2.X;
42362 if (localAI[0] == 0f)
42363 {
42364 localAI[0] = 1f;
42365 for (int num11 = start2.Y; num11 >= end2.Y; num11--)
42366 {
42367 Tile tile = Main.tile[x2, num11];
42368 if (tile.active() && tile.type == 504)
42369 {
42371 }
42372 }
42373 }
42374 else
42375 {
42376 for (int num12 = start2.Y; num12 >= end2.Y; num12--)
42377 {
42378 Tile tile2 = Main.tile[x2, num12];
42379 if (tile2.active() && tile2.type == 504 && Main.rand.Next(80) == 0)
42380 {
42381 Dust dust3 = Dust.NewDustDirect(new Vector2(x2 * 16 - 6, num12 * 16), 28, 16, 27, 0f, 0f, 150, Color.Transparent, 0.6f);
42382 dust3.velocity *= 1f;
42383 dust3.velocity.X = 0f;
42384 dust3.fadeIn = 1.2f;
42385 dust3.noGravity = true;
42386 }
42387 }
42388 }
42389 if (timeLeft == 4)
42390 {
42391 for (int num13 = start2.Y; num13 >= end2.Y; num13--)
42392 {
42393 Tile tile3 = Main.tile[x2, num13];
42394 if (tile3.active() && tile3.type == 504)
42395 {
42397 }
42398 }
42399 }
42400 if (timeLeft > 4)
42401 {
42402 return;
42403 }
42404 if (!WorldGen.InWorld(x2, end2.Y, 20) || !WorldGen.InWorld(x2, start2.Y, 20))
42405 {
42406 Kill();
42407 return;
42408 }
42409 if (Main.myPlayer == owner)
42410 {
42412 }
42413 Kill();
42414 }
const double PI
Definition Math.cs:16
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
void AI_155_SpawnRopeIn(int x, int y)
void AI_155_RemoveRope(Point start, Point end)
static Color Transparent
Definition Color.cs:76

References Terraria.Tile.active(), Terraria.WorldGen.InWorld(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Dust.NewDustDirect(), System.Math.PI, Terraria.WorldGen.PlaceTile(), Terraria.Main.player, Terraria.Main.rand, Terraria.Utils.Remap(), Terraria.NetMessage.SendData(), System.start, Terraria.Main.tile, Terraria.Main.tileCut, Terraria.WorldGen.TileEmpty(), Microsoft.Xna.Framework.Color.Transparent, Terraria.Dust.velocity, Microsoft.Xna.Framework.Point.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.