1using System.Diagnostics;
7 public static int m_counter = (int)Stopwatch.GetTimestamp();
15 public const ulong
m_mask = 281474976710655uL;
26 m_seed = (ulong)(seed ^ 0x5DEECE66D);
29 public int Sign() =>
Int() % 2 != 0 ? 1 : -1;
33 public bool Bool(
float probability) =>
Int() / 2.147484E+09f < probability;
37 return (
int)(
m_seed >> 17);
40 public int UniformInt(
int min,
int max) => (int)(min +
Int() * (
long)(max - min + 1) / 2147483648L);
43 float num =
Int() / 2.147484E+09f;
44 return min + num * (max - min);
50 float num2 = MathF.Sqrt(-2f * MathF.Log(num));
51 float num3 = 0.322232425f + num2 * (1f + num2 * (0.3422421f + num2 * (0.0204231218f + num2 * 4.536422E-05f)));
52 float num4 = 0.09934846f + num2 * (0.588581562f + num2 * (0.5311035f + num2 * (0.103537753f + num2 * 0.00385607f)));
53 return mean + stddev * (num3 / num4 - num2);
55 float num5 = MathF.Sqrt(-2f * MathF.Log(1f - num));
56 float num6 = 0.322232425f + num5 * (1f + num5 * (0.3422421f + num5 * (0.0204231218f + num5 * 4.536422E-05f)));
57 float num7 = 0.09934846f + num5 * (0.588581562f + num5 * (0.5311035f + num5 * (0.103537753f + num5 * 0.00385607f)));
58 return mean - stddev * (num6 / num7 - num5);
68 while (circular && num > 1f);
69 return v * (length / MathF.Sqrt(num));
79 while (circular && num > 1f);
80 return v * (
UniformFloat(minLength, maxLength) / MathF.Sqrt(num));
90 while (spherical && num > 1f);
91 return v * (length / MathF.Sqrt(num));
101 while (spherical && num > 1f);
102 return v * (
UniformFloat(minLength, maxLength) / MathF.Sqrt(num));
116 int num = seed == -2147483648 ? 2147483647 : Math.Abs(seed);
117 int num2 = 161803398 - num;
120 for (
int i = 1; i < 55; i++) {
121 int num4 = 21 * i % 55;
129 for (
int j = 1; j < 5; j++) {
130 for (
int k = 1; k < 56; k++) {
146 return (num + 2147483646.0) / 4294967293.0;
155 if (++inextp >= 56) {
159 if (num == 2147483647) {
173 public int Next(
int maxValue) {
175 throw new ArgumentOutOfRangeException(nameof(maxValue));
177 return (
int)(
Sample() * maxValue);
180 public int Next(
int minValue,
int maxValue) {
181 if (minValue > maxValue) {
182 throw new ArgumentOutOfRangeException(nameof(minValue));
184 long num = maxValue - minValue;
187 return (
int)(
Sample() * num) + minValue;
193 ArgumentNullException.ThrowIfNull(buffer);
194 for (
int i = 0; i < buffer.Length; i++) {
206 public static int m_seed = (int)Stopwatch.GetTimestamp();
230 float num2 = MathF.Sqrt(-2f * MathF.Log(num));
231 float num3 = 0.322232425f + num2 * (1f + num2 * (0.3422421f + num2 * (0.0204231218f + num2 * 4.536422E-05f)));
232 float num4 = 0.09934846f + num2 * (0.588581562f + num2 * (0.5311035f + num2 * (0.103537753f + num2 * 0.00385607f)));
233 return mean + stddev * (num3 / num4 - num2);
235 float num5 = MathF.Sqrt(-2f * MathF.Log(1f - num));
236 float num6 = 0.322232425f + num5 * (1f + num5 * (0.3422421f + num5 * (0.0204231218f + num5 * 4.536422E-05f)));
237 float num7 = 0.09934846f + num5 * (0.588581562f + num5 * (0.5311035f + num5 * (0.103537753f + num5 * 0.00385607f)));
238 return mean - stddev * (num6 / num7 - num5);
285 public void Set(
int x,
int y,
float value) {
290 int num = (int)MathF.Floor(x);
291 int num2 = (int)MathF.Floor(y);
292 int num3 = (int)MathF.Ceiling(x);
293 int num4 = (int)MathF.Ceiling(y);
323 public Grid3d(
int sizeX,
int sizeY,
int sizeZ) {
355 public void Set(
int x,
int y,
int z,
float value) {
359 public float Sample(
float x,
float y,
float z) {
360 int num = (int)MathF.Floor(x);
361 int num2 = (int)MathF.Ceiling(x);
362 int num3 = (int)MathF.Floor(y);
363 int num4 = (int)MathF.Ceiling(y);
364 int num5 = (int)MathF.Floor(z);
365 int num6 = (int)MathF.Ceiling(z);
511 m_seed = subsystemGameInfo.WorldSeed;
515 if (
string.IsNullOrEmpty(subsystemGameInfo.WorldSettings.OriginalSerializationVersion)) {
543 else if (
string.CompareOrdinal(subsystemGameInfo.WorldSettings.OriginalSerializationVersion,
"2.1") < 0) {
604 float num = -3.40282347E+38f;
605 for (
int i = 0; i < 800; i += 2) {
606 for (
int j = 4; j <= 8; j += 2) {
607 for (
int k = 0; k < 2; k++) {
611 num2 = m_oceanCorner.Y + i;
615 x = m_oceanCorner.X + i;
669 return MathUtils.
Min(x - num, z - num2, num3 - x, num4 - z);
694 float num8 = (1f - num6) * (1f - num3) *
MathUtils.
Saturate((num7 - 0.6f) / 0.4f);
709 float num19 = num14 + num15 + num16 + num18 + num17;
711 return Math.Clamp(64f + num20, 10f, 251f);
808 for (
int i = x1; i < x2; i++) {
809 for (
int j = z1; j < z2; j++) {
824 int num3 = chunk.Origin.X + x1;
825 int num4 = chunk.Origin.Y + z1;
826 Grid2d grid2d =
new(num, num2);
827 Grid2d grid2d2 =
new(num, num2);
828 for (
int i = 0; i < num2; i++) {
829 for (
int j = 0; j < num; j++) {
834 Grid3d grid3d =
new(num / 4 + 1, 33, num2 / 4 + 1);
835 for (
int k = 0; k < grid3d.
SizeX; k++) {
836 for (
int l = 0; l < grid3d.
SizeZ; l++) {
837 int num5 = k * 4 + num3;
838 int num6 = l * 4 + num4;
842 for (
int m = 0; m < grid3d.
SizeY; m++) {
860 float num13 = num10 + num12;
861 float num14 = num7 - num13;
863 grid3d.
Set(k, m, l, num14);
868 for (
int n = 0; n < grid3d.SizeX - 1; n++) {
869 for (
int num15 = 0; num15 < grid3d.SizeZ - 1; num15++) {
870 for (
int num16 = 0; num16 < grid3d.SizeY - 1; num16++) {
884 float num17 = (v2 - v) / 4f;
885 float num18 = (v4 - v3) / 4f;
886 float num19 = (v6 - v5) / 4f;
887 float num20 = (v8 - v7) / 4f;
892 for (
int num25 = 0; num25 < 4; num25++) {
893 float num26 = (num23 - num21) / 4f;
894 float num27 = (num24 - num22) / 4f;
897 for (
int num30 = 0; num30 < 4; num30++) {
898 float num31 = (num29 - num28) / 8f;
900 int num33 = num25 + n * 4;
901 int num34 = num30 + num15 * 4;
904 float x4 = grid2d.
Get(num33, num34);
905 float num35 = grid2d2.
Get(num33, num34);
908 float f = num35 - 0.01f * humidityFast;
911 bool flag = (temperatureFast > 8 && humidityFast < 8 && num35 < 0.95f) || (MathF.Abs(x4) < 12f && num35 < 0.9f);
913 for (
int num39 = 0; num39 < 8; num39++) {
914 int num40 = num39 + num16 * 8;
917 if (num40 <= oceanLevel) {
922 value = !flag ? !(num32 < num37) ? 67 : 3 :
923 !(num32 < num36) ? !(num32 < num37) ? 67 : 3 : 4;
944 for (
int i = 0; i < 16; i++) {
945 for (
int j = 0; j < 16; j++) {
967 num8 = temperature > 4 && temperature < 7 ? 6 : 7;
970 int num9 = temperature / 4;
972 num8 = (num4 < 66 || num4 == 84 + num9 || num4 == 103 + num9) && humidity == 9 && temperature % 6 == 1 ? 66 :
973 num10 != 18 || humidity <= 8 || humidity % 2 != 0 || temperature % 3 != 0 ? 2 : 72;
976 for (
int k = num11 - num7; k < num11; k++) {
997 for (
int i = x - 1; i <= x + 1; i++) {
998 for (
int j = y - 1; j <= y + 1; j++) {
1001 for (
int k = 0; k < num; k++) {
1006 for (
int l = 0; l < num3; l++) {
1013 for (
int m = 0; m < num4; m++) {
1020 for (
int n = 0; n < num5; n++) {
1027 for (
int num7 = 0; num7 < num6; num7++) {
1034 for (
int num9 = 0; num9 < num8; num9++) {
1041 for (
int num11 = 0; num11 < num10; num11++) {
1048 for (
int num13 = 0; num13 < num12; num13++) {
1062 for (
int i = -1; i <= 1; i++) {
1063 for (
int j = -1; j <= 1; j++) {
1065 int num2 = j + chunk.
Coords.
Y;
1068 for (
int k = 0; k < num3; k++) {
1072 for (
int l = 0; l < 3; l++) {
1075 int z = num2 * 16 + random.
UniformInt(0, 15);
1078 for (
int m = 0; m < 10; m++) {
1079 int x2 = num * 16 + random.
UniformInt(0, 15);
1081 int z2 = num2 * 16 + random.
UniformInt(0, 15);
1084 for (
int n = 0; n < 2; n++) {
1085 int x3 = num * 16 + random.
UniformInt(0, 15);
1087 int z3 = num2 * 16 + random.
UniformInt(0, 15);
1090 for (
int num5 = 0; num5 < 1; num5++) {
1091 int x4 = num * 16 + random.
UniformInt(0, 15);
1093 int z4 = num2 * 16 + random.
UniformInt(0, 15);
1096 for (
int num6 = 0; num6 < 6; num6++) {
1097 int x5 = num * 16 + random.
UniformInt(0, 15);
1099 int z5 = num2 * 16 + random.
UniformInt(0, 15);
1102 for (
int num7 = 0; num7 < 4; num7++) {
1103 int x6 = num * 16 + random.
UniformInt(0, 15);
1105 int z6 = num2 * 16 + random.
UniformInt(0, 15);
1108 for (
int num8 = 0; num8 < 3; num8++) {
1109 int x7 = num * 16 + random.
UniformInt(0, 15);
1111 int z7 = num2 * 16 + random.
UniformInt(0, 15);
1114 for (
int num9 = 0; num9 < 6; num9++) {
1115 int x8 = num * 16 + random.
UniformInt(0, 15);
1117 int z8 = num2 * 16 + random.
UniformInt(0, 15);
1120 if (random.
Bool(0.02f + 0.01f * num4)) {
1121 int num10 = num * 16;
1123 int num12 = num2 * 16;
1125 for (
int num14 = 0; num14 < num13; num14++) {
1127 int num15 = 8 + (int)MathF.
Round(vector.
X);
1129 int num17 = 8 + (int)MathF.
Round(vector.
Y);
1131 .PaintFast(chunk, num10 + num15, num11 + num16, num12 + num17);
1134 if (random.
Bool(0.06f + 0.05f * num4)) {
1135 int num18 = num * 16;
1137 int num20 = num2 * 16;
1139 for (
int num22 = 0; num22 < num21; num22++) {
1141 int num23 = 8 + (int)MathF.
Round(vector2.
X);
1143 int num25 = 8 + (int)MathF.Round(vector2.
Y);
1145 .PaintFast(chunk, num18 + num23, num19 + num24, num20 + num25);
1156 List<CavePoint> list =
new();
1159 for (
int i = x - 2; i <= x + 2; i++) {
1160 for (
int j = y - 2; j <= y + 2; j++) {
1164 int num2 = j * 16 + random.
UniformInt(0, 15);
1165 float probability = 0.5f;
1166 if (!random.
Bool(probability)) {
1172 Vector3 position =
new(num, num3 - 1, num2);
1173 Vector3 v =
new(3f, num4 - num3, 0f);
1174 Vector3 v2 =
new(0f, num5 - num3, 3f);
1176 if (direction.
Y > -0.6f) {
1177 list.Add(
new CavePoint { Position = position, Direction = direction, BrushType = 0, Length = random.
UniformInt(80, 240) });
1179 int num6 = i * 16 + 8;
1180 int num7 = j * 16 + 8;
1182 while (num8 < list.Count) {
1186 .PaintFastAvoidWater(
1192 cavePoint.Position += 2f * cavePoint.
Direction;
1193 cavePoint.StepsTaken += 2;
1194 float num9 = cavePoint.Position.X - num6;
1195 float num10 = cavePoint.Position.Z - num7;
1196 if (random.
Bool(0.5f)) {
1198 if ((num9 < -25.5f && v3.
X < 0f)
1199 || (num9 > 25.5f && v3.
X > 0f)) {
1202 if ((num10 < -25.5f && v3.
Z < 0f)
1203 || (num10 > 25.5f && v3.
Z > 0f)) {
1206 if ((cavePoint.
Direction.
Y < -0.5f && v3.
Y < -10f)
1213 && random.
Bool(0.06f)) {
1217 && random.
Bool(0.05f)) {
1218 cavePoint.Direction.Y = 0f;
1222 && random.
Bool(0.03f)) {
1223 cavePoint.Direction.X = 0f;
1224 cavePoint.Direction.Y = -1f;
1225 cavePoint.Direction.Z = 0f;
1229 && random.
Bool(0.02f)) {
1230 cavePoint.Direction.X = 0f;
1231 cavePoint.Direction.Y = 1f;
1232 cavePoint.Direction.Z = 0f;
1234 if (random.
Bool(0.33f)) {
1237 if (random.
Bool(0.06f)
1251 || MathF.Abs(num9) > 34f
1252 || MathF.Abs(num10) > 34f
1259 if (cavePoint.
Position.
Y > num11 + 1f) {
1279 for (
int i = x2; i <= x2; i++) {
1280 for (
int j = y2; j <= y2; j++) {
1289 num5 = 1 + (random.
Bool(0.25f) ? 1 : 0);
1291 else if (num4 > 0.5f) {
1292 num5 = random.
Bool(0.25f) ? 1 : 0;
1295 for (
int k = 0; k < 8; k++) {
1299 int num7 = i * 16 + random.
Int(0, 15);
1300 int num8 = j * 16 + random.
Int(0, 15);
1306 if (cellContentsFast != 2
1307 && cellContentsFast != 8) {
1311 int num10 = random.
Int(3, 7);
1314 && num7 - num10 + 1 < 0) {
1318 && num7 + num10 - 1 > 15) {
1322 && num8 - num10 + 1 < 0) {
1326 && num8 + num10 - 1 > 15) {
1332 for (
int l = 0; l < num10; l++) {
1333 int num11 = num7 + point.X * l;
1334 int num12 = num8 + point.Z * l;
1338 || num12 >= num2 - 1) {
1357 if (!((flag && flag2) & flag3)) {
1367 if (treeType.HasValue) {
1374 for (
int m = 0; m < num10; m++) {
1375 int num13 = num7 + point.X * m;
1376 int num14 = num8 + point.Z * m;
1378 if (m > num10 / 2) {
1384 if (random.
Bool(0.3f)
1388 if (random.
Bool(0.05f)
1392 if (random.
Bool(0.3f)
1396 if (random.
Bool(0.05f)
1400 if (random.
Bool(0.1f)
1409 int num15 = (int)(5f * num4);
1411 for (
int n = 0; n < 32; n++) {
1412 if (num16 >= num15) {
1415 int num17 = i * 16 + random.
Int(2, 13);
1416 int num18 = j * 16 + random.
Int(2, 13);
1422 if (cellContentsFast2 != 2
1423 && cellContentsFast2 != 8) {
1441 if (treeType2.HasValue) {
1443 treeBrushes[random.
Int(treeBrushes.
Count)].PaintFast(chunk, num17, num19, num18);
1454 for (
int i = 0; i < 16; i++) {
1455 for (
int j = 0; j < 16; j++) {
1457 int num2 = j + chunk.
Origin.
Y;
1459 for (
int k = 0; k < num3; k++) {
1472 for (
int i = 0; i < 16; i++) {
1473 for (
int j = 0; j < 16; j++) {
1474 for (
int num = 254; num >= 0; num--) {
1501 for (
int i = 0; i < 16; i++) {
1502 for (
int j = 0; j < 16; j++) {
1503 if (!random.
Bool(0.2f)) {
1506 int num = chunk.Origin.X + i;
1507 int num2 = chunk.Origin.Y + j;
1513 for (
int num4 = 254; num4 >= 0; num4--) {
1518 if (i + point.
X >= 0
1520 && num4 + point.
Y >= 0
1521 && num4 + point.
Y < 254
1523 && j + point.
Z < 16) {
1529 if (temperatureFast < 8) {
1580 if (!random.
Bool(0.5f)) {
1584 for (
int i = 0; i < num; i++) {
1589 if (humidityFast >= 6
1590 || temperatureFast <= 8) {
1593 for (
int j = 0; j < 8; j++) {
1596 for (
int num6 = 251; num6 >= 0; num6--) {
1599 for (
int k = num6 + 1;
1625 if (!random.
Bool(0.2f)) {
1629 for (
int i = 0; i < num; i++) {
1634 if (humidityFast < 10
1635 || temperatureFast <= 6) {
1638 for (
int j = 0; j < 5; j++) {
1641 for (
int num4 = 254; num4 >= 0; num4--) {
1666 for (
int i = 0; i < 9; i++) {
1667 int num2 = i % 3 - 1;
1668 int num3 = i / 3 - 1;
1669 random.
Reset(
m_seed + x + num2 + 850 * (y + num3));
1670 if (random.
Bool(0.2f)) {
1682 for (
int j = 0; j < num4; j++) {
1685 int num7 = num5 + chunk.
Origin.
X;
1686 int num8 = num6 + chunk.
Origin.
Y;
1697 for (
int k = 0; k < num9; k++) {
1701 for (
int num12 = 254; num12 >= 0; num12--) {
1706 if ((num13 == 2 || num13 == 7 || num13 == 72)
1708 int num14 = flag ? random.
UniformInt(num11 - 2, num11 - 1) : random.
UniformInt(num11 - 1, num11);
1709 for (
int l = 0; l < num14; l++) {
1716 if (num11 > num10) {
1732 for (
int i = 0; i < 6; i++) {
1735 int num3 = chunk.Origin.X + num;
1736 int num4 = chunk.Origin.Y + num2;
1739 for (
int j = 0; j < num5; j++) {
1743 for (
int num7 = 254; num7 >= 0; num7--) {
1754 && (num8 == 2 || num8 == 7 || num8 == 72 || num8 == 3)) {
1755 int x3 = !random.
Bool(0.1f) ? 1 : 2;
1757 for (
int k = 0; k < x3; k++) {
1776 for (
int i = 0; i < num; i++) {
1781 if (humidityFast <= 10
1782 || temperatureFast <= 10) {
1786 for (
int j = 0; j < 100; j++) {
1788 int num6 = Math.Clamp(num4 + random.
UniformInt(-10, 1), 1, 255);
1799 for (
int k = 0; k < 4; k++) {
1800 int face = (k + num8) % 4;
1805 int num9 = num6 - 1;
1841 if (!random.
Bool(0.15f)
1846 for (
int i = 0; i < num; i++) {
1849 int num4 = random.
UniformInt(1, 16 - num2 - 2);
1850 int num5 = random.
UniformInt(1, 16 - num3 - 2);
1854 int num8 = num4 - 1;
1856 if (num8 < num4 + num2 + 1) {
1857 for (
int j = num5 - 1; j < num5 + num3 + 1; j++) {
1860 while (num9 >= num10
1877 || num7 - num6 < 5) {
1880 for (
int k = num4; k < num4 + num2; k++) {
1881 for (
int l = num5; l < num5 + num3; l++) {
1882 for (
int num11 = num7.Value - 1; num11 >= num7 - num6 + 1; num11--) {
1911 for (
int i = 0; i < num; i++) {
1915 bool flag = random.
Bool(0.5f);
1916 for (
int j = 0; j < num4; j++) {
1925 for (
int k = 0; k < 4; k++) {
1926 int num9 = (k + num8) % 4;
1929 int num10 = p.X < 0 ? num5 - 2 : num5 - 1;
1930 int num11 = p.X > 0 ? num5 + 2 : num5 + 1;
1931 int num12 = p.Z < 0 ? num6 - 2 : num6 - 1;
1932 int num13 = p.Z > 0 ? num6 + 2 : num6 + 1;
1933 for (
int l = num10; l <= num11; l++) {
1934 for (
int m = num7 - 2; m <= num7 + 2; m++) {
1935 for (
int n = num12; n <= num13; n++) {
1959 int contents2 = 136;
1963 if (cellContentsFast == 7
1964 || cellContentsFast == 4) {
1980 bool flag2 = num16.HasValue && random.
Bool(0.33f);
1985 int num21 = flag2 ? num7 + 2 : num7 + 1;
1987 for (
int num22 = num19; num22 <= num20; num22++) {
1988 int num23 = num5 + p.X * num22;
1989 int num24 = num6 + p.Z * num22;
1993 if (num16.HasValue) {
2000 else if (num18 < 0.3f) {
2003 else if (num18 < 0.4f) {
2006 else if (num18 < 0.5f) {
2009 else if (num18 < 0.6f) {
2043 else if (num17 < 0.4f) {
2053 else if (num17 < 0.6f) {
2085 for (
int i = 0; i < 16; i++) {
2086 for (
int j = 0; j < 16; j++) {
2088 int num2 = j + chunk.
Origin.
Y;
2089 for (
int num3 = 254; num3 >= 0; num3--) {
2099 for (
int k = 0; k < num5; k++) {
2126 for (
int i = 0; i < 16; i++) {
2127 for (
int j = 0; j < 16; j++) {
2148 for (
int i = 0; i < 16; i++) {
2149 for (
int j = 0; j < 16; j++) {
2172 for (
int i = 0; i < 16; i++) {
2175 for (
int j = 0; j < num; j++) {
2180 for (
int k = 0; k < num2; k++) {
2182 (
int)MathF.Floor(zero.
X),
2183 (
int)MathF.Floor(zero.
Y),
2184 (
int)MathF.Floor(zero.
Z),
2194 terrainBrush.
AddCell(0, 0, 0, 150);
2199 for (
int l = 0; l < 16; l++) {
2202 for (
int m = 0; m < num3; m++) {
2207 for (
int n = 0; n < num4; n++) {
2209 (
int)MathF.Floor(zero2.
X),
2210 (
int)MathF.Floor(zero2.
Y),
2211 (
int)MathF.Floor(zero2.
Z),
2223 for (
int num5 = 0; num5 < 16; num5++) {
2226 for (
int num7 = 0; num7 < num6; num7++) {
2231 for (
int num9 = 0; num9 < num8; num9++) {
2233 (
int)MathF.Floor(zero3.
X),
2234 (
int)MathF.Floor(zero3.
Y),
2235 (
int)MathF.Floor(zero3.
Z),
2247 for (
int num10 = 0; num10 < 16; num10++) {
2250 for (
int num12 = 0; num12 < num11; num12++) {
2257 for (
int num14 = 0; num14 < num13; num14++) {
2259 (
int)MathF.Floor(zero4.
X),
2260 (
int)MathF.Floor(zero4.
Y),
2261 (
int)MathF.Floor(zero4.
Z),
2273 for (
int num15 = 0; num15 < 16; num15++) {
2276 for (
int num17 = 0; num17 < num16; num17++) {
2281 for (
int num19 = 0; num19 < num18; num19++) {
2283 (
int)MathF.Floor(zero5.
X),
2284 (
int)MathF.Floor(zero5.
Y),
2285 (
int)MathF.Floor(zero5.
Z),
2297 for (
int num20 = 0; num20 < 16; num20++) {
2300 for (
int num22 = 0; num22 < num21; num22++) {
2305 for (
int num24 = 0; num24 < num23; num24++) {
2307 (
int)MathF.Floor(zero6.
X),
2308 (
int)MathF.Floor(zero6.
Y),
2309 (
int)MathF.Floor(zero6.
Z),
2321 for (
int num25 = 0; num25 < 16; num25++) {
2324 for (
int num27 = 0; num27 < num26; num27++) {
2329 for (
int num29 = 0; num29 < num28; num29++) {
2331 (
int)MathF.Floor(zero7.
X),
2332 (
int)MathF.Floor(zero7.
Y),
2333 (
int)MathF.Floor(zero7.
Z),
2345 for (
int num30 = 0; num30 < 16; num30++) {
2348 for (
int num32 = 0; num32 < num31; num32++) {
2355 for (
int num34 = 0; num34 < num33; num34++) {
2357 (
int)MathF.Floor(zero8.
X),
2358 (
int)MathF.Floor(zero8.
Y),
2359 (
int)MathF.Floor(zero8.
Z),
2371 for (
int num35 = 0; num35 < 16; num35++) {
2374 for (
int num37 = 0; num37 < num36; num37++) {
2381 for (
int num39 = 0; num39 < num38; num39++) {
2383 (
int)MathF.Floor(zero9.
X),
2384 (
int)MathF.Floor(zero9.
Y),
2385 (
int)MathF.Floor(zero9.
Z),
2397 for (
int num40 = 0; num40 < 16; num40++) {
2400 for (
int num42 = 0; num42 < num41; num42++) {
2407 for (
int num44 = 0; num44 < num43; num44++) {
2409 (
int)MathF.Floor(zero10.
X),
2410 (
int)MathF.Floor(zero10.
Y),
2411 (
int)MathF.Floor(zero10.
Z),
2423 for (
int num45 = 0; num45 < 16; num45++) {
2426 for (
int num47 = 0; num47 < num46; num47++) {
2433 for (
int num49 = 0; num49 < num48; num49++) {
2435 (
int)MathF.Floor(zero11.
X),
2436 (
int)MathF.Floor(zero11.
Y),
2437 (
int)MathF.Floor(zero11.
Z),
2449 for (
int num50 = 0; num50 < 16; num50++) {
2452 for (
int num52 = 0; num52 < num51; num52++) {
2459 for (
int num54 = 0; num54 < num53; num54++) {
2461 (
int)MathF.Floor(zero12.
X),
2462 (
int)MathF.Floor(zero12.
Y),
2463 (
int)MathF.Floor(zero12.
Z),
2475 for (
int num55 = 0; num55 < 16; num55++) {
2478 for (
int num57 = 0; num57 < num56; num57++) {
2485 for (
int num59 = 0; num59 < num58; num59++) {
2487 (
int)MathF.Floor(zero13.
X),
2488 (
int)MathF.Floor(zero13.
Y),
2489 (
int)MathF.Floor(zero13.
Z),
2501 for (
int num60 = 0; num60 < 16; num60++) {
2504 for (
int num62 = 0; num62 < num61; num62++) {
2509 for (
int num64 = 0; num64 < num63; num64++) {
2511 (
int)MathF.Floor(zero14.
X),
2512 (
int)MathF.Floor(zero14.
Y),
2513 (
int)MathF.Floor(zero14.
Z),
2525 int[] array = [4, 6, 8];
2526 for (
int num65 = 0; num65 < 4 * array.Length; num65++) {
2528 int num66 = array[num65 / 4];
2529 int num67 = num65 % 2 + 1;
2530 float num68 = num65 % 4 == 2 ? 0.5f : 1f;
2531 bool circular = num65 % 4 >= 2;
2532 int num69 = num65 % 4 == 1 ? num66 * num66 : 2 * num66 * num66;
2533 for (
int num70 = 0; num70 < num69; num70++) {
2535 float num71 = vector15.
Length();
2539 (
int)MathF.Floor(vector15.
X),
2541 (
int)MathF.Floor(vector15.
Y),
2548 (
int)MathF.Floor(vector15.
X),
2550 (
int)MathF.Floor(vector15.
Y),
2560 int[] array2 = [8, 12, 14, 16];
2561 for (
int num73 = 0; num73 < 4 * array2.Length; num73++) {
2563 int num74 = array2[num73 / 4];
2564 int num75 = num74 + 2;
2565 float num76 = num73 % 4 == 2 ? 0.5f : 1f;
2566 bool circular2 = num73 % 4 >= 2;
2567 int num77 = num73 % 4 == 1 ? num74 * num74 : 2 * num74 * num74;
2568 for (
int num78 = 0; num78 < num77; num78++) {
2570 float num79 = vector16.
Length();
2575 (
int)MathF.Floor(vector16.
X),
2577 (
int)MathF.Floor(vector16.
Y),
2584 (
int)MathF.Floor(vector16.
X),
2586 (
int)MathF.Floor(vector16.
Y),
2596 for (
int num82 = 0; num82 < 7; num82++) {
2598 for (
int num83 = 0; num83 < 3; num83++) {
2600 int num84 = 6 + 4 * num82;
2601 int max = 3 + num82 / 3;
2602 int max2 = 9 + num82;
2603 for (
int num85 = 0; num85 < num84; num85++) {
2605 int num87 = random.
UniformInt(8, max2) - 2 * num86;
2609 for (
int num88 = 0; num88 < num87; num88++) {
2611 (
int)MathF.Floor(zero15.
X) - num86 / 2,
2612 (
int)MathF.Floor(zero15.
Y) - num86 / 2,
2613 (
int)MathF.Floor(zero15.
Z) - num86 / 2,
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)
virtual bool IsTransparent_(int value)
virtual bool IsCollidable_(int value)
static FluidBlock[] FluidBlocks
static int SetSubvariant(int data, int face)
static int SetFace(int data, int face)
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 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 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)
Grid2d(int sizeX, int sizeY)
void Set(int x, int y, float value)
float Sample(float x, float y)
float Get(int x, int y, int z)
Grid3d(int sizeX, int sizeY, int sizeZ)
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)
float Sample(float x, float y, float z)
void Set(int x, int y, int z, float value)
void NextBytes(byte[] buffer)
double GetSampleForLargeRange()
int Next(int minValue, int maxValue)
float NormalFloat(float mean, float stddev)
Vector3 UniformVector3(float minLength, float maxLength)
static readonly OldRandom GlobalRandom
Vector3 Vector3(float length)
Vector2 Vector2(float length)
int UniformInt(int min, int max)
float UniformFloat(float min, float max)
Vector2 UniformVector2(float minLength, float maxLength)
Vector3 Vector3(float length, bool spherical=false)
Vector2 UniformVector2(float minLength, float maxLength, bool circular=false)
float NormalFloat(float mean, float stddev)
Vector3 UniformVector3(float minLength, float maxLength, bool spherical=false)
int UniformInt(int min, int max)
static readonly Random GlobalRandom
float UniformFloat(float min, float max)
bool Bool(float probability)
Vector2 Vector2(float length, bool circular=false)
static void CreateBrushes()
static List< TerrainBrush > m_ironBrushes
float CalculateHeight(float x, float z)
static List< TerrainBrush > m_granitePocketBrushes
float CalculateMountainRangeFactor(float x, float z)
static List< TerrainBrush > m_basaltPocketBrushes
float TGShoreFluctuationsScaling
float TGTurbulenceStrength
static List< TerrainBrush > m_clayPocketBrushes
Vector2 m_mountainsOffset
void GenerateGrassAndPlants(TerrainChunk chunk)
void GenerateSurface(TerrainChunk chunk)
float CalculateOceanShoreDistance(float x, float z)
SubsystemTerrain m_subsystemTerrain
static List< TerrainBrush > m_sulphurBrushes
static List< TerrainBrush > m_dirtPocketBrushes
void GeneratePumpkins(TerrainChunk chunk)
void GenerateChunkContentsPass2(TerrainChunk chunk)
void GenerateKelp(TerrainChunk chunk)
static List< TerrainBrush > m_limestonePocketBrushes
float TGTurbulenceTopOffset
void GenerateChunkContentsPass3(TerrainChunk chunk)
void GenerateSeagrass(TerrainChunk chunk)
void GenerateGraves(TerrainChunk chunk)
static List< TerrainBrush > m_saltpeterBrushes
void GenerateTraps(TerrainChunk chunk)
Vector3 FindCoarseSpawnPosition()
virtual void UpdateFluidIsTop(TerrainChunk chunk)
static List< TerrainBrush > m_sandPocketBrushes
static List< TerrainBrush > m_diamondBrushes
void GeneratePockets(TerrainChunk chunk)
int CalculateTemperature(float x, float z)
static List< TerrainBrush > m_waterPocketBrushes
void GenerateChunkContentsPass4(TerrainChunk chunk)
void GenerateSurfaceParameters(TerrainChunk chunk, int x1, int z1, int x2, int z2)
void GenerateTreesAndLogs(TerrainChunk chunk)
static List< TerrainBrush > m_germaniumBrushes
static List< List< TerrainBrush > > m_caveBrushesByType
void GenerateCacti(TerrainChunk chunk)
void GenerateIvy(TerrainChunk chunk)
static List< TerrainBrush > m_magmaPocketBrushes
static TerrainContentsGenerator21()
float CalculateOceanShoreX(float z)
TerrainContentsGenerator21(SubsystemTerrain subsystemTerrain)
void PropagateFluidsDownwards(TerrainChunk chunk)
SubsystemBottomSuckerBlockBehavior m_subsystemBottomSuckerBlockBehavior
float TGOceanSlopeVariation
float TGShoreFluctuations
Vector2 m_temperatureOffset
void GenerateCaves(TerrainChunk chunk)
int CalculateHumidity(float x, float z)
float TGMountainsPercentage
float CalculateOceanShoreZ(float x)
float ScoreSpawnPosition(int x, int z)
void GenerateMinerals(TerrainChunk chunk)
float TGMountainsStrength
static List< TerrainBrush > m_gravelPocketBrushes
static float TGSurfaceMultiplier
void GenerateSnowAndIce(TerrainChunk chunk)
void GenerateBedrockAndAir(TerrainChunk chunk)
static List< TerrainBrush > m_coalBrushes
void GenerateBottomSuckers(TerrainChunk chunk)
WorldSettings m_worldSettings
void GenerateChunkContentsPass1(TerrainChunk chunk)
void GenerateTerrain(TerrainChunk chunk, int x1, int z1, int x2, int z2)
static List< TerrainBrush > m_copperBrushes
static int ExtractContents(int value)
static int ReplaceData(int value, int data)
virtual int GetCellValueFast(int x, int y, int z)
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 readonly Vector2 Zero
static Vector2 Round(Vector2 v)
static Vector2 Normalize(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)