I think mixing different behaviors depending on the condition type involved is very counter-intuitive and should be avoided at all cost. This will cause lots of confusion in complex eventsheets.
Decomposing the problem:
In the scope of Else there is basically two types of conditions: Logic conditions and Picking conditions.
The most intuitive behavior for an Else of a Logical condition like "System: Variable=0" is just treating it like a logical inverse. For a Picking condition like "Sprite: X<320" the most intuitive behavior for the Else is picking the opposite instances.
So for an event that mix both types, the most intuitive behavior would be consistent with the previously stated.
For the events above, the Else should be executed whenever
the Variable!=0 and there's an instance of Sprite>=320, picking any instance of Sprite that meets the new criteria. This behavior is very straight-forward and easy to follow, and should cover most situations.
What is breaking the logic above and causing trouble is the fact you are trying to accommodate this type of situation without always returning 0:
For this variable not be always set to zero, the Else needs to run only when it's parent event is False, and not parallel like the more intuitive way.
So the real problem is not related to picking, but if the Else should be executed parallel to it's parent or just when the parent is False. For most situations running parallel is more intuitive, but there's this exception where it can add further functionality.
You can quickly solve any confusion by limiting the Else to work with only one of these cases, but the optimal solution would be to allow both. So for an optimal solution what is needed is a mechanism that allows the user to choose which situation he desires: execute in parallel, or just when the parent event is false.
A way to allow this is by adding the above options when placing the Else (maybe a dropdown), and showing it's state (type of execution) in the Else condition.
Another possibility is to use the positioning of the Else in relation to it's parent to change the execution type:
-if the Else is in the same level as it's parent, the Else runs parallel;
-if the Else is placed as a sub-event of it's parent, the Else runs only when the parent is False.
Following this logic this would always set the Variable to 0:
While this would set the Variable to 1 or 0 depending on the Variable value:
There should be more ways of doing this, these are just the ones I could think right now.
Independently of the final solution, I agree with @Fimbul that the Else should be listed in the right-click menu. It would act similar to an "Add blank sub-event", but adding the proper Else below the current event instead of a blank sub-event.
*Edit: added images for better demonstration and improved the explanations.Animmaniac2012-04-09 23:28:10