Textures, recreate headers, conversions, algorithms and parsing of image files
Bwolna
Posts: 15 Joined: Fri Jun 10, 2022 3:09 pm
Post
by Bwolna » Sat Jun 25, 2022 10:50 pm
How to run jar file from command prompt:
https://stackoverflow.com/questions/577 ... and-prompt You have to install java:
https://www.java.com/en/ Program will extract all sprites that it understands:
Code: Select all
Extract sprites from BL1CMINE.IMB Number of sprites: 1 sprite #00 sprite type 3 Use palette PALT0282.PAL Number of blocks: 2 block #00_00 number of images: 7 image #00_00_00 image dimensions: 164x185 packed size: 13006, unpacked size: 30340 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_00.unpacked" image #00_00_01 image dimensions: 13x32 packed size: 85, unpacked size: 416 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_01.unpacked" image #00_00_02 image dimensions: 13x32 packed size: 82, unpacked size: 416 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_02.unpacked" image #00_00_03 image dimensions: 17x37 packed size: 94, unpacked size: 629 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_03.unpacked" image #00_00_04 image dimensions: 20x15 packed size: 78, unpacked size: 300 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_04.unpacked" image #00_00_05 image dimensions: 21x35 packed size: 131, unpacked size: 735 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_05.unpacked" image #00_00_06 image dimensions: 21x39 packed size: 148, unpacked size: 819 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_06.unpacked" block #00_01 number of images: 7 image #00_01_00 image dimensions: 136x114 ERROR: java.lang.Exception: unpacking !0x20 not implemented! image #00_01_01 image dimensions: 4x4 ERROR: java.lang.Exception: unpacking !0x20 not implemented! image #00_01_02 image dimensions: 4x4 ERROR: java.lang.Exception: unpacking !0x20 not implemented! image #00_01_03 image dimensions: 4x4 ERROR: java.lang.Exception: unpacking !0x20 not implemented! image #00_01_04 image dimensions: 3x3 ERROR: java.lang.Exception: unpacking !0x20 not implemented! image #00_01_05 image dimensions: 1x1 packed size: 2, unpacked size: 1 saved "/test/RR2/BL1CMINE.IMB.sprites/00_01_05.unpacked" image #00_01_06 image dimensions: 1x1 packed size: 2, unpacked size: 1 saved "/test/RR2/BL1CMINE.IMB.sprites/00_01_06.unpacked"
eldomtom2
Posts: 17 Joined: Sat May 21, 2022 5:07 pm
Post
by eldomtom2 » Sun Jun 26, 2022 11:31 am
Thanks, I can extract the files fine using that, but how do I get GBS to open the extracted files?
Bwolna
Posts: 15 Joined: Fri Jun 10, 2022 3:09 pm
Post
by Bwolna » Sun Jun 26, 2022 12:23 pm
Extract image, copy logs to some text file (to use it later):
Code: Select all
image #00_00_00 image dimensions: 164x185 packed size: 13006, unpacked size: 30340 saved "/test/RR2/BL1CMINE.IMB.sprites/00_00_00.unpacked"
In GBS:
File -> Load file -> BL1CMINE.IMB.sprites/00_00_00.unpacked
Set width and height to 164 and 185
select "Grey #1" palette from drop-down list of built-in palettes.
eldomtom2
Posts: 17 Joined: Sat May 21, 2022 5:07 pm
Post
by eldomtom2 » Sun Jun 26, 2022 12:41 pm
Great, I take it you haven't figured out how the palettes work yet?
Bwolna
Posts: 15 Joined: Fri Jun 10, 2022 3:09 pm
Post
by Bwolna » Sun Jun 26, 2022 1:02 pm
Something like this:
Code: Select all
Path sourceFile = Paths.get("/home/owner/test/RR2/PALT0504.PAL"); byte[] rawFile = Files.readAllBytes(sourceFile); int count = readLong(rawFile, 0); for (int i=0; i<count; i++) { byte[] pal = new byte[768]; for (int j=0; j<256; j++) { int color = readWord(rawFile, 4+ 0x23 + i*512 + j*2); int c1 = color & 0x1F; int c2 = (color >>> 5) & 0x1F; int c3 = (color >>> 0xA) & 0x1F; pal[j*3 + 0] = (byte) (c1 << 2); pal[j*3 + 1] = (byte) (c2 << 2); pal[j*3 + 2] = (byte) (c3 << 2); } Path newFile = Paths.get(sourceFile.toString() + "." + i + ".pal"); Files.write(newFile, pal, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); } } }
If you know what picture could be used to find which of colors is red-green-blue, write here.
eldomtom2
Posts: 17 Joined: Sat May 21, 2022 5:07 pm
Post
by eldomtom2 » Sun Jun 26, 2022 3:38 pm
Here's BL1SHEEP.IMB in-game. Is this the sort of thing you're looking for?
rrt2sheepfarm.png
Bwolna
Posts: 15 Joined: Fri Jun 10, 2022 3:09 pm
Post
by Bwolna » Sun Jun 26, 2022 4:24 pm
Code: Select all
Extract sprites from BL1SHEEP.IMB Number of sprites: 1 sprite #00 sprite type 3 Use palette PALT0239.PAL ...
Code: Select all
Convert palettes from PALT0239.PAL Number of palettes: 4 palette #00 saved "/home/owner/test/RR2/2/PALT0239.PAL.palettes/00.pal" palette #01 saved "/home/owner/test/RR2/2/PALT0239.PAL.palettes/01.pal" palette #02 saved "/home/owner/test/RR2/2/PALT0239.PAL.palettes/02.pal" palette #03 saved "/home/owner/test/RR2/2/PALT0239.PAL.palettes/03.pal"
I don't how the game chooses one from these four palettes, but when I selected "00.pal" in GBS the image looks similar to your example. For other files you should try all extracted palettes to choose best match.
eldomtom2
Posts: 17 Joined: Sat May 21, 2022 5:07 pm
Post
by eldomtom2 » Sun Jun 26, 2022 8:35 pm
That seems to work well, thanks a lot. I think the different palettes are for when you build buildings in the game. I'll let you know if I encounter any other problems. Edit: My only comment is that it would be nice if you could support whatever 0x20 is.
eldomtom2
Posts: 17 Joined: Sat May 21, 2022 5:07 pm
Post
by eldomtom2 » Mon Jun 27, 2022 8:13 pm
I'm not sure if this helps, but I'm fairly certain the sprites that produce the "unpacking !0x20 not implemented" error are the ones with transparency.
Bwolna
Posts: 15 Joined: Fri Jun 10, 2022 3:09 pm
Post
by Bwolna » Sun Jul 17, 2022 5:23 pm
eldomtom2 wrote: but I'm fairly certain the sprites that produce the "unpacking !0x20 not implemented" error are the ones with transparency.
Added !0x20 and 0x20 branches to sprite extractor tool.
Sprites with 0x20 are not used when game works in 16-bit mode, and I did not found anything meaningful encoded with this type of compression.
Contrary, !0x20 are used a lot for compressing animated parts of buildings and transparent parts of user interface.
OLD:
Code: Select all
Sprite unpacker for Railroad Tycoon II Extract sprites from YEAREND.IMB Number of sprites: 8 sprite #00 sprite type 3 Use palette PALT0020.PAL block #00_00 image #00_00_00 image dimensions: 509x597 ERROR: java.lang.Exception: unpacking !0x20 not implemented! ...
NEW:
Code: Select all
Sprite unpacker for Railroad Tycoon II, ver. 20220717 Extract sprites from YEAREND.IMB Number of sprites: 8 sprite #00 sprite type 3 Use palette PALT0020.PAL block #00_00 image #00_00_00 image dimensions: 509x597 image position: 12,0 packed size: 242580, unpacked size: 303873 saved "/home/owner/test/RR2/9/YEAREND.IMB.sprites/00_00_00.unpacked" ...
eldomtom2
Posts: 17 Joined: Sat May 21, 2022 5:07 pm
Post
by eldomtom2 » Thu Jul 21, 2022 3:34 pm
It works perfectly now, thanks a lot for all your hard work!