Got it.
In your Conditional Branch, put this under Scripts exactly as it is:
e = $game_map.events[@event_id]; e.passable?(e.x, e.y, $game_player.direction)
The other thing that needs to be done is to move Play SE to inside your Set Move Route which should be inside your Conditional Branch. Play SE can be called either from the List of Event Commands or from a Move Route. Then your Sound Effect will not play if the event can not move.
I used Player Direction to skip other processing because when the Player presses up on a "movable object" like a Rock or a Box, the Player will expect the movable object moves in the direction that they press. They push up, rock should move up. If the player pushed up, and the rock moved left or right, that would just seem weird.
This also allows other events to get in the way. Like another NPC standing behind the rock will prevent the rock from moving. But if its a bird flying overhead, or a butterfly, any events with Through checked will not interfere with movement of the rock. Thats already built in to the functionality of "passable?".
---
Intro To Scripting / Overkill Answer
There is another way to do this, and its an easy way to get used to using scripts, even if you dont quite understand them yet. In your Script Editor window that shows all the scripts for the whole game (hit the F11 key), on the left side, there is a bunch of Scripts listed there. Go to the very bottom of the list and click on Main. Then hit the Insert Key on your Keyboard a couple times. Some new Scripts with no names will be inserted. Select one of the Blank Names. Just below the list, click on "Name", and put in a name for this script. Just so you know its not empty. Call it something like "move away?". Then on the Right Side, copy and paste in this code:
Note: To use with XP, class MUST be Interpreter. For either VX or VX Ace, the class MUST be named Game_Interpreter. I could have set this up to check automatically, but youre not ready for that yet.
The use of this code is exactly the same as the code snippet above. In your Conditional Branch -> Script, put in "can_move_away_from_player?". Dont include the quotes, dont put in any text that says the word IF, and DO include the Question Mark.
I think everyone has run into this small snafu before. Just like in XP that they did fix in Ace, there was no ability to Turn Toward Event, not just the Player. An option to check if an Event can move away from Player should have been one of those other Conditional Branch Options. However, with the ability to put in our own scripts, it matters little, but it is more effort and requires more understanding.
Since so many people have run into this, I took extra time to completely solve this issue.
---
@abi
Code is close, but does the same thing as "passable". Theory is perfectly sound tho. One small thing that was missed is that x and y vs real_x and real_y is what theyre used for. real_x / y determine exact coordinates for pixel perfect rendering. X/Y just follows the grid of the map. Translating X into Real X just requires multiplying X by 128. real_x = x * 128 is used to check if a character is "moving?".