Using 'OR' to combine conditions can cause problems. To avoid them, you need to find a way to compare logically without using 'OR'. There is a way, and it is the system object's evaluate condition.
Instead of one event with 3 conditions, like so:
+ System: Is global variable 'keyDown' Equal to 0
+ System: OR
+ System: Is global variable 'keyDown' Equal to 2
You'd use the evaluate condition, like so:
+ System: global('keyDown') = 0 Or global('keyDown') = 2
That looks great, and it works, too. But what to do, if you need to 'or' triggers? You can't access them in expressions. But you can do an intermediate step to convert a trigger to a variable.
+ System: Always (every tick)
-> System: Set global variable 'keyDown' to 0
+ MouseKeyboard: Key Right arrow is down
-> System: Set global variable 'keyDown' to 1
+ MouseKeyboard: Key Left arrow is down
-> System: Add 1 to global variable 'keyDown'
+ System: global('keyDown') = 0 Or global('keyDown') = 2
-> do something, when both or no keys are down
The logic behind this example is that on every tick 'keyDown' is first reset to 0, then set to 1, if the right arrow key is down. After that, 1 is added to 'keyDown', if the left arrow key is down. Here are the sequences of setting 'keyDown' before it is or'ed:
left and right both not down:
0, 0, 0 -> 'keyDown' = 0
left is down, right is not down:
0, 0, 0+1 -> 'keyDown' = 1
right is down, left is not down:
0, 1, 1 -> 'keyDown' = 1
right is down, left is down:
0, 1, 1+1 -> 'keyDown' = 2
The last step now compares if either one of 'keyDown' = 0 or 'keyDown' = 2 is true (which stands for either no key or both keys down) and gets executed only, if it evaluates to true.
You can do this or any similar way (you might prefer working with dedicated variables per trigger), wherever you need to 'or' conditions.