I have just registered to get some more information about cived which source code I have been looking into to get better understanding of the Civilization. Great work darkpanda, really appreciate you work although the code sometimes is difficult to grasp. Hope you can answer some of my question. In the LZWDecoder's parseByteStreamToIndexes you are reading bytes in little endian mode and extracting only first 9 bits (mask 511dec), but I cannot understand why after first 256 bytes you switch to extracting 10 bits (mask 1023dec). Similar operation, switch to reading 11 bits happens at byte 512. Is this some kind of non standard LZW or optimization you did? Please elaborate if you can.