import ROT from "rot-js";
ROT.Display.prototype.drawWorld = function(world, playerPos) {
  this.clear();
  let curOpts = this.getOptions();
  let top = Math.ceil(playerPos.y - curOpts.height / 2);
  let bot = Math.ceil(playerPos.y + curOpts.height / 2);
  let left = Math.ceil(playerPos.x - curOpts.width / 2);
  let right = Math.ceil(playerPos.x + curOpts.width / 2);

  for (let i = 0, y = top; y < bot; y++) {
    for (let j = 0, x = left; x < right; x++) {
      let chunk = world.getChunkFromTile(x, y);
      let tile = chunk.getTileFromWorldCoords(x, y);

      let symbol, foreground, background;

      if (x === playerPos.x && y === playerPos.y) {
        foreground = "#fff";
        symbol = "X";
      } else if (tile.creatures.length) {
        symbol = "@";
      } else {
        foreground = tile.foreground;
        symbol = tile.display;
      }

      this.draw(j, i, symbol, foreground, background);
      j++;
    }
    i++;
  }
}

var display = new ROT.Display({
  fg: "#daddd8",
  bg: "#1e1e1e",
  // bg: "#9e9e9e", // For debugging
  forceSquareRatio: true
});

export default display;

import ROT from "rot-js";
ROT.Display.prototype.drawWorld = function(world, playerPos) {
  let curOpts = display.getOptions();
  let top = Math.floor(playerPos.y - curOpts.height / 2);
  let bot = Math.floor(playerPos.y + curOpts.height / 2);
  let left = Math.floor(playerPos.x - curOpts.width / 2);
  let right = Math.floor(playerPos.x + curOpts.width / 2);

  for (let i = 0, y = top; y < bot; y++) {
    for (let j = 0, x = left; x < right; x++) {
      let chunk = world.getChunkFromTile(x, y);
      let tile = chunk.getTileFromWorldCoords(x, y);
      if (x === playerPos.x && y === playerPos.y) {
        display.draw(j, i, "X", "#fff");
      } else if (tile.creatures.length) {
        display.draw(j, i, "@");
      } else {
        display.draw(j, i, tile.display, "#086623");
      }
      j++;
    }
    i++;
  }
}

var display = new ROT.Display({
  fg: "#daddd8",
  bg: "#1e1e1e",
  // bg: "#9e9e9e", // For debugging
  forceSquareRatio: true
});

export default display;

--- 
+++ 
@@ -1,22 +1,30 @@
 import ROT from "rot-js";
 ROT.Display.prototype.drawWorld = function(world, playerPos) {
-  let curOpts = display.getOptions();
-  let top = Math.floor(playerPos.y - curOpts.height / 2);
-  let bot = Math.floor(playerPos.y + curOpts.height / 2);
-  let left = Math.floor(playerPos.x - curOpts.width / 2);
-  let right = Math.floor(playerPos.x + curOpts.width / 2);
+  this.clear();
+  let curOpts = this.getOptions();
+  let top = Math.ceil(playerPos.y - curOpts.height / 2);
+  let bot = Math.ceil(playerPos.y + curOpts.height / 2);
+  let left = Math.ceil(playerPos.x - curOpts.width / 2);
+  let right = Math.ceil(playerPos.x + curOpts.width / 2);
 
   for (let i = 0, y = top; y < bot; y++) {
     for (let j = 0, x = left; x < right; x++) {
       let chunk = world.getChunkFromTile(x, y);
       let tile = chunk.getTileFromWorldCoords(x, y);
+
+      let symbol, foreground, background;
+
       if (x === playerPos.x && y === playerPos.y) {
-        display.draw(j, i, "X", "#fff");
+        foreground = "#fff";
+        symbol = "X";
       } else if (tile.creatures.length) {
-        display.draw(j, i, "@");
+        symbol = "@";
       } else {
-        display.draw(j, i, tile.display, "#086623");
+        foreground = tile.foreground;
+        symbol = tile.display;
       }
+
+      this.draw(j, i, symbol, foreground, background);
       j++;
     }
     i++;
Use ceil not floor to get the edges
