Hello DarkN3mo!
Yes, I was able to access the internal data structure of the bobs. Which means data like x,y-position, image number, the values used in Set Bob, a pointer to the stored background image, etc.
So first and foremost the bobs forms a linked list: the first four bytes in the bob is a pointer to the next bob (zero if there are no more bobs). The order in which the bobs appear in the list is the same as the order they are drawn on the screen - usually this means in ascending order with respect to bob number, unless
Priority On has been used. The bob data itself it could vary a bit depending on the version of amos being used, so to find a particular piece of data one should consult the appropriate version of the amos source code, or one could try to figure it out experimentally in amos.
I've found only one use for this though. However, it's a pretty powerful one: It's based on the fact that the address
Areg(5)-6172 contains a zero if and only if all bobs are off. This means that if we have some bobs defined then
Areg(5)-6172 will contain a non-zero value. Suppose we store this value in a variable
BBGROUPA and loke zero into
Areg(5)-6172. Now amos will think that there are no bobs, so nothing will happen if we do for instance
Bob Clear. Moreover, if we use
Bob N,X,Y,IMG with one of the previously defined bob numbers, instead of moving the existing bob, a new one will be created. Future bob drawing commands will affect only these new bobs, never the old ones. We can switch back to the old bobs by first saving the new contents of
Areg(5)-6172 into a second variable
BBGROUPB and then loke the value of
BBGROUPA into
Areg(5)-6172. Now only the bobs from the first group will be rendered, and none from the second. Thus this method makes it possible to create units of bobs which can be rendered separately, which can be a very useful resource for speeding up the rendering in programs that rely on bobs.