Okay, I think I've divined the rules by which these negative pointers should be interpreted. Judging from everything I've seen so far, the rule set is:
*If the pointer value ends in an 8, divide by 8 to get the number of positions backward in the non-UV data
*If the pointer value ends in B0, divide by 16.
*If the pointer value ends in D0, divide by 16.
*If the pointer value ends in E0, divide by 8.
*If the pointer value ends in F0, divide by 16.
I suppose we could insert "If the pointer value ends in C0, divide by 8" into the blank line to fill in a pattern. But does anyone have a guess as to why this is so? Are these rules based on a mathematical principle of some sort, or does it have something to do with the way the GPU/GTE processes information?
Anyway, let's run through Quad B's first two pointers based on these rules.
First Pointer: address 0x1950, value 0xFFD0.0xFFD0 = -48, /16 = 3 positions back...
->address 0x1942, value 0xFED0 = -304, /16 = 19 positions back...
-->address 0x18F4, value 0xFFE8 = -24, /8 = 3 positions back...
--->address 0x18E6, value 0x0880. Just what we want! Yay!
Second Pointer: address 0x1952, value 0xFEB0.0xFEB0 = -336, /16 = 21 positions back...
->address 0x1900, value 0xFFF0 = -16, /16 = 1 position back...
-->address 0x18F6, value 0xFF58 = -168, /8 = 21 positions back...
--->address 0x18A4, value 0x0858. Just what we want! Yay!
It doesn't show up in this example, but we need to interpret 0xFFE0 as being divisible by 8 in order to preserve the functionality of the belt buckle pointer we saw at address 0x10E4 here:
http://img339.imageshack.us/img339/3926/bucklepointersor4.gifIf others can help me theoretically determine why the negative pointers may function this way (some divisble by 16, others by 8 ), we'll be ready to move onto the search for bone data soon. I'm not sure
what the heck we're going to do with the positive pointers, because those seem to be going even more haywire.