Skip to content

Commit

Permalink
support for every known terraria version
Browse files Browse the repository at this point in the history
  • Loading branch information
BinaryConstruct committed Sep 1, 2022
1 parent 28706ef commit 290075a
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
14 changes: 14 additions & 0 deletions src/TEdit.Tests/Terraria/WorldTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
Expand Down
31 changes: 20 additions & 11 deletions src/TEdit/Terraria/World.FileV1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
{
Expand All @@ -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)
Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit 290075a

Please sign in to comment.