anchor.diff:      // a raw direction, target the monster in that direction for subsequent
       // shots).
       if (target == null || target.pos != pos) {
  -      for (var step in new Los(game.hero.pos, pos)) {
  +      for (var step in new Los(_game.hero.pos, pos)) {
           // Stop if we hit a wall.
  -        if (!game.stage[step].isTransparent) break;
  +        if (!_game.stage[step].isTransparent) break;
   
           // See if there is an actor there.
  -        final actor = game.stage.actorAt(step);
  +        final actor = _game.stage.actorAt(step);
           if (actor != null) {
             target = actor;
             break;
  
positive.code:     } else if (popped is SelectCommandDialog && result is Command) {
        _lastCommand = result;
  
        if (!result.canUse(game)) {
          // Refresh the log.
          dirty();
        } else if (result.needsTarget) {
          ui.push(new TargetDialog(this, game, result));
        } else {
          useLastSkill(null);
        }
  
negative.code:   }
  
    void update() {
      if (_effects.length > 0) dirty();
  
      var result = _game.update();
  
      // See if the hero died.
      if (!_game.hero.isAlive) {
        ui.goTo(new GameOverScreen());
        return;
      }
  
      if (_game.hero.dazzle.isActive) dirty();
  
      for (final event in result.events) {
        switch (event.type) {
          case EventType.BOLT:
            _effects.add(new FrameEffect(event.value, '*',
                _getColorForElement(event.element)));
            break;
  
          case EventType.HIT:
            _effects.add(new HitEffect(event.actor));
            break;
  
          case EventType.DIE:
            _effects.add(new HitEffect(event.actor));
            // TODO: Make number of particles vary based on monster health.
            _spawnParticles(10, event.actor.pos, Color.RED);
            break;
  
          case EventType.HEAL:
            _effects.add(new HealEffect(event.actor.pos.x, event.actor.pos.y));
            break;
  
          case EventType.FEAR:
            _effects.add(new BlinkEffect(event.actor, Color.DARK_YELLOW));
            break;
  
          case EventType.COURAGE:
            _effects.add(new BlinkEffect(event.actor, Color.YELLOW));
            break;
  
          case EventType.DETECT:
            _effects.add(new DetectEffect(event.value));
            break;
  
          case EventType.TELEPORT:
            _effects.add(new TeleportEffect(event.value, event.actor.pos));
            break;
        }
      }
  
      if (result.needsRefresh) dirty();
  
      _effects = _effects.where((effect) => effect.update(_game)).toList();
    }
  
    void render(Terminal terminal) {
      terminal.clear();
  
      var bar = new Glyph.fromCharCode(
          CharCode.BOX_DRAWINGS_LIGHT_VERTICAL, Color.DARK_GRAY);
      for (var y = 0; y < terminal.height; y++) {
        terminal.drawGlyph(80, y, bar);
      }
  
      var hero = _game.hero;
      var heroColor = Color.WHITE;
      if (hero.health.current < hero.health.max / 4) {
        heroColor = Color.RED;
  