From 290075adf92a613ea8b133345aeb7f10b77fcd44 Mon Sep 17 00:00:00 2001 From: BinaryConstruct Date: Thu, 1 Sep 2022 01:11:54 -0500 Subject: [PATCH] support for every known terraria version --- src/TEdit.Tests/Terraria/WorldTests.cs | 14 ++++++++++++ src/TEdit/Terraria/World.FileV1.cs | 31 +++++++++++++++++--------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/TEdit.Tests/Terraria/WorldTests.cs b/src/TEdit.Tests/Terraria/WorldTests.cs index ca608362..4f210931 100644 --- a/src/TEdit.Tests/Terraria/WorldTests.cs +++ b/src/TEdit.Tests/Terraria/WorldTests.cs @@ -183,6 +183,20 @@ public void SaveWorldV1_Terraria1_0_Test(string fileName) var w2 = World.LoadWorld(saveTest, showWarnings: false); } + [Theory] + [InlineData(".\\WorldFiles\\v1.0.5.wld")] + + public void SaveWorldV1_Terraria1_0_5_Test(string fileName) + { + var w = World.LoadWorld(fileName, showWarnings: false); + + var saveTest = fileName + ".test"; + World.Save(w, saveTest, incrementRevision: false, showWarnings: false); + + // essentially, just a save and load test + var w2 = World.LoadWorld(saveTest, showWarnings: false); + } + [Theory] [InlineData(".\\WorldFiles\\v1.3.0.1.wld")] [InlineData(".\\WorldFiles\\v1.3.0.2.wld")] diff --git a/src/TEdit/Terraria/World.FileV1.cs b/src/TEdit/Terraria/World.FileV1.cs index 670d9429..735f9450 100644 --- a/src/TEdit/Terraria/World.FileV1.cs +++ b/src/TEdit/Terraria/World.FileV1.cs @@ -208,7 +208,6 @@ public static void SaveV1(World world, BinaryWriter bw) { Tile curTile = world.Tiles[x, y]; - WriteTileDataToStreamV1(curTile, bw, world.Version, frames); if (version >= 25) @@ -1194,7 +1193,13 @@ public static void WriteTileDataToStreamV1(Tile tile, BinaryWriter bw, uint vers if (tile.IsActive) { bw.Write((byte)tile.Type); - if (version < 72 && + if (version < 28 && tile.Type == (int)(TileType.Torch) || + (version < 40 && tile.Type == (int)TileType.Platform) || + (version < 195 && tile.Type == (int)TileType.WaterCandle)) + { + // skip + } + else if (version < 72 && (tile.Type == 35 || tile.Type == 36 || tile.Type == 170 || tile.Type == 171 || tile.Type == 172)) { bw.Write((Int16)tile.U); @@ -1223,18 +1228,21 @@ public static void WriteTileDataToStreamV1(Tile tile, BinaryWriter bw, uint vers bw.Write(tile.v0_Lit); // legacy hasLight } - if (tile.Wall > 0 && tile.Wall < byte.MaxValue) + if (tile.Wall > 0 && tile.Wall <= byte.MaxValue) { bw.Write(true); bw.Write((byte)tile.Wall); - if (tile.WallColor > 0) + if (version >= 48) { - bw.Write(true); - bw.Write((byte)tile.WallColor); + if (tile.WallColor > 0) + { + bw.Write(true); + bw.Write((byte)tile.WallColor); + } + else + bw.Write(false); } - else - bw.Write(false); } else bw.Write(false); @@ -1554,7 +1562,7 @@ public static void SaveV0(World world, BinaryWriter bw) if (tile.TileColor > 0) { bw.Write(true); - bw.Write(tile.TileColor); + bw.Write((byte)tile.TileColor); } else { @@ -1566,7 +1574,7 @@ public static void SaveV0(World world, BinaryWriter bw) if (version <= 25) { // legacy lights - bw.Write(tile.v0_Lit || tile.Type == 4); + bw.Write(tile.v0_Lit); } if (tile.Wall > 0) @@ -2185,7 +2193,8 @@ public static Tile ReadTileDataFromStreamV1(BinaryReader b, uint version, bool[] { var tile = new Tile(); - if (b.BaseStream.Position == 0x11038) Debugger.Break(); + //if (b.BaseStream.Position == 0x97e50) Debugger.Break(); + //if (b.BaseStream.Position == 0x98010) Debugger.Break(); tile.IsActive = b.ReadBoolean();