|  | dirs = {
  "up-left": "Northwest",
  "up": "North",
  "up-right": "Northeast",
  "left": "West",
  "right": "East",
  "down-left": "Southwest",
  "down": "South",
  "down-right": "Southeast",
  "ascend": "Up",
  "descend": "Down"
}
function moveToRoom(dest, state) {
  updateRoom(dest, state);
}
function updateRoom(dest, state) {
  const room = world[dest];
  const areaName = document.querySelector("#area-name");
  const areaDesc = document.querySelector("#area-desc");
  areaName.innerText = room.name;
  areaDesc.innerText = room.desc;
  const holder = document.querySelector("#move-holder");
  holder.innerHTML = "";
  Object.entries(dirs).forEach(([dir, name]) => {
    const button = document.createElement("button");
    button.classList.add("move-button")
    button.id = "move-" + dir;
    button.classList.add("disabled");
    button.setAttribute("disabled", "true");
    button.innerText = dirs[dir];
    holder.appendChild(button);
  });
  Object.entries(room.exits).forEach(([dir, exit]) => {
    const button = document.querySelector("#move-" + dir);
    const dest = world[exit.target];
    // if any condition fails, don't enable/add a listener
    if (exit.conditions) {
      console.log(exit.conditions);
      if (!exit.conditions.every(cond => cond(state))) {
        return;
      }
    }
    button.classList.remove("disabled");
    button.removeAttribute("disabled");
    button.innerText = dest.name;
    button.addEventListener("click", () => {
      // todo: log
      moveToRoom(exit.target, state);
    })
  });
}
world = {
  "Home": {
    "name": "Home",
    "desc": "Where the wifi autoconnects",
    "exits": {
      "up": {
        "target": "Locked Room",
        "desc": "It's locked!",
        "move": "You enter the secret locked room",
        "conditions": [
          state => {
            return state.player.items.keys.includes("Locked Room");
          }
        ]
      }
    }
  },
  "Locked Room": {
    "name": "Locked Room",
    "desc": "Super seecret",
    "exits": {
      "down": {
        "target": "Home",
        "desc": "Back to home",
        "move": "You dab"
      }
    }
  }
}
 |