proszę bardzo:
dystans = 4, kierunek = 90;
4 to jest binarnie 100, a << 4 oznacza przesuń o 4 bity w lewo, zatem 1000000 - przesuwam po to, żeby na pierwsze 4 bity móc wstawić resztę z dzielenie kierunku przez 90. Dlaczego 4 bity? Bo 360/45 = 8, a 8 binarnie to 1000, zatem każdą mniejszą liczbę zapiszemy za pomocą mniejszej ilości bitów. DIV oznacza dzielenie całkowite, zatem 90/45 = 2, 135/45 = 3, ale 134/45 = 2 (bo zostaje 44 reszty).
A potem to odwracamy. Takie trochę pakowanie bitów ;) Ale jak mówię, jak korzystasz z 39dll to możesz obie rzeczy przesłać osobno jako dwa bity, będzie łatwiej bez i przesuwania:
GML
walk1 = dystans;
walk2 = kierunek div 45;
odbieram:
GML
walk2*=45;
var xx,yy;
xx = lengthdir_x(walk1,walk2);
yy = lengthdir_y(walk1,walk2);
if !place_meeting(x + xx,y+yy,obj_solid) {x += xx; y+=yy;}