anchor.diff:          gameResult.madeProgress = true;
   
           if (result.done) {
  -          actions.removeFirst();
  -
  -          if (action.consumesEnergy) {
  -            action.actor.finishTurn(action);
  +          if (_action.consumesEnergy) {
  +            _action.actor.finishTurn(_action);
               stage.actors.advance();
             }
   
             // Refresh every time the hero takes a turn.
  -          if (action.actor == hero) return gameResult;
  +          var wasHero = _action.actor == hero;
  +          _action = null;
  +          if (wasHero) return gameResult;
           }
   
           if (gameResult.events.length > 0) return gameResult;
  
positive.code: 
  /// Root class for the game engine. All game state is contained within this.
  class Game {
    final Area           area;
    final int            level;
    final Stage          stage;
    final Log            log;
    final Queue<Action>  actions;
    Hero hero;
    Quest quest;
  
    Game(this.area, this.level, Content content, HeroSave save)
      : stage = new Stage(80, 40),
        log = new Log(),
        actions = new Queue<Action>() {
      stage.game = this;
  
      area.buildStage(this, level, save);
      Fov.refresh(stage, hero.pos);
    }
  
negative.code:     final gameResult = new GameResult();
  
      while (true) {
        // Process any ongoing action.
        while (_action != null) {
          // Cascade through the alternates until we hit bottom out.
          var result = _action.perform(gameResult);
          while (result.alternative != null) {
            _action = result.alternative;
            result = _action.perform(gameResult);
          }
  
          stage.refreshVisibility(hero);
  