XPK graphics format: B0 01
These start out looking like the usual XPKs. In UI.prx, the first 8
XPKs are the normal kind. Then there are 14 XUIs, and then a lot more
XPKs. This second set of XPKs are the weird kind.
Here's the start of the first one of those:
58 50 4B 00 28 02 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 2A 20 04 00
OK, sure. That looks normal. This resource is 4202A bytes long.
A5 7E 70 01
B0 01 00 27 00 00 00 10 00 00 02 80
B0 01! The normal ones are B0 02.That tells us which format we're
looking at. And 39 images (27 in hex). Now let's start treating the
position at which we found A5 as being position 0, the beginning of the
But this "10 00" is screwy. It's supposed to tell us where the palette
ends. This one indicates the palette should end at position 11, in hex.
The palette cannot end at 11. 11 is the end of THIS section! That's
because there is no palette.
I never knew what the last two bytes of this section were for in a
regular XPK. Here they appear to tell us where we will find the end of
the section coming up. That is, the beginning of the section AFTER the
next section is at position 280, hex.
No palette. What IS next, then? Some divider-sized entries, 39 of them
in this case.
"Single player" unhighlighted: 00 00 00 00 00 E0 00
36 00 2F 00 12 00 8F 00 1B
"Single player" highlighted: 00 00 00 00 00 E0 00 36
00 2F 00 12 00 8F 00 1B
"Single player" clicked: 00 00 00 00 00 E0 00 36 00
28 00 0B 00 97 00 23
"Multiplayer" unhighlighted: 00 00 00 00 00 E0 00 36
00 3C 00 12 00 75 00 1B
"Multiplayer" highlighted: 00 00 00 00 00 E0 00 36 00
3C 00 12 00 75 00 1B
Here are some of them, in order of appearance.
They all start with:
00 00 00 00 00 E0 00 36 00
and I have no idea what the importance of that is.
The 9th and 10th bytes are horizontal offset, and the 11th and 12th are
The final 4 bytes are the dimensions of the image.
You may notice that there is no image number anywhere.
Then there is a series of 4-byte entries, ordered by ascending value.
There are 39 of them. They tell us where the beginning of each image
within this XPK is, relative to the position of the beginning of the
series, like in an xpk that is being modified by an XMV.
The first one in this case is 00 00 00 9C. The first image begins in 9c
minus 4 bytes.
The next one is 00 00 24 CE. The second image begins in 24CE minus 8
And so on.
This means that our list of 39 4-byte entries is 9C bytes long. It is
possible to have multiple entries that have the same value, which means
that the image data is 0 bytes long. Be careful with that; it does
happen in Editor.PRX.
At the end of the 9C-byte-long section, we have:
The beginning of the first image! Each line starts with a wx yz which
indicates how many bytes follow before the line ends, divided by two.
It's much like the other kind of XPK.
So, this line's wx yz is 00 4C. that means that it is 2*76=152 (dec)
bytes long, not including the wx yz.
Instead of a palette, each individual pixel is defined, in order of
appearance, from left to right, by two bytes,
using the same format as the colours in the palettes in the B0 02 XPK
files. There's just one wrinkle.
7F FF (255 r, 251 g, 255 b) is the highest you can go before things
start getting weird.
wx yz ,where w>7, will draw yz + f(x) blank pixels (f(x) defined
below), and the next pixel will have altered alpha. If this puts its
position off the screen, it will wrap around the screen and end up 1
pixel lower. There does NOT have to be a colour defined in the next 2
bytes. For example, a line can end with one of these, in which case if
you looked at the next two bytes for a colour, you'd read the length of
the next line instead. So, check to see if you're at the end of a line
before you go looking for a colour after one of these. The first pixel
of the next line will not be affected. The purpose of doing this would
be to have a blank row of pixels.
Alpha contribution in decimal (out of 255) for values of w:
f(x) in decimal, for values of x in hexadecimal:
alpha contribution from x:
As in a B0 02 XPK, you keep reading the data and making images until
you reach the end of this resource.