# Файлы и сохранения — `$.fs` и `$.store`

* `$.fs` — чтение и запись файлов рядом с игрой (путь от корня запуска).
* `$.store` — обычный key-value, который сохраняется в JSON на диск.

```js
$.store.set('highscore', 1200);
$.store.set('settings', { volume: 0.7, lang: 'ru' });
$.store.save();                       // в сохранение по умолчанию

$.store.autoSave(true);               // сохранять при изменениях
const hp = $.store.get('hp', 100);    // значение по умолчанию
```

---

## 1. Методы `$.store`

| Вызов | Смысл |
|---|---|
| `set(key, value)` / `setAll(obj)` | записать значение / пачку |
| `get(key, fallback?)` / `has(key)` | прочитать / проверить |
| `remove(key)` / `clear()` | удалить ключ / всё |
| `keys()` / `all()` / `list()` / `count()` | что лежит в хранилище |
| `save(file?)` / `load(file?)` / `exists(file?)` | запись и чтение JSON |
| `file()` / `basePath()` | путь сохранения по умолчанию / корень |
| `autoSave(on, delay?)` / `stopAutoSave()` | автосохранение при изменениях |

`get` с вторым аргументом не падает на пропущенном ключе — это основной способ
играть с настройками.

## 2. Методы `$.fs`

| Вызов | Смысл |
|---|---|
| `readJSON(path, fallback?)` / `readText(path)` | чтение |
| `writeJSON(path, data)` / `write(path, text)` | запись |

Чтение сначала проверяет встроенные данные собранной игры, затем файлы на
диске: каталог выбранного `--game` → корень запуска (`$.fs.basePath()`).
`exists` также видит встроенные файлы. Абсолютные пути принимаются как есть.
Запись и удаление работают на диске; встроенный payload не меняют.

## 3. Ограничения

| Чего нет | Что делать |
|---|---|
| Песочницы на уровне файловой системы | её нет; абсолютные пути принимаются, поэтому ограничение доступа задаёт окружение запуска |
| Нескольких слотов в одном файле | `save('slot2.json')` — имя файла и есть слот |
| Шифрования и защиты от правки | сохранение — обычный JSON; для честности — хеш на стороне игры |
| Версионирования формата | храните `store.set('version', 2)` и миграции пишите сами |
| Синхронизации с облаком | `$.http` есть, но это HTTP-клиент, а не хранилище |
