The places module composes much of what this summary discusses. In essence, with places we create a weighted directed graph. The places makeup the vertices on the graph, while the exits make up the edges. Obviously there's more to this, or else we wouldn't need to discuss it here, but that's all there is to it at a fundamental level.
Each place on the map is simply an instantiation. The map is built by connecting these places with exits, which we discuss below. Places are themselves just objects, so it's quite possible for there to be events in the queue that creates and connects new places, and also possible for an event to disconnect a place.
Exits, as mentioned above, makeup the edges between the place objects. Each place contains a list of exit objects. Each exit object contains a destination place as well as a distance. To this extent, we have a simple weighted graph. To build these edges, we can make default exit objects using directed-connect and connect. Otherwise, we would have to instantiate our own exit object and add it to the source's exit list by using directed-connect.
Exit objects also have a list of locks. The locks are essentially a list of predicates that are applied to the animate trying to pass through the exit. If at least one of the predicates return true, the animate is allowed to pass through the exit; however, if none of the locks return true, the animate is told a reason which is a string stored in the exit object.
For example, we might have a door and player wishes to pass through it. The exit object will have a lock that tests to see if the door is open. If so, the player passes through it, otherwise the player hurts himself by running into the door.