You could have an all singing and dancing super UDT that will hold every piece of info relating to any object in your game but, IMO, it's much easier to read Ship(1).PhyID than trying to figure out what Object(1).PhyID is halfway though a program.
Most people would have different UDT's for different types of objects, although these UDT's can have nested UDT's that are common.. (see below for a 3D point UDT)
Type tP3D
X as float
Y as float
Z as float
EndType
The above TYPE can be used to declare positions, angles, vectors etc... all in 3D. so...
Type tObj
Pos as tP3D
Ang as tP3D
Vec as tP3D
EndType
The difficult part is writing generic functions to fill/extract the data stored within the UDT's and the only limitation is the inability to have arrays in the UDT, (no Dim X(10) as integer etc.) which is a bummer.
Now if you intend nesting these UDT's for Physics, AI etc all in one super UDT, it would be wise to include a boolean value that gets set if that particular function is active. So if an object doesn't use AI then the AI.Active would be false and when your main loop processes this AI on all the objects the first thing it checks is to see if it's Active for the current object and exits if not.
It all makes sense, Everyone has different approaches and solutions to the same problems. It's best to take a path that you are most comfortable with and to addapt it to suit the application.
Hope this helps..
Go Create..
Cyberspace was becoming overcrowded and slummy so I decided to move. These nice chaps gave me a lift.