Skip to content

Commit 45cfe2b

Browse files
committed
Fix TR4R tests
Adjusts TR4 object texture reading to observe UV values as some in TR4R patch 1 onwards differ from auto-generated values on output compared with original versions.
1 parent ac80c4e commit 45cfe2b

4 files changed

Lines changed: 19 additions & 21 deletions

File tree

TRLevelControl/Build/TRTextureBuilder.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,11 @@ private TRObjectTexture Read(TRLevelReader reader, int index, bool remastered)
147147

148148
if (_version >= TRGameVersion.TR4)
149149
{
150-
uint originalU = reader.ReadUInt32();
151-
uint originalV = reader.ReadUInt32();
152-
_observer?.OnOrignalUVRead(index, new(originalU, originalV));
153-
154-
// Width-1 and Height-1
155-
reader.ReadUInt32();
156-
reader.ReadUInt32();
150+
// These values are U,V,W-1 and H-1 but are seemingly discarded in-game as altering has no effect.
151+
// Width and height generally match actual tex size in all but a couple of cases in TR4R.
152+
// Just observe for tests.
153+
var uv = reader.ReadUInt32s(4);
154+
_observer?.OnOriginalUVRead(index, uv);
157155

158156
if (_version == TRGameVersion.TR5 && !remastered)
159157
{
@@ -206,16 +204,16 @@ private void Write(TRLevelWriter writer, TRObjectTexture texture, int index, boo
206204

207205
if (_version >= TRGameVersion.TR4)
208206
{
209-
// Discarded in game, so only written back as OG for tests.
210-
Tuple<uint, uint> originalUV = _observer?.GetOrignalUV(index) ?? new(0, 0);
211-
writer.Write(originalUV.Item1);
212-
writer.Write(originalUV.Item2);
213-
214207
Size size = texture.Size;
208+
var uv = _observer?.GetOriginalUV(index)
209+
?? [0, 0, (uint)size.Width - 1, (uint)size.Height - 1];
210+
writer.Write(uv[0]);
211+
writer.Write(uv[1]);
212+
215213
if (_version == TRGameVersion.TR4 || remastered)
216214
{
217-
writer.Write((uint)(size.Width - 1));
218-
writer.Write((uint)(size.Height - 1));
215+
writer.Write(uv[2]);
216+
writer.Write(uv[3]);
219217
}
220218
else
221219
{

TRLevelControl/ITRLevelObserver.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public interface ITRLevelObserver
3030
List<short> GetFramePadding(int animIndex, int frameIndex);
3131
void OnBadOverlapRead(ushort value);
3232
ushort? GetBadOverlap();
33-
void OnOrignalUVRead(int index, Tuple<uint, uint> uv);
34-
Tuple<uint, uint> GetOrignalUV(int index);
33+
void OnOriginalUVRead(int index, uint[] uv);
34+
uint[] GetOriginalUV(int index);
3535
void OnFlybyIndexRead(byte flybySequence, byte cameraIndex);
3636
List<byte> GetFlybyIndices(byte flybySequence);
3737
void OnSampleIndicesRead(uint[] sampleIndices);

TRLevelControlTests/Base/Observers/ObserverBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ public virtual void OnBadOverlapRead(ushort value)
8585
public virtual ushort? GetBadOverlap()
8686
=> null;
8787

88-
public virtual void OnOrignalUVRead(int index, Tuple<uint, uint> uv)
88+
public virtual void OnOriginalUVRead(int index, uint[] uv)
8989
{ }
9090

91-
public virtual Tuple<uint, uint> GetOrignalUV(int index)
91+
public virtual uint[] GetOriginalUV(int index)
9292
=> null;
9393

9494
public virtual void OnSampleIndicesRead(uint[] sampleIndices)

TRLevelControlTests/Base/Observers/TR4Observer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class TR4Observer : TR3Observer
1111
private readonly Dictionary<uint, List<byte>> _meshPadding = new();
1212
private readonly Dictionary<int, ushort> _badAnimCmdCounts = new();
1313
private readonly Dictionary<int, byte> _emptyAnimFrameSizes = new();
14-
private readonly Dictionary<int, Tuple<uint, uint>> _originalUV = new();
14+
private readonly Dictionary<int, uint[]> _originalUV = new();
1515
private readonly Dictionary<byte, List<byte>> _flybyIndices = new();
1616

1717
private uint[] _sampleIndices;
@@ -127,12 +127,12 @@ public override List<byte> GetFlybyIndices(byte flybySequence)
127127
return _flybyIndices.ContainsKey(flybySequence) ? _flybyIndices[flybySequence] : null;
128128
}
129129

130-
public override void OnOrignalUVRead(int index, Tuple<uint, uint> uv)
130+
public override void OnOriginalUVRead(int index, uint[] uv)
131131
{
132132
_originalUV[index] = uv;
133133
}
134134

135-
public override Tuple<uint, uint> GetOrignalUV(int index)
135+
public override uint[] GetOriginalUV(int index)
136136
{
137137
return _originalUV.ContainsKey(index) ? _originalUV[index] : null;
138138
}

0 commit comments

Comments
 (0)