I have finally been able to come up with a solution to this problem. What I have done is download the ForEach object and taken the following line:

Every 00"-01
O_NPC:Set X Position to X("O_NPC") + MoveX("O_NPC")

And replaced this with:

Every 00"-01
Start loop for each one of O_NPC: Loop name MoveX

On each one of O_NPC, Loop name "MoveX"
Y position of O_NPC < DestY("O_NPC")
Set Y position of O_NPC to Y("O_NPC") + 1

On each one of O_NPC, Loop name "MoveX"
Y position of O_NPC >= 0
Y position of O_NPC > DestY("O_NPC")
Set Y position of O_NPC to Y("O_NPC") - 1

As well as doing this, all of my other conditions are contained in other iterations of the On each loop MoveX.

I am feeling so relieved to have solved this problem, I still have a little hair left