278 {
279 Main.tileSolid[546] = false;
280 float num = 0f;
281 float num2 = 99999f;
282 float num3 = 99999f;
283 int num4 = -1;
284 int num5 = -1;
285 float num6 = 0f;
286 float num7 = 99999f;
287 float num8 = 99999f;
288 int num9 = -1;
289 int num10 = -1;
291 {
292 int num11 = 0;
296 int num15 = 0;
297 int num16 = 0;
298 int num17 = 0;
299 int num18 = 0;
300 int num19 = 0;
301 int num20 = 0;
302 int num21;
303 int num22;
304 if (num12 == 1 || num12 == 14 || num12 == 25)
305 {
307 {
308 continue;
309 }
311 }
312 else
313 {
314 switch (num12)
315 {
316 case 11:
317 case 22:
318 {
319 if (Main.drewLava)
320 {
321 continue;
322 }
324 if (num12 == 22)
325 {
327 }
329 {
331 }
332 if (
waterfalls[i].stopAtStep == 0 || (
float)(num14 + num22) < Main.screenPosition.Y / 16f || (
float)num13 < Main.screenPosition.X / 16f - 20f || (
float)num13 > (Main.screenPosition.X + (
float)Main.screenWidth) / 16f + 20f)
333 {
334 continue;
335 }
336 int num23;
337 int num24;
338 if (num13 % 2 == 0)
339 {
341 if (num23 > 7)
342 {
343 num23 -= 8;
344 }
346 if (num24 > 7)
347 {
348 num24 -= 8;
349 }
350 if (num12 == 22)
351 {
353 if (num23 > 7)
354 {
355 num23 -= 8;
356 }
357 }
358 }
359 else
360 {
363 if (num12 == 22)
364 {
366 }
367 }
371 Vector2 position = ((num14 % 2 != 0) ? (
new Vector2(num13 * 16 + 8, num14 * 16 + 8) - Main.screenPosition) : (new
Vector2(num13 * 16 + 9, num14 * 16 + 8) - Main.screenPosition));
372 Tile tile = Main.tile[num13, num14 - 1];
373 if (tile.active() && tile.bottomSlope())
374 {
375 position.Y -= 16f;
376 }
377 bool flag = false;
378 float rotation = 0f;
379 for (int j = 0; j < num22; j++)
380 {
381 Color color = Lighting.GetColor(num13, num14);
382 float num25 = 0.6f;
383 float num26 = 0.3f;
384 if (j > num22 - 8)
385 {
386 float num27 = (float)(num22 - j) / 8f;
387 num25 *= num27;
388 num26 *= num27;
389 }
390 Color color2 = color * num25;
391 Color color3 = color * num26;
392 if (num12 == 22)
393 {
395 }
396 else
397 {
400 }
401 if (flag)
402 {
403 break;
404 }
405 num14++;
406 Tile tile2 = Main.tile[num13, num14];
408 {
409 flag = true;
410 }
411 if (tile2.liquid > 0)
412 {
413 int num28 = (int)(16f * ((float)(int)tile2.liquid / 255f)) & 0xFE;
414 if (num28 >= 15)
415 {
416 break;
417 }
418 value2.Height -= num28;
419 value.Height -= num28;
420 }
421 if (num14 % 2 == 0)
422 {
423 position.X += 1f;
424 }
425 else
426 {
427 position.X -= 1f;
428 }
429 position.Y += 16f;
430 }
432 continue;
433 }
434 case 0:
435 num12 = Style;
436 break;
437 case 2:
438 if (Main.drewLava)
439 {
440 continue;
441 }
442 break;
443 }
445 }
446 int num29 = 0;
449 for (int k = 0; k < num22; k++)
450 {
451 if (num29 >= 2)
452 {
453 break;
454 }
456 Tile tile3 = Main.tile[num13, num14];
457 if (tile3 == null)
458 {
460 Main.tile[num13, num14] = tile3;
461 }
462 if (tile3.nactive() && Main.tileSolid[tile3.type] && !Main.tileSolidTop[tile3.type] && !
TileID.
Sets.
Platforms[tile3.type] && tile3.blockType() == 0)
463 {
464 break;
465 }
466 Tile tile4 = Main.tile[num13 - 1, num14];
467 if (tile4 == null)
468 {
470 Main.tile[num13 - 1, num14] = tile4;
471 }
472 Tile tile5 = Main.tile[num13, num14 + 1];
473 if (tile5 == null)
474 {
476 Main.tile[num13, num14 + 1] = tile5;
477 }
478 Tile tile6 = Main.tile[num13 + 1, num14];
479 if (tile6 == null)
480 {
482 Main.tile[num13 + 1, num14] = tile6;
483 }
484 if (
WorldGen.SolidTile(tile5) && !tile3.halfBrick())
485 {
486 num11 = 8;
487 }
488 else if (num16 != 0)
489 {
490 num11 = 0;
491 }
492 int num30 = 0;
493 int num31 = num18;
494 int num32 = 0;
495 int num33 = 0;
496 bool flag2 = false;
497 if (tile5.topSlope() && !tile3.halfBrick() && tile5.type != 19)
498 {
499 flag2 = true;
500 if (tile5.slope() == 1)
501 {
502 num30 = 1;
503 num32 = 1;
504 num17 = 1;
505 num18 = num17;
506 }
507 else
508 {
509 num30 = -1;
510 num32 = -1;
511 num17 = -1;
512 num18 = num17;
513 }
514 num33 = 1;
515 }
516 else if ((!
WorldGen.SolidTile(tile5) && !tile5.bottomSlope() && !tile3.halfBrick()) || (!tile5.active() && !tile3.halfBrick()))
517 {
518 num29 = 0;
519 num33 = 1;
520 num32 = 0;
521 }
522 else if ((
WorldGen.SolidTile(tile4) || tile4.topSlope() || tile4.liquid > 0) && !
WorldGen.SolidTile(tile6) && tile6.liquid == 0)
523 {
524 if (num17 == -1)
525 {
526 num29++;
527 }
528 num32 = 1;
529 num33 = 0;
530 num17 = 1;
531 }
532 else if ((
WorldGen.SolidTile(tile6) || tile6.topSlope() || tile6.liquid > 0) && !
WorldGen.SolidTile(tile4) && tile4.liquid == 0)
533 {
534 if (num17 == 1)
535 {
536 num29++;
537 }
538 num32 = -1;
539 num33 = 0;
540 num17 = -1;
541 }
542 else if (((!
WorldGen.SolidTile(tile6) && !tile3.topSlope()) || tile6.liquid == 0) && !
WorldGen.SolidTile(tile4) && !tile3.topSlope() && tile4.liquid == 0)
543 {
544 num33 = 0;
545 num32 = num17;
546 }
547 else
548 {
549 num29++;
550 num33 = 0;
551 num32 = 0;
552 }
553 if (num29 >= 2)
554 {
555 num17 *= -1;
556 num32 *= -1;
557 }
558 int num34 = -1;
559 if (num12 != 1 && num12 != 14 && num12 != 25)
560 {
561 if (tile5.active())
562 {
563 num34 = tile5.type;
564 }
565 if (tile3.active())
566 {
567 num34 = tile3.type;
568 }
569 }
570 switch (num34)
571 {
572 case 160:
573 num12 = 2;
574 break;
575 case 262:
576 case 263:
577 case 264:
578 case 265:
579 case 266:
580 case 267:
581 case 268:
582 num12 = 15 + num34 - 262;
583 break;
584 }
585 Color color5 = Lighting.GetColor(num13, num14);
586 if (k > 50)
587 {
589 }
590 float alpha =
GetAlpha(
Alpha, num22, num12, num14, k, tile3);
591 color5 =
StylizeColor(alpha, num22, num12, num14, k, tile3, color5);
592 if (num12 == 1)
593 {
594 float num35 =
Math.
Abs((
float)(num13 * 16 + 8) - (Main.screenPosition.X + (
float)(Main.screenWidth / 2)));
595 float num36 =
Math.
Abs((
float)(num14 * 16 + 8) - (Main.screenPosition.Y + (
float)(Main.screenHeight / 2)));
596 if (num35 < (float)(Main.screenWidth * 2) && num36 < (float)(Main.screenHeight * 2))
597 {
598 float num37 = (float)
Math.
Sqrt(num35 * num35 + num36 * num36);
599 float num38 = 1f - num37 / ((float)Main.screenWidth * 0.75f);
600 if (num38 > 0f)
601 {
602 num6 += num38;
603 }
604 }
605 if (num35 < num7)
606 {
607 num7 = num35;
608 num9 = num13 * 16 + 8;
609 }
610 if (num36 < num8)
611 {
612 num8 = num35;
613 num10 = num14 * 16 + 8;
614 }
615 }
616 else if (num12 != 1 && num12 != 14 && num12 != 25 && num12 != 11 && num12 != 12 && num12 != 22)
617 {
618 float num39 =
Math.
Abs((
float)(num13 * 16 + 8) - (Main.screenPosition.X + (
float)(Main.screenWidth / 2)));
619 float num40 =
Math.
Abs((
float)(num14 * 16 + 8) - (Main.screenPosition.Y + (
float)(Main.screenHeight / 2)));
620 if (num39 < (float)(Main.screenWidth * 2) && num40 < (float)(Main.screenHeight * 2))
621 {
622 float num41 = (float)
Math.
Sqrt(num39 * num39 + num40 * num40);
623 float num42 = 1f - num41 / ((float)Main.screenWidth * 0.75f);
624 if (num42 > 0f)
625 {
626 num += num42;
627 }
628 }
629 if (num39 < num2)
630 {
631 num2 = num39;
632 num4 = num13 * 16 + 8;
633 }
634 if (num40 < num3)
635 {
636 num3 = num39;
637 num5 = num14 * 16 + 8;
638 }
639 }
640 int num43 = tile3.liquid / 16;
641 if (flag2 && num17 != num31)
642 {
643 int num44 = 2;
644 if (num31 == 1)
645 {
646 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16 + 16 - num44) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43 - num44), color5,
SpriteEffects.FlipHorizontally);
647 }
648 else
649 {
650 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + 16 - num44) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43 - num44), color5,
SpriteEffects.None);
651 }
652 }
653 if (num15 == 0 && num30 != 0 && num16 == 1 && num17 != num18)
654 {
655 num30 = 0;
656 num17 = num18;
658 if (num17 == 1)
659 {
660 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16 + 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color5,
SpriteEffects.FlipHorizontally);
661 }
662 else
663 {
664 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16 + 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color5,
SpriteEffects.FlipHorizontally);
665 }
666 }
667 if (num19 != 0 && num32 == 0 && num33 == 1)
668 {
669 if (num17 == 1)
670 {
671 if (num20 != num12)
672 {
673 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11 + 8) - Main.screenPosition,
new Rectangle(num21, 0, 16, 16 - num43 - 8), color4,
SpriteEffects.FlipHorizontally);
674 }
675 else
676 {
677 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11 + 8) - Main.screenPosition,
new Rectangle(num21, 0, 16, 16 - num43 - 8), color5,
SpriteEffects.FlipHorizontally);
678 }
679 }
680 else
681 {
682 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11 + 8) - Main.screenPosition,
new Rectangle(num21, 0, 16, 16 - num43 - 8), color5,
SpriteEffects.None);
683 }
684 }
685 if (num11 == 8 && num16 == 1 && num19 == 0)
686 {
687 if (num18 == -1)
688 {
689 if (num20 != num12)
690 {
691 DrawWaterfall(num20, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 8), color4,
SpriteEffects.None);
692 }
693 else
694 {
695 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 8), color5,
SpriteEffects.None);
696 }
697 }
698 else if (num20 != num12)
699 {
700 DrawWaterfall(num20, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 8), color4,
SpriteEffects.FlipHorizontally);
701 }
702 else
703 {
704 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 8), color5,
SpriteEffects.FlipHorizontally);
705 }
706 }
707 if (num30 != 0 && num15 == 0)
708 {
709 if (num31 == 1)
710 {
711 if (num20 != num12)
712 {
713 DrawWaterfall(num20, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color4,
SpriteEffects.FlipHorizontally);
714 }
715 else
716 {
717 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color5,
SpriteEffects.FlipHorizontally);
718 }
719 }
720 else if (num20 != num12)
721 {
722 DrawWaterfall(num20, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color4,
SpriteEffects.None);
723 }
724 else
725 {
726 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color5,
SpriteEffects.None);
727 }
728 }
729 if (num33 == 1 && num30 == 0 && num19 == 0)
730 {
731 if (num17 == -1)
732 {
733 if (num16 == 0)
734 {
735 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11) - Main.screenPosition,
new Rectangle(num21, 0, 16, 16 - num43), color5,
SpriteEffects.None);
736 }
737 else if (num20 != num12)
738 {
739 DrawWaterfall(num20, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color4,
SpriteEffects.None);
740 }
741 else
742 {
743 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color5,
SpriteEffects.None);
744 }
745 }
746 else if (num16 == 0)
747 {
748 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11) - Main.screenPosition,
new Rectangle(num21, 0, 16, 16 - num43), color5,
SpriteEffects.FlipHorizontally);
749 }
750 else if (num20 != num12)
751 {
752 DrawWaterfall(num20, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color4,
SpriteEffects.FlipHorizontally);
753 }
754 else
755 {
756 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 - 16, num14 * 16) - Main.screenPosition,
new Rectangle(num21, 24, 32, 16 - num43), color5,
SpriteEffects.FlipHorizontally);
757 }
758 }
759 else
760 {
761 switch (num32)
762 {
763 case 1:
764 if (Main.tile[num13, num14].liquid > 0 && !Main.tile[num13, num14].halfBrick())
765 {
766 break;
767 }
768 if (num30 == 1)
769 {
770 for (int m = 0; m < 8; m++)
771 {
772 int num48 = m * 2;
773 int num49 = 14 - m * 2;
774 int num50 = num48;
775 num11 = 8;
776 if (num15 == 0 && m < 2)
777 {
778 num50 = 4;
779 }
780 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 + num48, num14 * 16 + num11 + num50) - Main.screenPosition,
new Rectangle(16 + num21 + num49, 0, 2, 16 - num11), color5,
SpriteEffects.FlipHorizontally);
781 }
782 }
783 else
784 {
785 int height2 = 16;
787 {
788 height2 = 8;
789 }
791 {
792 height2 = 8;
793 }
794 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11) - Main.screenPosition,
new Rectangle(16 + num21, 0, 16, height2), color5,
SpriteEffects.FlipHorizontally);
795 }
796 break;
797 case -1:
798 if (Main.tile[num13, num14].liquid > 0 && !Main.tile[num13, num14].halfBrick())
799 {
800 break;
801 }
802 if (num30 == -1)
803 {
804 for (int l = 0; l < 8; l++)
805 {
806 int num45 = l * 2;
807 int num46 = l * 2;
808 int num47 = 14 - l * 2;
809 num11 = 8;
810 if (num15 == 0 && l > 5)
811 {
812 num47 = 4;
813 }
814 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16 + num45, num14 * 16 + num11 + num47) - Main.screenPosition,
new Rectangle(16 + num21 + num46, 0, 2, 16 - num11), color5,
SpriteEffects.FlipHorizontally);
815 }
816 }
817 else
818 {
819 int height = 16;
821 {
822 height = 8;
823 }
825 {
826 height = 8;
827 }
828 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11) - Main.screenPosition,
new Rectangle(16 + num21, 0, 16, height), color5,
SpriteEffects.None);
829 }
830 break;
831 case 0:
832 if (num33 == 0)
833 {
834 if (Main.tile[num13, num14].liquid <= 0 || Main.tile[num13, num14].halfBrick())
835 {
836 DrawWaterfall(num12, num13, num14, alpha,
new Vector2(num13 * 16, num14 * 16 + num11) - Main.screenPosition,
new Rectangle(16 + num21, 0, 16, 16), color5,
SpriteEffects.None);
837 }
838 k = 1000;
839 }
840 break;
841 }
842 }
843 if (tile3.liquid > 0 && !tile3.halfBrick())
844 {
845 k = 1000;
846 }
847 num16 = num33;
848 num18 = num17;
849 num15 = num32;
850 num13 += num32;
851 num14 += num33;
852 num19 = num30;
853 color4 = color5;
854 if (num20 != num12)
855 {
856 num20 = num12;
857 }
858 if ((tile4.active() && (tile4.type == 189 || tile4.type == 196)) || (tile6.active() && (tile6.type == 189 || tile6.type == 196)) || (tile5.active() && (tile5.type == 189 || tile5.type == 196)))
859 {
860 num22 = (int)(40f * ((float)Main.maxTilesX / 4200f) * Main.gfxQuality);
861 }
862 }
863 }
864 Main.ambientWaterfallX = num4;
865 Main.ambientWaterfallY = num5;
866 Main.ambientWaterfallStrength = num;
867 Main.ambientLavafallX = num9;
868 Main.ambientLavafallY = num10;
869 Main.ambientLavafallStrength = num6;
870 Main.tileSolid[546] = true;
871 }
static double Sqrt(double d)
static double Abs(double value)
static bool[] BlocksWaterDrawingBehindSelf
static void TrySparkling(int x, int y, int direction, Color aColor2)
static float GetAlpha(float Alpha, int maxSteps, int waterfallType, int y, int s, Tile tileCache)
static void AddLight(int waterfallType, int x, int y)
void DrawWaterfall(int Style=0, float Alpha=1f)
Asset< Texture2D >[] waterfallTexture
WaterfallData[] waterfalls
static Color StylizeColor(float alpha, int maxSteps, int waterfallType, int y, int s, Tile tileCache, Color aColor)