I think you should read the wiki article on Conditions, it should help clear things up for you. The details may be confusing at first, but Construct actually has well-defined behavior in most situations involving object instances and object types.
Does the "Cruiser" in "Create object Asteroid at Cruiser.X, Cruiser.Y)" refer to all cruisers, or the first/last one that was spawned?
From the article:
[quote:2nykc8o4]The Expression rule
The expression Object.X will retrieve the X co-ordinate of the first instance of Object that is picked. If Object is unreferenced in the event, it refers simply to the first instance to retrieve the value. This is worth bearing in mind. See the examples for more information.
(remember 'set X to .X + 1' will move all instances to the right because expressions which refer to the object owning the action refer to each object separately)
[quote:2nykc8o4]A System:Destroy command for a given object destroys all instances, unless it is immediately after a spawn action that created a specific instance.
That's right, the create and spawn actions pick the object created, and that is intended, so you can use events to modify that object.
[quote:2nykc8o4]In other words, if I want the player to fly around in a spaceship, and the enemies to fly around in the same spaceship, would I want to create two separate Construct objects?
Yes, but mainly because they are logically separate objects. The player spaceship is controlled by the player rather than AI and that's enough to justify making them separate.