Yeah... types can be pretty confusing if you are new to programming. Think of it like this. If you write "a.b = new b" then a is a variable just like any other. But, variables also come in different formats. For example, string variables hold letters and numbers while "normal" variables only hold numbers. Each "type" that you define basically creates a whole different format of variable, and just like you would add a $ to make a variable hold a string, you have to add the ".b" to make the variable "a" hold data of that format. But now comes the interesting part. As you probably noticed, the whole point of types is to allow you to store more than one variable into a single container variable, and the each type holds different variables than every other type. This is why you have to add the .typename or ".b" in my example to the end of each variable when you first declare it.
Now for the (even more) confusing part. The variables that you declare as .typename aren't really holding the data that you access when you use the \ to access the subvariables. The subvariables are actually being held somewhere in blitz's memory. That variable "a" only tells you where you can find those subvariables in memmory. This means that you can change the contents of the variable "a" without destroying the data which it points to. However, unless you store the place it points to into another variable declared with the same ".typename" suffix (like "a.b =c.b"), you can't get back to it (for the most part). Blitz does keep track of the times that you use the "new" statement to actually create a set of subvariables for "a" to point to. You can access this list the the "for a.b = each b" line of code that you might have seen elsewhere.
I hope that this clears a few things up for you... sorry if it just makes things worse.
Now for the (even more) confusing part. The variables that you declare as .typename aren't really holding the data that you access when you use the \ to access the subvariables. The subvariables are actually being held somewhere in blitz's memory. That variable "a" only tells you where you can find those subvariables in memmory. This means that you can change the contents of the variable "a" without destroying the data which it points to. However, unless you store the place it points to into another variable declared with the same ".typename" suffix (like "a.b =c.b"), you can't get back to it (for the most part). Blitz does keep track of the times that you use the "new" statement to actually create a set of subvariables for "a" to point to. You can access this list the the "for a.b = each b" line of code that you might have seen elsewhere.
I hope that this clears a few things up for you... sorry if it just makes things worse.