Actually, the running thingy is quite easy to do. Look at the bomy-pet code. Notice that every timeout cycle it checks to see if the owner of the bomy is saying "bomy o bomy". If the owner is, the bomy uses the warpto command. Take this section of the bomy:
NPC Code:
with (getplayer(#s(this.owner))) {
if (strequals(#c,bomy o bomy)) {
setplayerprop #c,;
pdir = playerdir;
newx = playerx + (pdir==1? -3 : pdir==3? 3 : 0);
newy = playery + (pdir==0? -3 : pdir==2? 3 : 0);
dir = (pdir+2)%4;
setcharani bomy_appear1,;
if (strequals(#L,#F)) {
x = newx;
y = newy;
} else
warpto #F,newx,newy;
doappear = true;
}
}
Hope this helps you out. I can always lend a hand if you need (and if I have the time).