Ashley
I would expect the family object to collect all the ACEs of all the object types that belongs to the family. It could filter the repeated ACEs and display them just once. The most common, or the ACEs that belongs to all of the types could be grouped in a Common category.
Then if you add a condition that only belongs to a specific type of object, during execution it would first filter all the family objects that have that same condition, and find the matching objects to be picked and added to the SOL.
For actions would be the same - first it would filter all the objects that have that same action, then for each object type of this list it would check if there's specific instances picked. If yes apply the actions to those instances. If not apply the actions to all of the objects of that type that belongs to that family.
This would mean that if there's an action that belongs to two kind of objects (sprite and text), and only one type of object is picked in the conditions (sprite: instances 2,3 and 4), that action would be applied to the picked instances of one type (sprite: instances 2,3 and 4) and also to all instances of the type not picked (text).
Then by adding a Pick object type condition to families, would be possible to disambiguate which object you want to apply the actions in case you want to affect just one type of object.
For expressions it would also work the same, with the only difference that when there's no specific instance picked that match that expression, it would return the value of the first object in the list.
I really wish that families could support multiple object types, specially to allow instance variable comparisons between different types of objects that could be used similarly to classes or tags.
Take a family of the respective objects and it's variables as an example:
Family "Scene":
Sprite: varClass = "rock", varShow = "False"
Sprite2: varClass = "grass", varShow = "False"
Sprite3: varClass = "rock", varShow = "False"
Text: varClass = "rock", varShow = "False"
Text2: varClass = "grass", varShow = "False"
TiledBG: varClass = "grass", varShow = "False"
TiledBG2: varClass = "rock", varShow = "False"
You could do this:
Family "Scene": variable varClass == "rock"
->Family "Scene": Set variable varShow to "True"
That would result in:
Sprite: varClass = "rock", varShow = "True"
Sprite2: varClass = "grass", varShow = "False"
Sprite3: varClass = "rock", varShow = "True"
Text: varClass = "rock", varShow = "True"
Text2: varClass = "grass", varShow = "False"
TiledBG: varClass = "grass", varShow = "False"
TiledBG2: varClass = "rock", varShow = "True"
This could open a whole new can of possibilities.