diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cccbaf2..4b236b05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ## [Unreleased](https://github.com/LostArtefacts/TR-Rando/compare/V1.9.1...master) - xxxx-xx-xx +- fixed wireframe mode potentially exceeding texture limits and preventing levels from loading (#722) - fixed docile bird monsters causing multiple Laras to spawn in remastered levels (#723) - fixed the incomplete skidoo model in TR2R when it appears anywhere other than Tibetan Foothills (#721) - fixed secrets on triangle portals not triggering in TR3 (#727) diff --git a/TRRandomizerCore/Textures/Wireframing/AbstractTRWireframer.cs b/TRRandomizerCore/Textures/Wireframing/AbstractTRWireframer.cs index 81b283c4..d689af11 100644 --- a/TRRandomizerCore/Textures/Wireframing/AbstractTRWireframer.cs +++ b/TRRandomizerCore/Textures/Wireframing/AbstractTRWireframer.cs @@ -84,7 +84,7 @@ public void Apply(L level, WireframeData data) TRTexturePacker packer = CreatePacker(level); DeleteTextures(packer); - level.ResetUnusedTextures(); + Queue textureSlots = new(level.GetFreeTextureSlots()); TRSize roomSize = GetLargestSize(roomSizes); roomSize.RoundDown(); @@ -107,8 +107,17 @@ public void Apply(L level, WireframeData data) ushort StoreTexture(TRTextileSegment segment) { - level.ObjectTextures.Add(segment.Texture as TRObjectTexture); - return (ushort)(level.ObjectTextures.Count - 1); + if (textureSlots.TryDequeue(out int slot)) + { + level.ObjectTextures[slot] = segment.Texture as TRObjectTexture; + } + else + { + slot = level.ObjectTextures.Count; + level.ObjectTextures.Add(segment.Texture as TRObjectTexture); + } + + return (ushort)slot; } ushort roomTextureIndex = StoreTexture(roomTexture); @@ -134,6 +143,7 @@ ushort StoreTexture(TRTextileSegment segment) ResetMeshTextures(modelRemap, specialTextureRemap); TidyModels(level); SetSkyboxVisible(level); + level.ResetUnusedTextures(); } private void RetainCustomTextures(L level)