28 public Grid2d(
int sizeX,
int sizeY) {
36 public virtual void Set(
int x,
int y,
float value) {
40 public virtual float Sample(
float x,
float y) {
41 int num = (int)MathF.Floor(x);
42 int num2 = (int)MathF.Floor(y);
43 int num3 = (int)MathF.Ceiling(x);
44 int num4 = (int)MathF.Ceiling(y);
74 public Grid3d(
int sizeX,
int sizeY,
int sizeZ) {
82 public virtual void Get8(
int x,
106 public virtual void Set(
int x,
int y,
int z,
float value) {
110 public virtual float Sample(
float x,
float y,
float z) {
111 int num = (int)MathF.Floor(x);
112 int num2 = (int)MathF.Ceiling(x);
113 int num3 = (int)MathF.Floor(y);
114 int num4 = (int)MathF.Ceiling(y);
115 int num5 = (int)MathF.Floor(z);
116 int num6 = (int)MathF.Ceiling(z);
285 m_seed = subsystemGameInfo.WorldSeed;
353 "TerrainContentsGenerator24Initialize",
355 loader.TerrainContentsGenerator24Initialize(
this, subsystemTerrain);
367 float num =
float.MinValue;
368 for (
int i = 0; i < 1000; i += 5) {
369 for (
int j = 0; j <= 10; j += 5) {
370 for (
int k = 0; k < 2; k++) {
374 num2 = m_oceanCorner.Y + i;
378 x = m_oceanCorner.X + i;
391 "FindCoarseSpawnPosition",
393 loader.FindCoarseSpawnPosition(
this, ref ans);
430 return MathUtils.
Min(x - num, z - num2, num3 - x, num4 - z);
475 float num18 = num13 + num14 + num15 + num17 + num16;
477 return Math.Clamp(64f + num19, 10f, 251f);
512 bool flag =
MathUtils.
Hash((uint)(point.
X + 1000 * point.
Y)) % 1000 < 300;
529 for (
int i = -4; i <= 4; i += 2) {
530 for (
int j = -4; j <= 4; j += 2) {
536 int num7 = Math.Max(Math.Abs(x), Math.Abs(z));
570 for (
int i = x1; i < x2; i++) {
571 for (
int j = z1; j < z2; j++) {
586 int num3 = chunk.Origin.X + x1;
587 int num4 = chunk.Origin.Y + z1;
588 Grid2d grid2d =
new(num, num2);
589 Grid2d grid2d2 =
new(num, num2);
590 for (
int i = 0; i < num2; i++) {
591 for (
int j = 0; j < num; j++) {
596 Grid3d grid3d =
new(num / 4 + 1, 33, num2 / 4 + 1);
597 for (
int k = 0; k < grid3d.
SizeX; k++) {
598 for (
int l = 0; l < grid3d.
SizeZ; l++) {
599 int num5 = k * 4 + num3;
600 int num6 = l * 4 + num4;
604 for (
int m = 0; m < grid3d.
SizeY; m++) {
620 float num11 = num9 + num10;
621 float num12 = num7 - num11;
623 grid3d.
Set(k, m, l, num12);
628 for (
int n = 0; n < grid3d.SizeX - 1; n++) {
629 for (
int num13 = 0; num13 < grid3d.SizeZ - 1; num13++) {
630 for (
int num14 = 0; num14 < grid3d.SizeY - 1; num14++) {
644 float num15 = (v3 - v2) / 4f;
645 float num16 = (v5 - v4) / 4f;
646 float num17 = (v7 - v6) / 4f;
647 float num18 = (v9 - v8) / 4f;
652 for (
int num23 = 0; num23 < 4; num23++) {
653 float num24 = (num21 - num19) / 4f;
654 float num25 = (num22 - num20) / 4f;
657 for (
int num28 = 0; num28 < 4; num28++) {
658 float num29 = (num27 - num26) / 8f;
660 int num31 = num23 + n * 4;
661 int num32 = num28 + num13 * 4;
664 float x4 = grid2d.
Get(num31, num32);
665 float num33 = grid2d2.
Get(num31, num32);
668 float f = num33 - 0.01f * humidityFast;
671 bool flag = (temperatureFast > 8 && humidityFast < 8 && num33 < 0.97f) || (MathF.Abs(x4) < 16f && num33 < 0.97f);
673 for (
int num37 = 0; num37 < 8; num37++) {
674 int num38 = num37 + num14 * 8;
677 if (num38 <= oceanLevel) {
682 value = !flag ? !(num30 < num35) ? 67 : 3 :
683 !(num30 < num34) ? !(num30 < num35) ? 67 : 3 : 4;
704 for (
int i = 0; i < 16; i++) {
705 for (
int j = 0; j < 16; j++) {
719 num7 = temperature > 4 && temperature < 7 ? 6 : 7;
722 int num8 = temperature / 4;
725 (num4 < 66 || num4 == 84 + num8 || num4 == 103 + num8) && humidity == 9 && temperature % 6 == 1 ? 66 :
726 num9 != 18 || humidity <= 8 || humidity % 2 != 0 || temperature % 3 != 0 ? 2 : 72;
730 num10 = (int)Math.Clamp(1f * -temperature, 1f, 7f);
742 for (
int k = num12 - num10; k < num12; k++) {
763 for (
int i = x - 1; i <= x + 1; i++) {
764 for (
int j = y - 1; j <= y + 1; j++) {
766 int num = random.
Int(0, 10);
767 for (
int k = 0; k < num; k++) {
772 for (
int l = 0; l < num3; l++) {
773 int x2 = i * 16 + random.
Int(0, 15);
774 int y2 = random.
Int(5, 200);
775 int z = j * 16 + random.
Int(0, 15);
779 for (
int m = 0; m < num4; m++) {
780 int x3 = i * 16 + random.
Int(0, 15);
781 int y3 = random.
Int(20, 65);
782 int z2 = j * 16 + random.
Int(0, 15);
786 for (
int n = 0; n < num5; n++) {
787 int x4 = i * 16 + random.
Int(0, 15);
788 int y4 = random.
Int(2, 40);
789 int z3 = j * 16 + random.
Int(0, 15);
793 for (
int num7 = 0; num7 < num6; num7++) {
794 int x5 = i * 16 + random.
Int(0, 15);
795 int y5 = random.
Int(50, 90);
796 int z4 = j * 16 + random.
Int(0, 15);
800 for (
int num9 = 0; num9 < num8; num9++) {
801 int x6 = i * 16 + random.
Int(0, 15);
802 int y6 = random.
Int(2, 40);
803 int z5 = j * 16 + random.
Int(0, 15);
807 for (
int num11 = 0; num11 < num10; num11++) {
808 int x7 = i * 16 + random.
Int(0, 15);
809 int y7 = random.
Int(2, 15);
810 int z6 = j * 16 + random.
Int(0, 15);
814 for (
int num13 = 0; num13 < num12; num13++) {
815 int x8 = i * 16 + random.
Int(0, 15);
816 int y8 = random.
Int(2, 50);
817 int z7 = j * 16 + random.
Int(0, 15);
828 for (
int i = -1; i <= 1; i++) {
829 for (
int j = -1; j <= 1; j++) {
833 int num3 = random.
Int(0, 10);
834 for (
int k = 0; k < num3; k++) {
838 for (
int l = 0; l < 5; l++) {
839 int x = num * 16 + random.
Int(0, 15);
840 int y = random.
Int(50, 150);
841 int z = num2 * 16 + random.
Int(0, 15);
844 for (
int m = 0; m < 20; m++) {
845 int x2 = num * 16 + random.
Int(0, 15);
846 int y2 = random.
Int(20, 120);
847 int z2 = num2 * 16 + random.
Int(0, 15);
850 for (
int n = 0; n < 5; n++) {
851 int x3 = num * 16 + random.
Int(0, 15);
852 int y3 = random.
Int(10, 200);
853 int z3 = num2 * 16 + random.
Int(0, 15);
856 for (
int num5 = 0; num5 < 1; num5++) {
857 int x4 = num * 16 + random.
Int(0, 15);
858 int y4 = random.
Int(50, 70);
859 int z4 = num2 * 16 + random.
Int(0, 15);
862 for (
int num6 = 0; num6 < 20; num6++) {
863 int x5 = num * 16 + random.
Int(0, 15);
864 int y5 = random.
Int(20, 120);
865 int z5 = num2 * 16 + random.
Int(0, 15);
868 for (
int num7 = 0; num7 < 4; num7++) {
869 int x6 = num * 16 + random.
Int(0, 15);
870 int y6 = random.
Int(40, 60);
871 int z6 = num2 * 16 + random.
Int(0, 15);
874 for (
int num8 = 0; num8 < 3; num8++) {
875 int x7 = num * 16 + random.
Int(0, 15);
876 int y7 = random.
Int(20, 40);
877 int z7 = num2 * 16 + random.
Int(0, 15);
880 for (
int num9 = 0; num9 < 6; num9++) {
881 int x8 = num * 16 + random.
Int(0, 15);
882 int y8 = random.
Int(4, 50);
883 int z8 = num2 * 16 + random.
Int(0, 15);
886 for (
int num10 = 0; num10 < 20; num10++) {
887 int x9 = num * 16 + random.
Int(0, 15);
888 int y9 = random.
Int(4, 120);
889 int z9 = num2 * 16 + random.
Int(0, 15);
892 if (random.
Bool(0.02f + 0.01f * num4)) {
893 int num11 = num * 16;
894 int num12 = random.
Int(40, 60);
895 int num13 = num2 * 16;
896 int num14 = random.
Int(1, 3);
897 for (
int num15 = 0; num15 < num14; num15++) {
899 int num16 = 8 + (int)MathF.
Round(vector.
X);
901 int num18 = 8 + (int)MathF.
Round(vector.
Y);
903 .PaintFast(chunk, num11 + num16, num12 + num17, num13 + num18);
906 if (random.
Bool(0.06f + 0.05f * num4)) {
907 int num19 = num * 16;
908 int num20 = random.
Int(15, 42);
909 int num21 = num2 * 16;
910 int num22 = random.
Int(1, 2);
911 for (
int num23 = 0; num23 < num22; num23++) {
913 int num24 = 8 + (int)MathF.
Round(vector2.
X);
914 int num25 = random.
Int(0, 1);
915 int num26 = 8 + (int)MathF.Round(vector2.
Y);
917 .PaintFast(chunk, num19 + num24, num20 + num25, num21 + num26);
928 List<CavePoint> list = [];
931 for (
int i = x - 2; i <= x + 2; i++) {
932 for (
int j = y - 2; j <= y + 2; j++) {
935 int num = i * 16 + random.
Int(0, 15);
936 int num2 = j * 16 + random.
Int(0, 15);
937 float probability = 0.5f;
938 if (!random.
Bool(probability)) {
944 Vector3 position =
new(num, num3 - 1, num2);
945 Vector3 v =
new(3f, num4 - num3, 0f);
946 Vector3 v2 =
new(0f, num5 - num3, 3f);
948 if (direction.
Y > -0.6f) {
949 list.Add(
new CavePoint { Position = position, Direction = direction, BrushType = 0, Length = random.
Int(80, 240) });
951 int num6 = i * 16 + 8;
952 int num7 = j * 16 + 8;
954 while (num8 < list.Count) {
957 list2[random.
Int(0, list2.Count - 1)]
958 .PaintFastAvoidWater(
964 cavePoint.Position += 2f * cavePoint.
Direction;
965 cavePoint.StepsTaken += 2;
966 float num9 = cavePoint.Position.X - num6;
967 float num10 = cavePoint.Position.Z - num7;
968 if (random.
Bool(0.5f)) {
970 if ((num9 < -25.5f && vector.
X < 0f)
971 || (num9 > 25.5f && vector.
X > 0f)) {
972 vector.X = 0f - vector.
X;
974 if ((num10 < -25.5f && vector.
Z < 0f)
975 || (num10 > 25.5f && vector.
Z > 0f)) {
976 vector.Z = 0f - vector.
Z;
978 if ((cavePoint.
Direction.
Y < -0.5f && vector.
Y < -10f)
979 || (cavePoint.
Direction.
Y > 0.1f && vector.
Y > 0f)) {
980 vector.Y = 0f - vector.
Y;
985 && random.
Bool(0.06f)) {
989 && random.
Bool(0.05f)) {
990 cavePoint.Direction.Y = 0f;
994 && random.
Bool(0.03f)) {
995 cavePoint.Direction.X = 0f;
996 cavePoint.Direction.Y = -1f;
997 cavePoint.Direction.Z = 0f;
1001 && random.
Bool(0.02f)) {
1002 cavePoint.Direction.X = 0f;
1003 cavePoint.Direction.Y = 1f;
1004 cavePoint.Direction.Z = 0f;
1006 if (random.
Bool(0.33f)) {
1009 if (random.
Bool(0.06f)
1018 Length = random.
Int(40, 180)
1023 || MathF.Abs(num9) > 34f
1024 || MathF.Abs(num10) > 34f
1031 if (cavePoint.
Position.
Y > num11 + 1f) {
1051 for (
int i = x2; i <= x2; i++) {
1052 for (
int j = y2; j <= y2; j++) {
1061 num5 = random.
Int(1, 2);
1063 else if (num4 > 0.5f) {
1064 num5 = random.
Int(0, 1);
1067 for (
int k = 0; k < 16; k++) {
1071 int num7 = i * 16 + random.
Int(0, 15);
1072 int num8 = j * 16 + random.
Int(0, 15);
1078 if (cellContentsFast != 2
1079 && cellContentsFast != 8) {
1083 int num10 = random.
Int(3, 7);
1086 && num7 - num10 + 1 < 0) {
1090 && num7 + num10 - 1 > 15) {
1094 && num8 - num10 + 1 < 0) {
1098 && num8 + num10 - 1 > 15) {
1104 for (
int l = 0; l < num10; l++) {
1105 int num11 = num7 + point.X * l;
1106 int num12 = num8 + point.Z * l;
1110 || num12 >= num2 - 1) {
1127 if (!(flag && flag2 && flag3)) {
1138 if (treeType.HasValue) {
1145 for (
int m = 0; m < num10; m++) {
1146 int num13 = num7 + point.X * m;
1147 int num14 = num8 + point.Z * m;
1149 if (m > num10 / 2) {
1150 if (random.
Bool(0.5f)
1155 if (random.
Bool(0.05f)
1160 if (random.
Bool(0.5f)
1165 if (random.
Bool(0.05f)
1170 if (random.
Bool(0.5f)
1192 for (
int i = x; i <= x; i++) {
1193 for (
int j = y; j <= y; j++) {
1198 int num3 = (int)(6f * num2);
1200 for (
int k = 0; k < 36; k++) {
1204 int num5 = i * 16 + random.
Int(2, 13);
1205 int num6 = j * 16 + random.
Int(2, 13);
1211 if (cellContentsFast != 2
1212 && cellContentsFast != 8) {
1226 if (treeType.HasValue) {
1229 terrainBrush.
PaintFast(chunk, num5, num7, num6);
1241 for (
int i = 0; i < 16; i++) {
1242 for (
int j = 0; j < 16; j++) {
1244 int num2 = j + chunk.
Origin.
Y;
1246 for (
int k = 0; k < num3; k++) {
1259 for (
int i = 0; i < 16; i++) {
1260 for (
int j = 0; j < 16; j++) {
1261 for (
int num = 254; num >= 0; num--) {
1288 for (
int i = 0; i < 16; i++) {
1289 for (
int j = 0; j < 16; j++) {
1290 if (!random.
Bool(0.2f)) {
1293 int num = chunk.Origin.X + i;
1294 int num2 = chunk.Origin.Y + j;
1300 for (
int num4 = 254; num4 >= 0; num4--) {
1303 int face = random.
Int(0, 5);
1305 if (i + point.
X >= 0
1307 && num4 + point.
Y >= 0
1308 && num4 + point.
Y < 254
1310 && j + point.
Z < 16) {
1316 if (temperatureFast < 8) {
1333 float num8 = random.
Float(0f, 1f);
1344 int face2 = random.
Int(0, 3);
1367 if (!random.
Bool(0.5f)) {
1371 for (
int i = 0; i < num; i++) {
1372 int num2 = random.
Int(3, 12);
1373 int num3 = random.
Int(3, 12);
1376 if (humidityFast >= 6
1377 || temperatureFast <= 8) {
1380 for (
int j = 0; j < 8; j++) {
1381 int num4 = num2 + random.
Int(-2, 2);
1382 int num5 = num3 + random.
Int(-2, 2);
1383 for (
int num6 = 251; num6 >= 0; num6--) {
1386 for (
int k = num6 + 1;
1412 if (!random.
Bool(0.2f)) {
1416 for (
int i = 0; i < num; i++) {
1417 int num2 = random.
Int(1, 14);
1418 int num3 = random.
Int(1, 14);
1421 if (humidityFast < 10
1422 || temperatureFast <= 6) {
1425 for (
int j = 0; j < 5; j++) {
1426 int x2 = num2 + random.
Int(-1, 1);
1427 int z = num3 + random.
Int(-1, 1);
1428 for (
int num4 = 254; num4 >= 0; num4--) {
1453 for (
int i = 0; i < 9; i++) {
1454 int num2 = i % 3 - 1;
1455 int num3 = i / 3 - 1;
1456 random.
Seed(
m_seed + x + num2 + 850 * (y + num3));
1457 if (random.
Bool(0.2f)) {
1469 for (
int j = 0; j < num4; j++) {
1470 int num5 = random.
Int(2, 13);
1471 int num6 = random.
Int(2, 13);
1472 int num7 = num5 + chunk.
Origin.
X;
1473 int num8 = num6 + chunk.
Origin.
Y;
1474 int num9 = random.
Int(10, 26);
1484 for (
int k = 0; k < num9; k++) {
1485 int x2 = num5 + random.
Int(-2, 2);
1486 int z = num6 + random.
Int(-2, 2);
1488 for (
int num12 = 254; num12 >= 0; num12--) {
1493 if ((num13 == 2 || num13 == 7 || num13 == 72)
1495 int num14 = flag ? random.
Int(num11 - 2, num11 - 1) : random.
Int(num11 - 1, num11);
1496 for (
int l = 0; l < num14; l++) {
1503 if (num11 > num10) {
1519 for (
int i = 0; i < 6; i++) {
1520 int num = random.
Int(1, 14);
1521 int num2 = random.
Int(1, 14);
1522 int num3 = chunk.Origin.X + num;
1523 int num4 = chunk.Origin.Y + num2;
1525 int num5 = random.
Int(1, 3);
1526 for (
int j = 0; j < num5; j++) {
1527 int x2 = num + random.
Int(-1, 1);
1528 int z = num2 + random.
Int(-1, 1);
1530 for (
int num7 = 254; num7 >= 0; num7--) {
1541 && (num8 == 2 || num8 == 7 || num8 == 72 || num8 == 3)) {
1542 int x3 = !random.
Bool(0.1f) ? 1 : 2;
1544 for (
int k = 0; k < x3; k++) {
1563 for (
int i = 0; i < num; i++) {
1564 int num2 = random.
Int(4, 11);
1565 int num3 = random.
Int(4, 11);
1568 if (humidityFast < 10
1569 || temperatureFast < 10) {
1573 for (
int j = 0; j < 100; j++) {
1574 int num5 = num2 + random.
Int(-3, 3);
1575 int num6 = Math.Clamp(num4 + random.
Int(-12, 1), 1, 255);
1576 int num7 = num3 + random.
Int(-3, 3);
1585 int num8 = random.
Int(0, 3);
1586 for (
int k = 0; k < 4; k++) {
1587 int face = (k + num8) % 4;
1592 int num9 = num6 - 1;
1628 if (!random.
Bool(0.15f)
1633 for (
int i = 0; i < num; i++) {
1634 int num2 = random.
Int(2, 5);
1635 int num3 = random.
Int(2, 5);
1636 int num4 = random.
Int(1, 16 - num2 - 2);
1637 int num5 = random.
Int(1, 16 - num3 - 2);
1638 bool flag = random.
Float(0f, 1f) < 0.5f;
1639 int num6 = random.
Int(3, 5);
1641 int num8 = num4 - 1;
1643 if (num8 < num4 + num2 + 1) {
1644 for (
int j = num5 - 1; j < num5 + num3 + 1; j++) {
1647 while (num9 >= num10
1664 || num7 - num6 < 5) {
1667 for (
int k = num4; k < num4 + num2; k++) {
1668 for (
int l = num5; l < num5 + num3; l++) {
1669 for (
int num11 = num7.Value - 1; num11 >= num7 - num6 + 1; num11--) {
1693 if (!(random.
Float(0f, 1f) < 0.033f)
1698 for (
int i = 0; i < num; i++) {
1699 int num2 = random.
Int(6, 9);
1700 int num3 = random.
Int(6, 9);
1701 int num4 = random.
Bool(0.2f) ? random.
Int(6, 20) : random.
Int(1, 5);
1702 bool flag = random.
Bool(0.5f);
1703 for (
int j = 0; j < num4; j++) {
1704 int num5 = num2 + random.
Int(-4, 4);
1705 int num6 = num3 + random.
Int(-4, 4);
1711 int num8 = random.
Int(0, 3);
1712 for (
int k = 0; k < 4; k++) {
1713 int num9 = (k + num8) % 4;
1716 int num10 = p.X < 0 ? num5 - 2 : num5 - 1;
1717 int num11 = p.X > 0 ? num5 + 2 : num5 + 1;
1718 int num12 = p.Z < 0 ? num6 - 2 : num6 - 1;
1719 int num13 = p.Z > 0 ? num6 + 2 : num6 + 1;
1720 for (
int l = num10; l <= num11; l++) {
1721 for (
int m = num7 - 2; m <= num7 + 2; m++) {
1722 for (
int n = num12; n <= num13; n++) {
1741 int num15 = random.
Int(0, 7);
1745 int contents2 = 136;
1749 if (cellContentsFast == 7
1750 || cellContentsFast == 4) {
1755 else if (random.
Float(0f, 1f) < 0.5f) {
1766 bool flag2 = num16.HasValue && random.
Bool(0.33f);
1767 float num17 = random.
Float(0f, 1f);
1768 float num18 = random.
Float(0f, 1f);
1769 int num19 = random.
Int(-1, 0);
1770 int num20 = random.
Int(1, 2);
1771 int num21 = flag2 ? num7 + 2 : num7 + 1;
1773 for (
int num22 = num19; num22 <= num20; num22++) {
1774 int num23 = num5 + p.X * num22;
1775 int num24 = num6 + p.Z * num22;
1779 if (num16.HasValue) {
1786 else if (num18 < 0.3f) {
1789 else if (num18 < 0.4f) {
1792 else if (num18 < 0.5f) {
1795 else if (num18 < 0.6f) {
1829 else if (num17 < 0.4f) {
1839 else if (num17 < 0.6f) {
1873 for (
int i = 0; i < 16; i++) {
1874 for (
int j = 0; j < 16; j++) {
1878 for (
int k = num + 1; k < 256; k++) {
1881 point =
new Point2(i, j);
1898 for (
int i = 0; i < 16; i++) {
1899 for (
int j = 0; j < 16; j++) {
1901 int num2 = j + chunk.
Origin.
Y;
1902 for (
int num3 = 254; num3 >= 0; num3--) {
1912 for (
int k = 0; k < num5; k++) {
1939 for (
int i = 0; i < 16; i++) {
1940 for (
int j = 0; j < 16; j++) {
1961 for (
int i = 0; i < 16; i++) {
1962 for (
int j = 0; j < 16; j++) {
1985 for (
int i = 0; i < 16; i++) {
1987 int num = random.
Int(4, 12);
1988 for (
int j = 0; j < num; j++) {
1990 int num2 = random.
Int(3, 8);
1992 for (
int k = 0; k < num2; k++) {
1994 (
int)MathF.Floor(zero.
X),
1995 (
int)MathF.Floor(zero.
Y),
1996 (
int)MathF.Floor(zero.
Z),
2006 terrainBrush.
AddCell(0, 0, 0, 150);
2011 for (
int l = 0; l < 16; l++) {
2013 int num3 = random.
Int(3, 7);
2014 for (
int m = 0; m < num3; m++) {
2016 int num4 = random.
Int(3, 6);
2018 for (
int n = 0; n < num4; n++) {
2020 (
int)MathF.Floor(zero2.
X),
2021 (
int)MathF.Floor(zero2.
Y),
2022 (
int)MathF.Floor(zero2.
Z),
2034 for (
int num5 = 0; num5 < 16; num5++) {
2036 int num6 = random.
Int(4, 10);
2037 for (
int num7 = 0; num7 < num6; num7++) {
2039 int num8 = random.
Int(3, 6);
2041 for (
int num9 = 0; num9 < num8; num9++) {
2043 (
int)MathF.Floor(zero3.
X),
2044 (
int)MathF.Floor(zero3.
Y),
2045 (
int)MathF.Floor(zero3.
Z),
2057 for (
int num10 = 0; num10 < 16; num10++) {
2059 int num11 = random.
Int(8, 16);
2060 for (
int num12 = 0; num12 < num11; num12++) {
2063 int num13 = random.
Int(4, 8);
2065 for (
int num14 = 0; num14 < num13; num14++) {
2067 (
int)MathF.Floor(zero4.
X),
2068 (
int)MathF.Floor(zero4.
Y),
2069 (
int)MathF.Floor(zero4.
Z),
2081 for (
int num15 = 0; num15 < 16; num15++) {
2083 int num16 = random.
Int(4, 10);
2084 for (
int num17 = 0; num17 < num16; num17++) {
2086 int num18 = random.
Int(3, 6);
2088 for (
int num19 = 0; num19 < num18; num19++) {
2090 (
int)MathF.Floor(zero5.
X),
2091 (
int)MathF.Floor(zero5.
Y),
2092 (
int)MathF.Floor(zero5.
Z),
2104 for (
int num20 = 0; num20 < 16; num20++) {
2106 int num21 = random.
Int(2, 6);
2107 for (
int num22 = 0; num22 < num21; num22++) {
2109 int num23 = random.
Int(3, 6);
2111 for (
int num24 = 0; num24 < num23; num24++) {
2113 (
int)MathF.Floor(zero6.
X),
2114 (
int)MathF.Floor(zero6.
Y),
2115 (
int)MathF.Floor(zero6.
Z),
2127 for (
int num25 = 0; num25 < 16; num25++) {
2129 int num26 = random.
Int(4, 10);
2130 for (
int num27 = 0; num27 < num26; num27++) {
2132 int num28 = random.
Int(3, 6);
2134 for (
int num29 = 0; num29 < num28; num29++) {
2136 (
int)MathF.Floor(zero7.
X),
2137 (
int)MathF.Floor(zero7.
Y),
2138 (
int)MathF.Floor(zero7.
Z),
2150 for (
int num30 = 0; num30 < 16; num30++) {
2152 int num31 = random.
Int(16, 32);
2153 for (
int num32 = 0; num32 < num31; num32++) {
2156 int num33 = random.
Int(6, 12);
2158 for (
int num34 = 0; num34 < num33; num34++) {
2160 (
int)MathF.Floor(zero8.
X),
2161 (
int)MathF.Floor(zero8.
Y),
2162 (
int)MathF.Floor(zero8.
Z),
2174 for (
int num35 = 0; num35 < 16; num35++) {
2176 int num36 = random.
Int(16, 32);
2177 for (
int num37 = 0; num37 < num36; num37++) {
2180 int num38 = random.
Int(6, 12);
2182 for (
int num39 = 0; num39 < num38; num39++) {
2184 (
int)MathF.Floor(zero9.
X),
2185 (
int)MathF.Floor(zero9.
Y),
2186 (
int)MathF.Floor(zero9.
Z),
2198 for (
int num40 = 0; num40 < 16; num40++) {
2200 int num41 = random.
Int(16, 32);
2201 for (
int num42 = 0; num42 < num41; num42++) {
2204 int num43 = random.
Int(6, 12);
2206 for (
int num44 = 0; num44 < num43; num44++) {
2208 (
int)MathF.Floor(zero10.
X),
2209 (
int)MathF.Floor(zero10.
Y),
2210 (
int)MathF.Floor(zero10.
Z),
2222 for (
int num45 = 0; num45 < 16; num45++) {
2224 int num46 = random.
Int(16, 32);
2225 for (
int num47 = 0; num47 < num46; num47++) {
2227 int num48 = random.
Int(6, 12);
2229 for (
int num49 = 0; num49 < num48; num49++) {
2231 (
int)MathF.Floor(zero11.
X),
2232 (
int)MathF.Floor(zero11.
Y),
2233 (
int)MathF.Floor(zero11.
Z),
2245 for (
int num50 = 0; num50 < 16; num50++) {
2247 int num51 = random.
Int(16, 32);
2248 for (
int num52 = 0; num52 < num51; num52++) {
2251 int num53 = random.
Int(6, 12);
2253 for (
int num54 = 0; num54 < num53; num54++) {
2255 (
int)MathF.Floor(zero12.
X),
2256 (
int)MathF.Floor(zero12.
Y),
2257 (
int)MathF.Floor(zero12.
Z),
2269 for (
int num55 = 0; num55 < 16; num55++) {
2271 int num56 = random.
Int(16, 32);
2272 for (
int num57 = 0; num57 < num56; num57++) {
2275 int num58 = random.
Int(6, 12);
2277 for (
int num59 = 0; num59 < num58; num59++) {
2279 (
int)MathF.Floor(zero13.
X),
2280 (
int)MathF.Floor(zero13.
Y),
2281 (
int)MathF.Floor(zero13.
Z),
2293 for (
int num60 = 0; num60 < 16; num60++) {
2295 int num61 = random.
Int(16, 32);
2296 for (
int num62 = 0; num62 < num61; num62++) {
2298 int num63 = random.
Int(5, 10);
2300 for (
int num64 = 0; num64 < num63; num64++) {
2302 (
int)MathF.Floor(zero14.
X),
2303 (
int)MathF.Floor(zero14.
Y),
2304 (
int)MathF.Floor(zero14.
Z),
2316 int[] array = [4, 6, 8];
2317 for (
int num65 = 0; num65 < 4 * array.Length; num65++) {
2319 int num66 = array[num65 / 4];
2320 int num67 = num65 % 2 + 1;
2321 float num68 = num65 % 4 == 2 ? 0.5f : 1f;
2322 int num69 = num65 % 4 == 1 ? num66 * num66 : 2 * num66 * num66;
2323 for (
int num70 = 0; num70 < num69; num70++) {
2325 float num71 = vector15.
Length();
2326 int num72 = random.
Int(3, 4);
2329 (
int)MathF.Floor(vector15.
X),
2331 (
int)MathF.Floor(vector15.
Y),
2338 (
int)MathF.Floor(vector15.
X),
2340 (
int)MathF.Floor(vector15.
Y),
2350 int[] array2 = [8, 12, 14, 16];
2351 for (
int num73 = 0; num73 < 4 * array2.Length; num73++) {
2353 int num74 = array2[num73 / 4];
2354 int num75 = num74 + 2;
2355 float num76 = num73 % 4 == 2 ? 0.5f : 1f;
2356 int num77 = num73 % 4 == 1 ? num74 * num74 : 2 * num74 * num74;
2357 for (
int num78 = 0; num78 < num77; num78++) {
2359 float num79 = vector16.
Length();
2360 int num80 = random.
Int(3, 4);
2362 int num81 = 1 + (int)
MathUtils.
Lerp(num75, 0f, num79 / num74) + random.
Int(0, 1);
2364 (
int)MathF.Floor(vector16.
X),
2366 (
int)MathF.Floor(vector16.
Y),
2373 (
int)MathF.Floor(vector16.
X),
2375 (
int)MathF.Floor(vector16.
Y),
2385 for (
int num82 = 0; num82 < 7; num82++) {
2387 for (
int num83 = 0; num83 < 3; num83++) {
2389 int num84 = 6 + 4 * num82;
2390 int max = 3 + num82 / 3;
2391 int max2 = 9 + num82;
2392 for (
int num85 = 0; num85 < num84; num85++) {
2393 int num86 = random.
Int(2, max);
2394 int num87 = random.
Int(8, max2) - 2 * num86;
2397 for (
int num88 = 0; num88 < num87; num88++) {
2399 (
int)MathF.Floor(zero15.
X) - num86 / 2,
2400 (
int)MathF.Floor(zero15.
Y) - num86 / 2,
2401 (
int)MathF.Floor(zero15.
Z) - num86 / 2,
2415 "OnTerrainBrushesCreated",
2417 loader.OnTerrainBrushesCreated();
2429 catch (Exception e) {
2431 Log.
Error($
"ChunkGenerationStep \"{step.Name}\" at generateOrder {step.GenerateOrder}");
2434 step.ErrorLogged =
true;
static void Error(object message)
static int Min(int x1, int x2)
static float Saturate(float x)
static float PowSign(float x, float n)
static int Max(int x1, int x2)
static float Lerp(float x1, float x2, float f)
static float LinearStep(float zero, float one, float f)
virtual bool IsTransparent_(int value)
static FluidBlock[] FluidBlocks
static int SetSubvariant(int data, int face)
static int SetFace(int data, int face)
Action< TerrainChunk > GenerateAction
static int SetIsTop(int data, bool isTop)
static int SetVariant(int data, int variant)
static int SetRotation(int data, int rotation)
static int SetFace(int data, int face)
static bool IsGrowthStopCell(int x, int y, int z)
static int GenerateRandomPlantValue(Random random, int groundValue, int temperature, int humidity, int y)
static ReadOnlyList< TerrainBrush > GetTreeBrushes(TreeType treeType)
static ? TreeType GenerateRandomTreeType(Random random, int temperature, int humidity, int y, float densityMultiplier=1f)
static int GetTreeTrunkValue(TreeType treeType)
static int GetTreeLeavesValue(TreeType treeType)
static float OctavedNoise(float x, float frequency, int octaves, float frequencyStep, float amplitudeStep, bool ridged=false)
static int SetSpikesState(int data, bool spikesState)
static int SetRotation(int data, int rotation)
static bool CanSupportSnow(int value)
static Func< int, int, bool > ShaftHasSnowOnIce
static Func< int, int > GetTemperatureAdjustmentAtHeight
static Func< int, int, bool > IsPlaceFrozen
void PaintFast(TerrainChunk chunk, int x, int y, int z)
void AddBox(int x, int y, int z, int sizeX, int sizeY, int sizeZ, Brush brush)
void AddCell(int x, int y, int z, Brush brush)
static int CalculateCellIndex(int x, int y, int z)
virtual void AddBrushPaint(int x, int y, int z, TerrainBrush brush)
virtual int GetCellValueFast(int index)
virtual void SetCellValueFast(int x, int y, int z, int value)
virtual int GetTemperatureFast(int x, int z)
virtual void SetHumidityFast(int x, int z, int humidity)
virtual void SetTemperatureFast(int x, int z, int temperature)
virtual int GetCellContentsFast(int x, int y, int z)
virtual int GetHumidityFast(int x, int z)
virtual int CalculateTopmostCellHeight(int x, int z)
virtual float Get(int x, int y)
Grid2d(int sizeX, int sizeY)
virtual float Sample(float x, float y)
virtual void Set(int x, int y, float value)
virtual void Get8(int x, int y, int z, out float v111, out float v211, out float v121, out float v221, out float v112, out float v212, out float v122, out float v222)
Grid3d(int sizeX, int sizeY, int sizeZ)
virtual float Sample(float x, float y, float z)
virtual float Get(int x, int y, int z)
virtual void Set(int x, int y, int z, float value)
virtual void GenerateBottomSuckers(TerrainChunk chunk)
WorldSettings m_worldSettings
virtual float CalculateOceanShoreDistance(float x, float z)
Vector2 m_mountainsOffset
static List< TerrainBrush > m_granitePocketBrushes
virtual void GenerateBedrockAndAir(TerrainChunk chunk)
virtual void GenerateLogs(TerrainChunk chunk)
static List< TerrainBrush > m_waterPocketBrushes
virtual void GenerateSnowAndIce(TerrainChunk chunk)
static List< TerrainBrush > m_copperBrushes
SubsystemBottomSuckerBlockBehavior m_subsystemBottomSuckerBlockBehavior
static int TGMountainsDetailOctaves
virtual void UpdateFluidIsTop(TerrainChunk chunk)
virtual void GenerateCacti(TerrainChunk chunk)
Vector2 m_temperatureOffset
static List< TerrainBrush > m_basaltPocketBrushes
virtual void GenerateChunkContentsPass3(TerrainChunk chunk)
TerrainContentsGenerator24(SubsystemTerrain subsystemTerrain)
virtual float CalculateForestDensity(float x, float z)
List< ChunkGenerationStep > ChunkGenerationStep4
static List< TerrainBrush > m_clayPocketBrushes
List< ChunkGenerationStep > ChunkGenerationStep3
virtual void GenerateChunkContentsPass1(TerrainChunk chunk)
virtual void GenerateChunkContentsPass2(TerrainChunk chunk)
virtual float CalculateOceanShoreZ(float x)
float TGMountainsStrength
float TGMountainsPercentage
virtual float CalculateMountainRangeFactor(float x, float z)
float TGTurbulenceStrength
List< ChunkGenerationStep > ChunkGenerationStep1
static float TGSurfaceMultiplier
float TGMountainRangeFreq
virtual Vector3 FindCoarseSpawnPosition()
virtual float CalculateOceanShoreX(float z)
static List< TerrainBrush > m_gravelPocketBrushes
static float TGMountainsDetailPersistence
static float TGMountainsDetailFreq
virtual void GenerateGraves(TerrainChunk chunk)
virtual void GenerateSurface(TerrainChunk chunk)
virtual void CallChunkGenerationStepAction(ChunkGenerationStep step, TerrainChunk chunk)
virtual float CalculateHeight(float x, float z)
static List< TerrainBrush > m_dirtPocketBrushes
static List< TerrainBrush > m_saltpeterBrushes
virtual void GenerateKelp(TerrainChunk chunk)
virtual void GenerateTraps(TerrainChunk chunk)
static List< TerrainBrush > m_coalBrushes
static List< TerrainBrush > m_sulphurBrushes
virtual void GenerateTerrain(TerrainChunk chunk, int x1, int z1, int x2, int z2)
virtual void GeneratePumpkins(TerrainChunk chunk)
virtual int CalculateTemperature(float x, float z)
virtual void GenerateMinerals(TerrainChunk chunk)
static List< TerrainBrush > m_ironBrushes
virtual void GenerateSurfaceParameters(TerrainChunk chunk, int x1, int z1, int x2, int z2)
virtual int CalculateHumidity(float x, float z)
static float DistanceFromRange(float x, float min, float max)
static List< TerrainBrush > m_limestonePocketBrushes
virtual void GenerateTrees(TerrainChunk chunk)
SubsystemTerrain m_subsystemTerrain
virtual void PropagateFluidsDownwards(TerrainChunk chunk)
static float Squish(float v, float zero, float one)
virtual void GenerateChunkContentsPass4(TerrainChunk chunk)
float TGShoreFluctuationsScaling
static List< TerrainBrush > m_sandPocketBrushes
virtual void GenerateCairns(TerrainChunk chunk)
virtual void GenerateGrassAndPlants(TerrainChunk chunk)
virtual void GenerateCaves(TerrainChunk chunk)
static List< TerrainBrush > m_germaniumBrushes
static List< TerrainBrush > m_diamondBrushes
virtual float ScoreSpawnPosition(int x, int z)
float TGShoreFluctuations
float TGTurbulencePersistence
virtual void GenerateIvy(TerrainChunk chunk)
static List< TerrainBrush > m_magmaPocketBrushes
virtual void GeneratePockets(TerrainChunk chunk)
static List< List< TerrainBrush > > m_caveBrushesByType
float TGOceanSlopeVariation
List< ChunkGenerationStep > ChunkGenerationStep2
virtual void GenerateSeagrass(TerrainChunk chunk)
static TerrainContentsGenerator24()
static void CreateBrushes()
static Point2 ToChunk(Vector2 p)
static int ExtractContents(int value)
static int ReplaceData(int value, int data)
virtual int GetHumidity(int x, int z)
virtual void SetCellValueFast(int x, int y, int z, int value)
static int ToCell(float x)
virtual int GetCellContentsFast(int x, int y, int z)
static int ReplaceContents(int value, int contents)
方块值的最低10位,替换为目标Content
static int MakeBlockValue(int contents)
static int ExtractData(int value)
virtual int CalculateTopmostCellHeight(int x, int z)
virtual int GetTemperature(int x, int z)
static int SetCutFace(int data, int cutFace)
virtual Subsystem FindSubsystem(Type type, string name, bool throwOnError)
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static readonly Vector2 Zero
static Vector2 Round(Vector2 v)
static Vector3 Cross(Vector3 v1, Vector3 v2)
static Vector3 Normalize(Vector3 v)
static readonly Vector3 Zero
static int OppositeFace(int face)
static Point3 FaceToPoint3(int face)
static int Point3ToFace(Point3 p, int maxFace=5)