- TypeScript 87.8%
- HTML 4.3%
- CSS 4.2%
- JavaScript 3.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| balance | ||
| docs | ||
| e2e | ||
| public | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.browser.json | ||
| tsconfig.json | ||
| tsconfig.worker.json | ||
| vite.config.ts | ||
Rare Finds Lab
Локальная лаборатория баланса и генерации AutoTasks для Rare Finds. Цель — воспроизвести игровую прогрессию и механики на том же балансе, что использует выбранная версия игры, и дать удобный цикл эксперимента: изменить параметры → проверить на поле → сравнить прогонами → сохранить результат.
Сейчас реализованы поле 7×9, merge, эмиттеры, фиксированные и автоматические задачи, ресурсы, уровни, декор и естественный переход от последнего декора к циклу endless-сундуков, редактор Tier1–Tier5, ручные инструменты и автоматические прогоны. Состояние сундукового цикла и таймеры сохраняются и восстанавливаются. Проверка соответствия строится по исходникам Unity и тестам; Unity runtime не запускался, поэтому runtime parity не заявляется. Проект не подключён к аккаунту игрока или live Remote Config.
Быстрый запуск
Нужны Node.js, совместимый с Vite 8, и npm. В текущем окружении проверено на Node 26.12.0.
npm ci
npm run dev -- --host 127.0.0.1
Сборка и проверки:
npm test
npm run typecheck
npm run typecheck:app
npm run build:app
npm run test:e2e
Playwright использует /usr/bin/chromium, если он установлен. Другой путь задаётся переменной PLAYWRIGHT_CHROMIUM_EXECUTABLE. При отсутствии системного браузера установите его через npx playwright install chromium.
Источники баланса
balance/Rare Find Game Balance.xlsx— копия предоставленного файла. Локальный CLI-импорт создаёт отдельный кандидат и отчёт различий, не меняя рабочий баланс.src/config/default-config.json— поставляемый снимок модели, включающий импортированный runtime-контент и настройки лаборатории.src/config/autotask-tiers.json— копии Unity Tier1–Tier5, не live Remote Config.balance/runtime-baseline.jsonи его manifest — зафиксированные runtime JSON Unity для офлайн-сравнения.balance/source-manifest.jsonсохраняет первоначальную опись источников аудита.
Штатный импортёр игры в rf/res/scripts/import-balance читает Google Sheets. Нельзя автоматически считать локальную книгу, сохранённые Unity JSON и реально загруженные игрой настройки одной версией баланса. Текущий порядок импорта описан в BALANCE-PIPELINE.md; первоначальные выводы — в аудите.
Локальный импорт книги без Google API:
npm run balance:import -- --out /tmp/rf-candidate
Вход по умолчанию — предоставленный XLSX; baseline — balance/runtime-baseline.json. Выход: candidate-config.json, report.json, manifest.json и runtime/. Папка назначения должна быть новой. Для сравнения с другим checkout используйте --game-root ../rf. Откройте report.json и проверьте расхождения; candidate-config.json можно загрузить через полный JSON-импорт в «Инструментах». Кандидат не заменяет исходную конфигурацию автоматически.
Для обновления снимка нужен Unity-репозиторий с _MTH2_proj/Assets/GameData. По умолчанию скрипты ищут соседнюю папку ../rf, затем старую ../restored-repo. Можно явно указать путь:
RF_GAME_ROOT=/absolute/path/to/rf npm run refresh:config
RF_GAME_ROOT=/absolute/path/to/rf npm run prepare:game-art
refresh:config меняет встроенные конфиги: просмотрите diff перед коммитом. Остальные настройки берутся из существующего шаблона; команда ещё не гарантирует полный импорт всех поведенческих параметров. Опись source-manifest.json относится к дате аудита и не обновляется этой командой.
Графика включена в репозиторий. Без Unity-исходников запуск и сборка используют поставляемые WebP. При наличии исходников prepare:game-art извлекает их заново. В текущем снимке отсутствует атлас raider1; это фиксируется предупреждением. Поле использует исходные иконки, синтетической может быть визуализация раскрашивания полотна при сохранении расходов, XP и наград игры.
Рабочие сценарии
- Ручная игра: поле, эмиттеры, merge, сдача задач, награды и прогресс. Тестовые ресурсы и синтетические профили применяются инструментами игрока.
- Настройка AutoTasks: выбрать Tier, изменить параметры, сохранить вариант, сравнить на одинаковом снимке и seed. Сброс восстанавливает поставляемый Tier.
- Автоматические прогоны: генерация серии задач и симуляция прохождения. Результат зависит от сценария и поведения автоматического игрока.
- Проверка механик: source-derived тесты повторяют проверяемые правила C# исходников. Runtime fixture import остаётся дополнительным инструментом: Unity не запускается и его доступность не требуется для разработки.
Рабочее пространство состоит из четырёх режимов:
- Игра: поле, активные задания, ресурсы, выбранный предмет и прогресс полотна. Кнопка «Инструменты тестирования» открывает выдачу золота/алмазов/энергии, уровень, часы и сохранение состояния.
- AutoTasks: настройки открываются рядом с игрой на desktop. При вводе пересчитываются цели; изменения применяются к следующим заданиям, текущая очередь сохраняется. «Проверить на поле» использует текущую игровую сессию. Пока фиксированные задания не пройдены, действует их очередь; оценочный профиль «После скриптов» доступен в инструментах тестирования.
- Прогоны: сравнение AutoTasks на общих seed и полное прохождение поля. История и экспорт находятся рядом с результатами; низкоуровневые метрики — в раскрываемом разделе.
- Инструменты: снимок и полный конфиг JSON, RNG, fixture-сверка, trace и справка.
После успешного прогона панель «Сохранить и повторить» позволяет скачать эксперимент с балансом, снимком, параметрами и результатом. «Загрузить эксперимент» проверяет файл, «Повторить эксперимент» пересчитывает его в worker и сравнивает с сохранённым результатом. Это воспроизведение лаборатории; оно не заявляет runtime-сверку Unity и не сбрасывает текущее игровое поле. Для полных прохождений сохраняется часовой пояс дневного сброса; повторение требует такого же пояса.
Длительные прогоны можно остановить. Изменение параметров отменяет устаревший расчёт, чтобы его ответ не заменил актуальный результат.
На мобильном экране игра и редактор показываются по очереди, сохраняя одну сессию. Синтетическое полотно служит представлением стадий; расходы и XP вычисляет игровое ядро. Восстановлена исходная кожа доски и графика предметов.
Структура
| Путь | Назначение |
|---|---|
src/core/ |
Генерация, поле, RNG, экономика, награды и прогрессия |
src/app.ts, index.html, src/style.css, src/ui/ |
Интерфейс, навигация и стили компонентов |
src/worker/, src/platform/ |
Автоматические прогоны вне основного потока |
src/config/ |
Поставляемые конфиги |
scripts/ |
Обновление runtime-контента и извлечение графики |
tests/, e2e/ |
Модульные и браузерные проверки |
balance/ |
Предоставленная книга и опись источников |
docs/ |
Аудиты, справка и план реализации |
Результаты ревизии
Текущий статус и очередь работ — в плане. Реализованные правила: source-derived проверки, импорт, эксперименты, интерфейс, результаты проверок.
Известные границы: Unity runtime не запускался; ставки наград endless-сундуков используют обычный rate без RC-модификатора; стадии полотна пока последовательны, без выбора внутри открытой группы; вложенная энергетическая стоимость временных emitter-chain покрыта синтетическим тестом по Unity, поскольку предоставленная книга содержит только постоянные эмиттеры; время их многостадийной сборки не моделируется. Полные replay-прохождения требуют сохранённого часового пояса. Итоговые проверки: VALIDATION.md.
Сохранённые варианты в браузере не удаляются при обновлении приложения. Если нужен текущий baseline, выберите Tier и нажмите «Сбросить Tier»; старый локальный вариант остаётся экспериментом и может содержать прежние параметры.