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: import 'target_dialog.dart';
  
  class GameScreen extends Screen {
    final HeroSave save;
    final Game     game;
    List<Effect>   effects = <Effect>[];
    bool           logOnTop = false;
  
    /// The currently targeted actor, if any.
    Actor get target {
  
negative.code:     }
  
      // Draw the effects.
      var stageTerm = terminal.rect(0, 0, _game.stage.width, _game.stage.height);
      for (final effect in _effects) {
        effect.render(_game, stageTerm);
      }
    }
  
    void _drawLog(Terminal terminal) {
      // If the log is overlapping the hero, flip it to the other side. Use 0.4
      // and 0.6 here to avoid flipping too much if the hero is wandering around
      // near the middle.
      var hero = _game.hero;
      if (_logOnTop) {
        if (hero.y < terminal.height * 0.4) _logOnTop = false;
      } else {
        if (hero.y > terminal.height * 0.6) _logOnTop = true;
      }
  
      // Force the log to the bottom if a popup is open so it's still visible.
      if (!isTopScreen) _logOnTop = false;
  
      var y = _logOnTop ? 0 : terminal.height - _game.log.messages.length;
  
      for (final message in _game.log.messages) {
        var color;
        switch (message.type) {
          case LogType.MESSAGE: color = Color.WHITE; break;
  