Here's icp2png. It's a command-line program:
This is a really weird format, I'm glad I actually managed to figure it out. What I have to do is to convert the PNG to raw pixel data, then remove all the alpha values from that (they're all 0xFF anyway), and then I get a specific format that has 4 bytes of what seems to be a header (probably just a magic identifier), then a 0x400 long 32-bit colour palette, followed by the pixel data in 8bpp format. The width and height are in the ICP header before the PNG file.
In my opinion this is a really stupid and weird way to store this format. It takes up more space than necessary, is probably slower to load properly, and does literally nothing but obfuscate it for anybody wanting to extract it.
The only (possible) problem I came across was that width and height don't actually use up all the pixel data. The width is certainly correct (it renders the images properly, and incorrect width would mess them up), but the height doesn't use all the data. However from what I can tell, all it cuts off is just empty useless stuff anyway. Still pretty strange, I don't see why they don't just remove those pixels from the data altogether.
Anyway, enjoy! If anything screws up let me know.
Code:
Usage: icp2png inFile outDir
inFile: The .icp file to convert. Can alternatively be a folder containing the files to convert
outDir: The folder to save the converted files to
This is a really weird format, I'm glad I actually managed to figure it out. What I have to do is to convert the PNG to raw pixel data, then remove all the alpha values from that (they're all 0xFF anyway), and then I get a specific format that has 4 bytes of what seems to be a header (probably just a magic identifier), then a 0x400 long 32-bit colour palette, followed by the pixel data in 8bpp format. The width and height are in the ICP header before the PNG file.
In my opinion this is a really stupid and weird way to store this format. It takes up more space than necessary, is probably slower to load properly, and does literally nothing but obfuscate it for anybody wanting to extract it.
The only (possible) problem I came across was that width and height don't actually use up all the pixel data. The width is certainly correct (it renders the images properly, and incorrect width would mess them up), but the height doesn't use all the data. However from what I can tell, all it cuts off is just empty useless stuff anyway. Still pretty strange, I don't see why they don't just remove those pixels from the data altogether.
Anyway, enjoy! If anything screws up let me know.