U siebie w Maze Strategy mam coś podobnego.
Uproszczony algorytm który nie sprawdza rogów wygląda tak:
GML
if ( instance_position( x + 32, y, o_solidWall ) ) image_index |= 1;
if ( instance_position( x - 32, y, o_solidWall ) ) image_index |= 2;
if ( instance_position( x, y + 32, o_solidWall ) ) image_index |= 4;
if ( instance_position( x, y - 32, o_solidWall ) ) image_index |= 8;
Wtedy poszczególne klatki sprita muszą być ułożone w odpowiedniej kolejności. w MS mam to bardziej rozbudowane bo sprawdzam jeszcze rogi.