¿place_free() detecta si hay un objeto sólido en las coordenadas dadas o si no lo hay? Porque a mi a veces me detecta si hay y otras si no.
Ahora si.

Detecta si esta libre. Por ejemplo:

if place_free(x+4,y) and keyboard_check(vk_right) { x +=4; }

SI x+4 ESTA LIBRE Y SE PRESIONA LA TECLA DERECHA -> SE MUEVE 4 A LA DERECHA.

Tambien puedes usar place_meeting(que es lo contrario CREO), o not place_free (!place_free), etc.

place_free() solo funciona con objetos marcados como solidos mientras que place_meeting() funciona con cualquier objeto, sea solido o no.