   public private(set) var movie: Movie?
   public private(set) var movieID: Int
   public private(set) var movieURL: URL?
+
+  public private(set) var memory: ShapedArray<UInt8>? = nil
+  public private(set) var screen: ShapedArray<UInt8>? = nil
 
   internal var emulatorHandle: UnsafeMutablePointer<CEmulator>?
 

    // Configure the observation space.
    switch config.observationSpaceType {
    case .screen:
      let screen = Environment.screen(
        gameData: self.gameData,
        emulatorHandle: self.emulatorHandle,
        forPlayer: 0)
      self.observationSpace = Box(low: 0, high: 255, shape: screen.shape)
    case .memory:
      let memory = Environment.memory(gameData: self.gameData)
      self.observationSpace = Box(low: 0, high: 255, shape: memory.shape)
    }

    if let state = self.state {

    self.state = state
  }

  public func updateCachedScreen() {
    self.screen = Environment.getScreen(
      gameData: self.gameData,
      emulatorHandle: self.emulatorHandle,
      forPlayer: 0)
  }

  public func updateCachedMemory() {
    self.memory = Environment.getMemory(gameData: self.gameData)
  }

  private func updateCachedObservations() {
    switch config.observationSpaceType {
    case .screen: updateCachedScreen()
    case .memory: updateCachedMemory()
    }
  }

  private static func getScreen(
    gameData: GameData,
    emulatorHandle: UnsafeMutablePointer<CEmulator>?, 
    forPlayer player: UInt32 = 0
