Moving minions should be able to shove stationary minions out of the path.
Stationary minions should remember their preferred location, so that when shoved they can stay in range of their target (possibly shoving others recursively to make it happen).
If the preferred location no longer matters, it should be discarded.
Shoving should be based on priority order: any minion can be shoved if it has a happy square to move to; a higher-priority minion can shove a lower-priority minion even if it means being bumped out of its happy square; and a lower-priority minion cannot shove a higher-priority minion out of its happy square.
Moving minions should be able to shove stationary minions out of the path.
Stationary minions should remember their preferred location, so that when shoved they can stay in range of their target (possibly shoving others recursively to make it happen).
If the preferred location no longer matters, it should be discarded.
Shoving should be based on priority order: any minion can be shoved if it has a happy square to move to; a higher-priority minion can shove a lower-priority minion even if it means being bumped out of its happy square; and a lower-priority minion cannot shove a higher-priority minion out of its happy square.