I like your way but why not do something like
NPC Code:
if (created) {
showcharacter;
}
if (mousedown){
dx = mousex-x;
dy = mousey-y;
dist=(dx^2+dy^2)^.5;
dir = (abs(dx)>abs(dy)? (dx>0? 3 : 1) : (dy>0? 2 : 0));
xinc = dx/dist;
yinc = dy/dist;
for(i=0;i<dist;i++){
x+=xinc;
y+=yinc;
setcharani walk,;
sleep .05;
}
setcharani idle,;
}
yes, no onwalls either