I can cheerfully say that Serge's UV map probably ends at offset 0x28DF. It *may* end at 0x28E7, in which case:
?? ?? ?? ?? ?? ?? ?? ??-U1 V1 U2 V2 U3 V3 U4 V4
would become:
U1 V1 U2 V2 U3 V3 U4 V4-U1 V1 U2 V2 U3 V3 U4 V4 (*NOTE: FORGET THIS. SEE BELOW)
But I'm going to check on that right now. Update in the works.
EDIT: Okay, THIS was unexpected, but I probably should have seen it coming. Within Section 1-2, the following scheme:
-U1 V1 U2 V2 U3 V3 U4 V4 (QUAD 1)
xx xx xx xx xx xx xx xx-U1 V1 U2 V2 U3 V3 U4 V4 (QUAD 2)
yy yy yy yy yy yy yy yy
...operates as follows. The row labeled QUAD 1 maps out a quad on the texture as expected. The 8 bytes labeled xx xx... actually determine color or perhaps shading. When all 8 bytes in the xx xx... range are set to 00, QUAD 1 becomes transparent! Rinse and repeat for QUAD 2 and its associated yy yy...
Here's visual evidence:
In the context of my exposition above, QUAD 1 is labeled "1" in red, both on the magnified texture and Serge's rump (I didn't choose this on purpose, you know. Just business...) while QUAD 2 is labeled "2" in both pics. I essentially changed the yy yy range to 00 bytes, leading to QUAD 2 becoming an open window through Serge's model! QUAD 1 is blacked out because I changed the UV map values to 00 bytes without altering the xx xx... range.
So what does this tell us? It appears that each quad on the texture map is followed by 8 bytes that define that quad's color/shading/transparency on the model. So if we count this "color" data as part of the UV map, then the UV map data terminates upon reaching offset 0x28E7, or the end of Section 1-2.
That came out more complicated than I had hoped; if anyone would like clarification on my findings tonight, just ask.
I'm a bit confuzzled at the prospect of 8 bytes defining color, because I'm used to thinking of colors in terms of 3 bytes: 1 for Red, Green, and Blue each. Why would a color value possibly need 8?
Another thing that's discombobulating my brain at the moment: within the UV map data, some values in the "V" column are FF. Yet the battle textures are 128x252 pixels in WidthxHeight, meaning the max value in the V(Height) direction should be "FB" at the most (for 251 in decimal). Another piece of food for thought: when an FF does occur in a row of UV data, there seems to always be one other FF in another "V" column. Which leaves 6 bytes - enough to map one triangle on the texture. Is it possible that:
xx xx xx xx xx xx xx xx-U1 FF U2 V2 U3 V3 U4 FF
actually means:
xx xx xx xx xx xx xx xx-U1 N/A V1 U2 V2 U3 V3 N/A?
i.e., the "FF" is essentially a "skip me!" value allowing the data alignment to be preserved while directing the GPU to map triangles instead of quads? Is it possible that a single texture could be mapped alternately as quads and triangles?