anchor.diff:                  this.destroy();
               });
   
  +            console.log("%o, %o", rel_x, rel_y);
               stage.collisionLayer(new_room);
               stage.p.rooms[Q.state.get("room")] = new_room;
  -            current_room.animate({ x: -(direction[0]) * (ROOM_WIDTH / 2), y: -(direction[1]) * (ROOM_HEIGHT / 2) });
  -
  -            new_room.animate({ x: 0, y:0 });
  +            current_room.animate({ x: -(direction[0]) * (ROOM_WIDTH / 2), y: -(direction[1]) * (ROOM_HEIGHT / 2) }, {
  +                callback: function () {
  +                    stage.remove(current_room);
  +                }
  +            });
  +
  +            new_room.animate({ x: 0, y:0 }, {
  +                callback: function () {
  +                    new_room.populate(stage);
  +                }
  +            });
  +
               player.animate({ x: rel_x, y: rel_y });
           };
   
  
positive.code:         stage.p.rooms[Q.state.get("room")] = room;
  
          var player  = stage.insert(new Q.Player({  x: starting_x, y: starting_y }));
          var monster = stage.insert(new Q.Monster({ x: 5*32 + 16, y: 6*32 + 16 }));
  
          stage.getRoom = function (i) {
              return this.p.rooms[i];
  
negative.code:             room: 2,
              room_x: 0,
              room_y: 0,
              hp: $('[data-hp]').data('hp') || 1,
              damage: 0,
  
              // whether the game state thinks the player is "leaving"
  