I was puzzled for the longest time as to how the GrannyViewer knew how many embedded strings to read for an item's extended data. I was also puzzled by how it knew the data type for those items. I'm not puzzled any longer
Another careful look at the pointers showed the error in my ways. The pointer for an item's extended data always had an unknown of 0x6 (my pointer structure is offsetinsectiondata, unknown, offsetinsectionvalue) and the offsetinsection value made absolutely no sense. Once you know what the unknown value is for it all makes perfect sense
This unknown will now get its proper name!
That unknown is used along with that offsetinsectionvalue to read another set of pointers. These pointers are how the GrannyViewer knows a) how many embedded strings to read and b) what the data type is for those embedded strings. Mystery solved
wow this clears up many things...
Overall I'm very impressed with the GR2 format. It's slick, it's elegant, and it's beautiful from a programmer's perspective!