I had one of these laying around in an old project, so here you go:
Make your movement events like so...make 4 conditional branches, one each for left facing, right facing, up facing, down facing..yadda tadda... make the number of times it forces a move equal to the distance to the edge of the ice for that tile. (I'm lazy..and only made it equal for where you can -step- off ice..you can have it move a million times if it's a wall collission, so I didn't bother counting out distance to walls for each square). Make sure it's set to player touch and below player.
Your set move route events should be set up like this..turn off stepping/walking animation, move whatever direction however many times. Make sure that you have it set to skip if cannot move and wait for completion.
On the areas where you can step off the ice, just place a simple event which sets move route to step/walk animation back on.
Since you are ignoring impossible moves, you can place any number of blocking events/objects, so long as they are impassable, your character will slide into them and stop, withough freezing the game's processing, so long as skip if cannot move is on..