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

◆ LoadMapVersion2()

static void Terraria.Map.MapHelper.LoadMapVersion2 ( BinaryReader fileIO,
int release )
inlinestatic

Definition at line 3387 of file MapHelper.cs.

3388 {
3389 //IL_0388: Unknown result type (might be due to invalid IL or missing references)
3390 //IL_0392: Expected O, but got Unknown
3391 if (release >= 135)
3392 {
3393 Main.MapFileMetadata = FileMetadata.Read(fileIO, FileType.Map);
3394 }
3395 else
3396 {
3397 Main.MapFileMetadata = FileMetadata.FromCurrentSettings(FileType.Map);
3398 }
3399 fileIO.ReadString();
3400 int num = fileIO.ReadInt32();
3401 int num2 = fileIO.ReadInt32();
3402 int num3 = fileIO.ReadInt32();
3403 if (num != Main.worldID || num3 != Main.maxTilesX || num2 != Main.maxTilesY)
3404 {
3405 throw new Exception("Map meta-data is invalid.");
3406 }
3407 short num4 = fileIO.ReadInt16();
3408 short num5 = fileIO.ReadInt16();
3409 short num6 = fileIO.ReadInt16();
3410 short num7 = fileIO.ReadInt16();
3411 short num8 = fileIO.ReadInt16();
3412 short num9 = fileIO.ReadInt16();
3413 bool[] array = new bool[num4];
3414 byte b = 0;
3415 byte b2 = 128;
3416 for (int i = 0; i < num4; i++)
3417 {
3418 if (b2 == 128)
3419 {
3420 b = fileIO.ReadByte();
3421 b2 = 1;
3422 }
3423 else
3424 {
3425 b2 <<= 1;
3426 }
3427 if ((b & b2) == b2)
3428 {
3429 array[i] = true;
3430 }
3431 }
3432 bool[] array2 = new bool[num5];
3433 b = 0;
3434 b2 = 128;
3435 for (int i = 0; i < num5; i++)
3436 {
3437 if (b2 == 128)
3438 {
3439 b = fileIO.ReadByte();
3440 b2 = 1;
3441 }
3442 else
3443 {
3444 b2 <<= 1;
3445 }
3446 if ((b & b2) == b2)
3447 {
3448 array2[i] = true;
3449 }
3450 }
3451 byte[] array3 = new byte[num4];
3452 ushort num10 = 0;
3453 for (int i = 0; i < num4; i++)
3454 {
3455 if (array[i])
3456 {
3457 array3[i] = fileIO.ReadByte();
3458 }
3459 else
3460 {
3461 array3[i] = 1;
3462 }
3463 num10 += array3[i];
3464 }
3465 byte[] array4 = new byte[num5];
3466 ushort num11 = 0;
3467 for (int i = 0; i < num5; i++)
3468 {
3469 if (array2[i])
3470 {
3471 array4[i] = fileIO.ReadByte();
3472 }
3473 else
3474 {
3475 array4[i] = 1;
3476 }
3477 num11 += array4[i];
3478 }
3479 ushort[] array5 = new ushort[num10 + num11 + num6 + num7 + num8 + num9 + 2];
3480 array5[0] = 0;
3481 ushort num12 = 1;
3482 ushort num13 = 1;
3483 ushort num14 = num13;
3484 for (int i = 0; i < TileID.Count; i++)
3485 {
3486 if (i < num4)
3487 {
3488 int num15 = array3[i];
3489 int num16 = tileOptionCounts[i];
3490 for (int j = 0; j < num16; j++)
3491 {
3492 if (j < num15)
3493 {
3494 array5[num13] = num12;
3495 num13++;
3496 }
3497 num12++;
3498 }
3499 }
3500 else
3501 {
3502 num12 += (ushort)tileOptionCounts[i];
3503 }
3504 }
3505 ushort num17 = num13;
3506 for (int i = 0; i < WallID.Count; i++)
3507 {
3508 if (i < num5)
3509 {
3510 int num18 = array4[i];
3511 int num19 = wallOptionCounts[i];
3512 for (int k = 0; k < num19; k++)
3513 {
3514 if (k < num18)
3515 {
3516 array5[num13] = num12;
3517 num13++;
3518 }
3519 num12++;
3520 }
3521 }
3522 else
3523 {
3524 num12 += (ushort)wallOptionCounts[i];
3525 }
3526 }
3527 ushort num20 = num13;
3528 for (int i = 0; i < 4; i++)
3529 {
3530 if (i < num6)
3531 {
3532 array5[num13] = num12;
3533 num13++;
3534 }
3535 num12++;
3536 }
3537 ushort num21 = num13;
3538 for (int i = 0; i < 256; i++)
3539 {
3540 if (i < num7)
3541 {
3542 array5[num13] = num12;
3543 num13++;
3544 }
3545 num12++;
3546 }
3547 ushort num22 = num13;
3548 for (int i = 0; i < 256; i++)
3549 {
3550 if (i < num8)
3551 {
3552 array5[num13] = num12;
3553 num13++;
3554 }
3555 num12++;
3556 }
3557 ushort num23 = num13;
3558 for (int i = 0; i < 256; i++)
3559 {
3560 if (i < num9)
3561 {
3562 array5[num13] = num12;
3563 num13++;
3564 }
3565 num12++;
3566 }
3567 ushort num24 = num13;
3568 array5[num13] = num12;
3569 BinaryReader binaryReader = ((release < 93) ? new BinaryReader(fileIO.BaseStream) : new BinaryReader((Stream)new DeflateStream(fileIO.BaseStream, (CompressionMode)1)));
3570 for (int l = 0; l < Main.maxTilesY; l++)
3571 {
3572 float num25 = (float)l / (float)Main.maxTilesY;
3573 Main.statusText = Lang.gen[67].Value + " " + (int)(num25 * 100f + 1f) + "%";
3574 for (int m = 0; m < Main.maxTilesX; m++)
3575 {
3576 byte b3 = binaryReader.ReadByte();
3577 byte b4 = (byte)(((b3 & 1) == 1) ? binaryReader.ReadByte() : 0);
3578 if ((b4 & 1) == 1)
3579 {
3580 binaryReader.ReadByte();
3581 }
3582 byte b5 = (byte)((b3 & 0xE) >> 1);
3583 bool flag;
3584 switch (b5)
3585 {
3586 case 0:
3587 flag = false;
3588 break;
3589 case 1:
3590 case 2:
3591 case 7:
3592 flag = true;
3593 break;
3594 case 3:
3595 case 4:
3596 case 5:
3597 flag = false;
3598 break;
3599 case 6:
3600 flag = false;
3601 break;
3602 default:
3603 flag = false;
3604 break;
3605 }
3606 ushort num26 = (ushort)(flag ? (((b3 & 0x10) != 16) ? binaryReader.ReadByte() : binaryReader.ReadUInt16()) : 0);
3607 byte b6 = (((b3 & 0x20) != 32) ? byte.MaxValue : binaryReader.ReadByte());
3608 int num27 = (byte)((b3 & 0xC0) >> 6) switch
3609 {
3610 0 => 0,
3611 1 => binaryReader.ReadByte(),
3612 2 => binaryReader.ReadInt16(),
3613 _ => 0,
3614 };
3615 switch (b5)
3616 {
3617 case 0:
3618 m += num27;
3619 continue;
3620 case 1:
3621 num26 += num14;
3622 break;
3623 case 2:
3624 num26 += num17;
3625 break;
3626 case 3:
3627 case 4:
3628 case 5:
3629 {
3630 int num28 = b5 - 3;
3631 if ((b4 & 0x40) == 64)
3632 {
3633 num28 = 3;
3634 }
3635 num26 += (ushort)(num20 + num28);
3636 break;
3637 }
3638 case 6:
3639 if ((double)l < Main.worldSurface)
3640 {
3641 ushort num29 = (ushort)((double)num7 * ((double)l / Main.worldSurface));
3642 num26 += (ushort)(num21 + num29);
3643 }
3644 else
3645 {
3646 num26 = num24;
3647 }
3648 break;
3649 case 7:
3650 num26 = ((!((double)l < Main.rockLayer)) ? ((ushort)(num26 + num23)) : ((ushort)(num26 + num22)));
3651 break;
3652 }
3653 MapTile tile = MapTile.Create(array5[num26], b6, (byte)((uint)(b4 >> 1) & 0x1Fu));
3654 Main.Map.SetTile(m, l, ref tile);
3655 if (b6 == byte.MaxValue)
3656 {
3657 while (num27 > 0)
3658 {
3659 m++;
3660 Main.Map.SetTile(m, l, ref tile);
3661 num27--;
3662 }
3663 continue;
3664 }
3665 while (num27 > 0)
3666 {
3667 m++;
3668 tile = tile.WithLight(binaryReader.ReadByte());
3669 Main.Map.SetTile(m, l, ref tile);
3670 num27--;
3671 }
3672 }
3673 }
3674 binaryReader.Close();
3675 }
virtual byte ReadByte()
virtual string ReadString()
virtual ushort ReadUInt16()
virtual int ReadInt32()
virtual Stream BaseStream
virtual void Close()
virtual short ReadInt16()
static readonly ushort Count
Definition TileID.cs:1698
static readonly ushort Count
Definition WallID.cs:753
static FileMetadata Read(BinaryReader reader, FileType expectedType)
static FileMetadata FromCurrentSettings(FileType type)
static int[] tileOptionCounts
Definition MapHelper.cs:176
static int[] wallOptionCounts
Definition MapHelper.cs:178

References System.array, System.IO.BinaryReader.BaseStream, System.IO.BinaryReader.Close(), Terraria.ID.TileID.Count, Terraria.ID.WallID.Count, Terraria.Map.MapTile.Create(), Terraria.IO.FileMetadata.FromCurrentSettings(), Terraria.Lang.gen, Terraria.Main.Map, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.IO.FileMetadata.Read(), System.IO.BinaryReader.ReadByte(), System.IO.BinaryReader.ReadInt16(), System.IO.BinaryReader.ReadInt32(), System.IO.BinaryReader.ReadString(), System.IO.BinaryReader.ReadUInt16(), Terraria.Main.rockLayer, Terraria.Map.MapHelper.tileOptionCounts, Terraria.Map.MapHelper.wallOptionCounts, Terraria.Map.MapTile.WithLight(), Terraria.Main.worldID, and Terraria.Main.worldSurface.

Referenced by Terraria.Map.WorldMap.Load().