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

◆ SaveWorldTiles()

static int Terraria.IO.WorldFile.SaveWorldTiles ( BinaryWriter writer)
inlinestatic

Definition at line 1358 of file WorldFile.cs.

1359 {
1360 byte[] array = new byte[16];
1361 for (int i = 0; i < Main.maxTilesX; i++)
1362 {
1363 float num = (float)i / (float)Main.maxTilesX;
1364 Main.statusText = Lang.gen[49].Value + " " + (int)(num * 100f + 1f) + "%";
1365 int num2;
1366 for (num2 = 0; num2 < Main.maxTilesY; num2++)
1367 {
1368 Tile tile = Main.tile[i, num2];
1369 int num3 = 4;
1370 byte b2;
1371 byte b;
1372 byte b3;
1373 byte b4 = (b3 = (b2 = (b = 0)));
1374 bool flag = false;
1375 if (tile.active())
1376 {
1377 flag = true;
1378 }
1379 if (flag)
1380 {
1381 b4 = (byte)(b4 | 2u);
1382 array[num3] = (byte)tile.type;
1383 num3++;
1384 if (tile.type > 255)
1385 {
1386 array[num3] = (byte)(tile.type >> 8);
1387 num3++;
1388 b4 = (byte)(b4 | 0x20u);
1389 }
1390 if (Main.tileFrameImportant[tile.type])
1391 {
1392 array[num3] = (byte)((uint)tile.frameX & 0xFFu);
1393 num3++;
1394 array[num3] = (byte)((tile.frameX & 0xFF00) >> 8);
1395 num3++;
1396 array[num3] = (byte)((uint)tile.frameY & 0xFFu);
1397 num3++;
1398 array[num3] = (byte)((tile.frameY & 0xFF00) >> 8);
1399 num3++;
1400 }
1401 if (tile.color() != 0)
1402 {
1403 b2 = (byte)(b2 | 8u);
1404 array[num3] = tile.color();
1405 num3++;
1406 }
1407 }
1408 if (tile.wall != 0)
1409 {
1410 b4 = (byte)(b4 | 4u);
1411 array[num3] = (byte)tile.wall;
1412 num3++;
1413 if (tile.wallColor() != 0)
1414 {
1415 b2 = (byte)(b2 | 0x10u);
1416 array[num3] = tile.wallColor();
1417 num3++;
1418 }
1419 }
1420 if (tile.liquid != 0)
1421 {
1422 if (!tile.shimmer())
1423 {
1424 b4 = (tile.lava() ? ((byte)(b4 | 0x10u)) : ((!tile.honey()) ? ((byte)(b4 | 8u)) : ((byte)(b4 | 0x18u))));
1425 }
1426 else
1427 {
1428 b2 = (byte)(b2 | 0x80u);
1429 b4 = (byte)(b4 | 8u);
1430 }
1431 array[num3] = tile.liquid;
1432 num3++;
1433 }
1434 if (tile.wire())
1435 {
1436 b3 = (byte)(b3 | 2u);
1437 }
1438 if (tile.wire2())
1439 {
1440 b3 = (byte)(b3 | 4u);
1441 }
1442 if (tile.wire3())
1443 {
1444 b3 = (byte)(b3 | 8u);
1445 }
1446 int num4 = (tile.halfBrick() ? 16 : ((tile.slope() != 0) ? (tile.slope() + 1 << 4) : 0));
1447 b3 |= (byte)num4;
1448 if (tile.actuator())
1449 {
1450 b2 = (byte)(b2 | 2u);
1451 }
1452 if (tile.inActive())
1453 {
1454 b2 = (byte)(b2 | 4u);
1455 }
1456 if (tile.wire4())
1457 {
1458 b2 = (byte)(b2 | 0x20u);
1459 }
1460 if (tile.wall > 255)
1461 {
1462 array[num3] = (byte)(tile.wall >> 8);
1463 num3++;
1464 b2 = (byte)(b2 | 0x40u);
1465 }
1466 if (tile.invisibleBlock())
1467 {
1468 b = (byte)(b | 2u);
1469 }
1470 if (tile.invisibleWall())
1471 {
1472 b = (byte)(b | 4u);
1473 }
1474 if (tile.fullbrightBlock())
1475 {
1476 b = (byte)(b | 8u);
1477 }
1478 if (tile.fullbrightWall())
1479 {
1480 b = (byte)(b | 0x10u);
1481 }
1482 int num5 = 3;
1483 if (b != 0)
1484 {
1485 b2 = (byte)(b2 | 1u);
1486 array[num5] = b;
1487 num5--;
1488 }
1489 if (b2 != 0)
1490 {
1491 b3 = (byte)(b3 | 1u);
1492 array[num5] = b2;
1493 num5--;
1494 }
1495 if (b3 != 0)
1496 {
1497 b4 = (byte)(b4 | 1u);
1498 array[num5] = b3;
1499 num5--;
1500 }
1501 short num6 = 0;
1502 int num7 = num2 + 1;
1503 int num8 = Main.maxTilesY - num2 - 1;
1504 while (num8 > 0 && tile.isTheSameAs(Main.tile[i, num7]) && TileID.Sets.AllowsSaveCompressionBatching[tile.type])
1505 {
1506 num6++;
1507 num8--;
1508 num7++;
1509 }
1510 num2 += num6;
1511 if (num6 > 0)
1512 {
1513 array[num3] = (byte)((uint)num6 & 0xFFu);
1514 num3++;
1515 if (num6 > 255)
1516 {
1517 b4 = (byte)(b4 | 0x80u);
1518 array[num3] = (byte)((num6 & 0xFF00) >> 8);
1519 num3++;
1520 }
1521 else
1522 {
1523 b4 = (byte)(b4 | 0x40u);
1524 }
1525 }
1526 array[num5] = b4;
1527 writer.Write(array, num5, num3 - num5);
1528 }
1529 }
1530 return (int)writer.BaseStream.Position;
1531 }
static bool[] AllowsSaveCompressionBatching
Definition TileID.cs:87

References Terraria.Tile.active(), Terraria.Tile.actuator(), Terraria.ID.TileID.Sets.AllowsSaveCompressionBatching, System.array, Terraria.Tile.color(), Terraria.Tile.frameX, Terraria.Tile.frameY, Terraria.Tile.fullbrightBlock(), Terraria.Tile.fullbrightWall(), Terraria.Lang.gen, Terraria.Tile.halfBrick(), Terraria.Tile.honey(), Terraria.Tile.inActive(), Terraria.Tile.invisibleBlock(), Terraria.Tile.invisibleWall(), Terraria.Tile.isTheSameAs(), Terraria.Tile.lava(), Terraria.Tile.liquid, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Tile.shimmer(), Terraria.Tile.slope(), Terraria.Main.tile, Terraria.Main.tileFrameImportant, Terraria.Tile.type, Terraria.Tile.wall, Terraria.Tile.wallColor(), Terraria.Tile.wire(), Terraria.Tile.wire2(), Terraria.Tile.wire3(), Terraria.Tile.wire4(), and System.writer.

Referenced by Terraria.IO.WorldFile.SaveWorld_Version2().