Wieso, so kompliziert ist das doch nicht. Na ja, doch schon, aber viel einfacher gehts glaub ich nicht.
Weil wenn du das Event machst
<>"Step (Richtung Einfügen)"
<>Variable xyz+1
dann erhöht der die Variable so oder so.
Also würde ich eben die X Koordinate abfragen, die in einer weiteren Variable speichern, dann hast du X1 und X2, die sind dann beide die X-Koordinaten des sich von selbst bewegenden Events (nicht des Steins). So, jezz das Move Event, natürlich mit "ignore if can't be moved", sonst bleibt alles stecken xD. Dann Fragst du X1 wieder ab. Und dann überprüfst du mit einer Bedingung, ob X1=X2 ist. wenn nicht, dann Variable up. Ansonsten nichts. Das gleiche machst du dann wenn nötig mit Y
Jetzt ist es egal, wo der Stein ist, wenn der Stein dm Ding im Weg ist, dann bewegt es sich nicht weiter und die Variablen werden nicht mehr erhöht.
Um es möglichst einfach zu machen und übersichtlich, würde ich das Event mit vielen Seiten machen, für jeden Schritt eine Seite. Dann kannst du die Bedingungen und den ganzen Kram einfach reinkopieren, lediglich das Move Event verändern.