From 4c8f956fefa81bc5ace50a57389296c634670846 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 15 Jul 2025 14:59:58 -0400 Subject: [PATCH] Fixed colored wall data reset --- core/src/mindustry/io/SaveVersion.java | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index b6d55a6814..d05c91f501 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -322,11 +322,14 @@ public abstract class SaveVersion extends SaveFileReader{ //new data format (bit 3): 7 bytes (3x block-specific bytes + 1x 4-byte extra data int) boolean hadDataOld = (packedCheck & 2) != 0, hadDataNew = (packedCheck & 4) != 0; + byte data = 0, floorData = 0, overlayData = 0; + int extraData = 0; + if(hadDataNew){ - tile.data = stream.readByte(); - tile.floorData = stream.readByte(); - tile.overlayData = stream.readByte(); - tile.extraData = stream.readInt(); + data = stream.readByte(); + floorData = stream.readByte(); + overlayData = stream.readByte(); + extraData = stream.readInt(); } if(hadEntity){ @@ -338,6 +341,14 @@ public abstract class SaveVersion extends SaveFileReader{ tile.setBlock(block); } + //must be assigned after setBlock, because that can reset data + if(hadDataNew){ + tile.data = data; + tile.floorData = floorData; + tile.overlayData = overlayData; + tile.extraData = extraData; + } + if(hadEntity){ if(isCenter){ //only read entity for center blocks if(block.hasBuilding()){ @@ -357,8 +368,8 @@ public abstract class SaveVersion extends SaveFileReader{ context.onReadBuilding(); } }else if(hadDataOld || hadDataNew){ //never read consecutive blocks if there's any kind of data - tile.setBlock(block); if(hadDataOld){ + tile.setBlock(block); //the old data format was only read in the case where there is no building, and only contained a single byte tile.data = stream.readByte(); }