A Dark Room

Initial Gameplay

Go to https://adarkroom.doublespeakgames.com/ and play A Dark Room for 10-20 minutes.

Then answer as many Notice & Wonder questions below as you can.

If you already have a game in progress, consider saving it (so you can get it back later) and starting a new game to think about while you answer these questions.

Notice:

  1. What happens when you first start the game? What can and can’t you do?
  2. What numbers or quantities does the game keep track of?
  3. How does the game’s screen change as you play?
  4. What actions become available or unavailable based on your resources?

Wonder:

  1. How might the game be keeping track of whether the fire is “roaring” versus “flickering”?
  2. How do you think the game decides when to reveal new options or locations?
  3. Why do you think some buttons are visible but grayed out, while others are completely hidden?
  4. How might the game be tracking time passing differently when you’re gathering vs when you’re idle?

Code Reading

Below are code snippets that mimic parts of the game. For each one, read the code and then next to it translate the code to English as best you can. This is all new stuff – it’s okay to guess!

  1. Basic fire state:
let fireIntensity = 'dark';
if (wood >= 1) {
  fireIntensity = 'flickering';
  wood = wood - 1;
}
  1. Check if room is warm enough:
let roomTemperature = 0;
if (fireIntensity === 'roaring') {
  roomTemperature = roomTemperature + 1;
} else if (fireIntensity === 'flickering') {
  roomTemperature = roomTemperature - 1;
}
  1. Stranger arrives condition:
if (fireIntensity === 'flickering' && timePassed > 60) {
  showMessage('a stranger appears');
  hasStranger = true;
}
  1. Resource gathering:
let wood = 0;
if (isGatheringWood === true) {
  wood = wood + 1;
  energy = energy - 1;
}
  1. Builder becomes available:
if (hasStranger === true && wood >= 5) {
  showBuilderOption = true;
  woodNeeded = 5;
}
  1. Check if trap can be built:
if (wood >= 10 && builderUnlocked === true) {
  canBuildTrap = true;
} else {
  canBuildTrap = false;
}
  1. Time passing in the room:
if (fireIntensity === 'flickering') {
  timePassed = timePassed + 1;
  if (timePassed > 100) {
    fireIntensity = 'dark';
  }
}
  1. Visual state of fire:
let fireEmoji = '🔥';
if (fireIntensity === 'roaring') {
  fireEmoji = '🔥🔥🔥';
} else if (fireIntensity === 'flickering') {
  fireEmoji = '🔥';
} else {
  fireEmoji = '❄️';
}
  1. Basic inventory check:
if (wood < 0) {
  wood = 0;
}
if (food < 0) {
  food = 0;
}
  1. Stoke fire button:
let canStokeFire = false;
if (wood >= 1 && fireIntensity !== 'roaring') {
  canStokeFire = true;
}
  1. Energy system:
let energy = 100;
if (isGatheringWood === true && energy > 0) {
  energy = energy - 10;
} else {
  isGatheringWood = false;
}
  1. Room description:
let roomStatus = '';
if (fireIntensity === 'dark') {
  roomStatus = 'the room is dark';
} else if (fireIntensity === 'flickering') {
  roomStatus = 'the room is warm';
} else if (fireIntensity === 'roaring') {
  roomStatus = 'the room is hot';
}