Alright, now that it's not the middle of the night, I've whipped you up some code. This is from scratch but I remembered the method I used before.
define procedure <character.mover>
for each object in game {
if property <#quest.thing#; character> then {
if property <#quest.thing#; movable> {
if property <#quest.thing#; moving> then {
do <find.directions($locationof(#quest.thing#)$; #quest.thing#)>
}
}
}
}
end define
define procedure <find.directions>
set string <room.now; $parameter(1)$>
for <i; 0; 9> set string <room.dir[i];>
set numeric <room.dirs; 0>
for <i; 0; 9> {
if property <#room.now#; #directions[i]#> then {
set string <room.dir[i]; #directions[i]#>
inc <room.dirs>
}
}
if ( %room.dirs% > 0 ) then {
dec <room.dirs>
set numeric <dir.goingn; $rand(0; %room.dirs%)$>
set string <dir.goings; #room.dir[dir.goingn]#>
set numeric <dir.comingn; %dir.goingn% + 5>
set string <dir.comings; #room.dir[dir.comingn]#>
set string <room.after; $objectproperty(#room.now#; #dir.goings#)$>
do <character.mover2($parameter(2)$; #room.now#; #dir.goings#; #dir.comings#; #room.after#)>
}
end define
define procedure <character.mover2>
set string <character; $parameter(1)$>
set string <room.now; $parameter(2)$>
set string <dir.going; $parameter(3)$>
set string <dir.coming; $parameter(4)$>
set string <room.after; $parameter(5)$>
move <#character#; #room.after#>
if ( #quest.currentroom# = #room.now# ) then msg <$capfirst(#(character):alias#)$ moves #dir.going#.>
if ( #quest.currentroom# = #room.after# ) then {
if ( #dir.gonig# = up) then {
msg <$capfirst(#(character):alias#)$ enters above.>
}
else if ( #dir.going# = down ) then {
msg <$capfirst(#(character):alias#)$ enters from below.>
}
else msg <$capfirst(#(character):alias#)$ enters from the #dir.coming#.>
}
end define
Dump the above at the end of your asl. To make characters mover they need the properties 'character', 'movable' and 'moving'. The following goes inside the 'define game' block, if you already have some start script then end it inside there.
startscript {
set string <directions[0]; north>
set string <directions[1]; northeast>
set string <directions[2]; east>
set string <directions[3]; southeast>
set string <directions[4]; up>
set string <directions[5]; south>
set string <directions[6]; southwest>
set string <directions[7]; west>
set string <directions[8]; northwest>
set string <directions[9]; down>
}
This should work nicely and print grammatically correct text to tell you they're moved. Characters can move where-ever they are in the game, not just in the same room as the player.
The code should work, if you put it in right; but it is untested as I don't have quest on this computer. If you have any problems, or are unsure how to add it in, then just post here. It'll be helpful if this is the case, if you attach your asl to the post, just click 'upload attachment' below the box where you type your text and the rest should be obvious.
EDIT: opps, forgot to say you must add 'do <character.mover>' to your after turn script, prolly easiest to add that via QDK unless you've already added a after-turn script.

Silly me...