rendered paste bodyArray goto_dirs-->MAX_GOTO_STEPS;
Array goto_rooms-->MAX_GOTO_STEPS;
Global current_dir_index = 0;
Global current_room_index = 0;
[ PushInfo dir room;
goto_dirs-->current_dir_index++ = dir;
goto_rooms-->current_room_index++ = room;
];
[ CurRoom;
return goto_rooms-->(current_room_index-1);
];
[ PopInfo;
current_room_index--;
current_dir_index--;
];
[ MarkDone room;
if (room == nothing)
return;
room.goto_checked = true;
];
[ IsDone room;
if (room == nothing)
return;
if (room.goto_checked)
rtrue;
rfalse;
];
[ CheckPath room i;
for (i = 0: i <= current_room_index: i++)
if (goto_rooms-->i == room)
rtrue;
rfalse;
];
[ route start stop;
if (start == stop)
"You're already there!";
if (start == nothing || stop == nothing)
"You can't find your way to nowhere!";
print "pathing ", (name) start, " to ", (name) stop, "^";
current_room_index = 1;
current_dir_index = 0;
goto_rooms-->0 = start;
return _route(start, stop);
];
[ ResolveDir dir cur;
if (dir provides door_dir)
{
dir = dir.door_dir;
}
if (~~(cur provides dir))
rfalse;
dir = cur.dir;
if (dir provides resolve_door)
{
dir = dir.resolve_door(cur);
}
if (metaclass(dir) == routine)
{
dir = dir();
}
if (~~(dir ofclass Room))
{
rfalse;
}
return dir;
];
Global route_steps = 500;
[ _route start stop cur dir room;
route_steps--;
if (route_steps < 0)
rfalse;
MarkDone(start);
cur = CurRoom();
if (CheckPath(stop))
rtrue;
if (cur == nothing)
rfalse;
objectloop (dir in compass)
{
room = ResolveDir(dir, cur);
if (~~room || room == nothing)
continue;
if (IsDone(room))
continue;
if (room == stop)
{
PushInfo(dir, room);
rtrue;
}
}
objectloop (dir in compass)
{
room = ResolveDir(dir, cur);
if (~~room || room == nothing)
continue;
if (IsDone(room))
continue;
PushInfo(dir, room);
MarkDone(room);
if (room == stop)
{
rtrue;
}
else
{
_route(start, stop);
if (CheckPath(stop))
rtrue;
}
PopInfo();
}
if (CheckPath(stop))
rtrue;
rfalse;
];
[ RouteAndPrint start stop i;
if (~~route(start, stop))
print "Sorry, can't find my way there.";
print "From ";
for (i = 0: i < (current_room_index-1): i++)
print (name) goto_rooms-->i, " go ", (name) goto_dirs-->i, " to^";
print (name) noun, "!";
];