diff --git a/KeepersCompound.LGS/Database/Chunks/WorldRep.cs b/KeepersCompound.LGS/Database/Chunks/WorldRep.cs index 43e6010..1fba3a1 100644 --- a/KeepersCompound.LGS/Database/Chunks/WorldRep.cs +++ b/KeepersCompound.LGS/Database/Chunks/WorldRep.cs @@ -248,20 +248,19 @@ public class WorldRep : IChunk switch (Bpp) { // 1bpp isn't really supported (does nd dromed even produce it?) - // TODO: seems to be under powered (int conversions rounding down?) case 2: var raw2 = pLayer[idx] + (pLayer[idx + 1] << 8); - var newR = (int)Math.Clamp((raw2 & 31) + r * 31f / 255f, 0, 31); - var newG = (int)Math.Clamp(((raw2 >> 5) & 31) + g * 31f / 255f, 0, 31); - var newB = (int)Math.Clamp(((raw2 >> 10) & 31) + b * 31f / 255f, 0, 31); + var newR = (int)Math.Clamp((raw2 & 31) + r * 32f / 255f, 0, 31); + var newG = (int)Math.Clamp(((raw2 >> 5) & 31) + g * 32f / 255f, 0, 31); + var newB = (int)Math.Clamp(((raw2 >> 10) & 31) + b * 32f / 255f, 0, 31); raw2 = newR + (newG << 5) + (newB << 10); pLayer[idx] = (byte)(raw2 & 0xff); pLayer[idx + 1] = (byte)((raw2 >> 8) & 0xff); break; case 4: - pLayer[idx] = (byte)Math.Clamp(pLayer[idx] + r, 0, 255); + pLayer[idx] = (byte)Math.Clamp(pLayer[idx] + b, 0, 255); pLayer[idx + 1] = (byte)Math.Clamp(pLayer[idx + 1] + g, 0, 255); - pLayer[idx + 2] = (byte)Math.Clamp(pLayer[idx + 2] + b, 0, 255); + pLayer[idx + 2] = (byte)Math.Clamp(pLayer[idx + 2] + r, 0, 255); pLayer[idx + 3] = 255; break; } @@ -287,7 +286,7 @@ public class WorldRep : IChunk c /= ratio; } - AddLight(layer, x, y, c.Z, c.Y, c.X); + AddLight(layer, x, y, c.X, c.Y, c.Z); } public void Reset(Vector3 ambientLight, bool hdr)