I've been hunting down some bugs in my enemy behaviour, and I've found that they're caused by objects that aren't present in the frame. For example, take this event, which decides whether an enemy should jump up to a ceiling:
So, if an enemy has been flagged for testing the ceiling,
and it's an enemy that is able to walk on ceiliing,
and there's a clear path to the ceiling (the triangular detector doesn't overlap any collision objects),
and there are no hazards (eg. spikes) waiting at that ceiling (neither red detector overlaps with a yellow exclamation mark qualifier),
and there's a ceiling in the correct spot (the small green/blue detector overlaps a ceiliing)
.....then the event will prepare the enemy to jump.
This seemed to me like a reasonable way to do the event: is there a ceiling? check. Are there no obstacles? check. Are there no hazards? check. But there's a big problem. On this particular level, there are no hazards anywhere on the level. So there are no objects with the yellow exclamation mark qualifier present at all (they exist in the Frame Editor, but weren't created at runtime). And so Fusion completely ignores the entire event. As a result, the enemy never jumps to the ceiling, even though all the conditions for the event are true, because the event was never actually tested in the first place. If I place a hazard somewhere in the level, the event suddenly works.
I did some quick tests, and it seems that this bug only pertains to objects in certain circumstances. For example, in an event with an overlap condition, only the absence of the second object prevents the event from firing. So, in the following example, the blue object spins, but doesn't scale (event #2 fires but #3 doesn't). So I guess that gives me a fix for my above problem - I can just switch the order of the objects in the conditions.
I also found that if you put this event in global events, referring to an object that has "create at start" disabled (and therefore never exists in-frame), the event will fire if you run a frame that contains the object in the Frame Editor (even with "create at start" disabled), but won't fire if you run it from a frame that doesn't contain the object. This seems a bit different to my problem above, where an event doesn't fire even when the objects it references are all in the Frame Editor (albeit not all created at runtime).
Is this sort of behaviour a bug or a feature? And if it's a bug, can it be fixed?