Go to file
MpakobecEx f9aed0cae8
CI / test (push) Successful in 3m48s Details
client: DeckBuilder по референсу — топбар Lobby, крупные карты
- PlayerTopBar вынесен из LobbyView в общий компонент; DeckBuilder
  использует его, Rating/Community неактивны, «В лобби» — в меню.
- Коллекция: крупная сетка 6 в ряд со скроллом, ячейка 216×242 —
  грейд, иллюстрация, имя поверх, количество, камень редкости.
- Просмотр: ЛКМ не добавляет, ПКМ открывает карточку; режим колоды
  включает добавление и показывает «в колоде ×N · есть ×M».
- Список колод: + Новый набор, эмблема клана, N/50 · T N/16, кебаб-меню
  «Открыть/Удалить».
- Фильтры в оверлее: поиск по названию, редкость C/R/RR/RRR/SP, клан,
  грейд, триггер.
- Тесты: DeckFilter редкость/поиск, PlayerTopBar, панели DeckBuilder.
- Проверки: EditMode 69/69, SCENE_SMOKE success=True, PLAYMAT_SMOKE
  success=True, standalone собран.
2026-11-01 02:40:10 +05:00
.config Add EF migrations for the game and meta schema 2026-10-21 15:47:47 +05:00
.gitea/workflows Use GitHub setup-dotnet action in CI 2026-10-21 16:04:01 +05:00
.opencode/skills/vanguard-remaster tooling/docs: MCP for Unity, процесс DeepSeek и план сцен/3D/анимаций 2026-10-30 02:34:48 +05:00
client client: DeckBuilder по референсу — топбар Lobby, крупные карты 2026-11-01 02:40:10 +05:00
content Add meta API, match history and replays 2026-10-21 15:27:19 +05:00
docs client: DeckBuilder по референсу — топбар Lobby, крупные карты 2026-11-01 02:40:10 +05:00
server client/server: анимации 3D-поля, HUD и правила (WIP) 2026-10-30 02:34:36 +05:00
tools tools: парсер карт и артов с официального сайта 2026-10-31 00:10:06 +05:00
.dockerignore Add a playable WebSocket match server with matchmaking and reconnect 2026-10-21 14:31:17 +05:00
.env.example Add meta API, match history and replays 2026-10-21 15:27:19 +05:00
.gitattributes Base version: design docs, card catalog, implementation checklist 2026-10-20 21:15:00 +05:00
.gitignore tools: парсер карт и артов с официального сайта 2026-10-31 00:10:06 +05:00
AGENTS.md tooling/docs: MCP for Unity, процесс DeepSeek и план сцен/3D/анимаций 2026-10-30 02:34:48 +05:00
DEVELOPMENT_CHECKLIST.md Keep card names in English, translate only effect text 2026-10-20 21:40:45 +05:00
IMPLEMENTATION_CHECKLIST.md Fix battle card art, mulligan, damage targeting and rest 2026-10-22 02:17:21 +05:00
README.md tools: парсер карт и артов с официального сайта 2026-10-31 00:10:06 +05:00
docker-compose.yml Add Orleans match hosting behind a config flag 2026-10-21 15:53:30 +05:00
global.json Server skeleton, content pipeline and 94-card catalog 2026-10-20 21:27:45 +05:00
opencode.jsonc tooling/docs: MCP for Unity, процесс DeepSeek и план сцен/3D/анимаций 2026-10-30 02:34:48 +05:00
plan.md Base version: design docs, card catalog, implementation checklist 2026-10-20 21:15:00 +05:00

README.md

Vanguard Re:Master

Фанатский ремастер Cardfight!! Vanguard базовой эры (2011): формат Classic, сет BT01 и два триал-дека TD01/TD02.

Fan-made project. Not affiliated with Bushiroad. All card names and art belong to their respective owners.

Текущая оперативная сводка — docs/SESSION-STATE.md.

Статус

Блок Состояние
Документация и решения готово
Каталог карт (94 / 124 принта) готово
Контент-пайплайн и валидатор готово
Игровое ядро (правила) каркас: фазы, райд, призыв, бой, драйв, урон
Протокол и контракты (docs/protocol.md, Vanguard.Shared) готово
Сервер: матч по сети, матчмейкинг, реконнект готово
PostgreSQL (матчи), Redis (тикеты, очередь), Docker готово
Мета-API: JWT, коллекция, каталог, колоды, магазин, история, реплеи готово
CI (Forgejo Actions) готово: ci.yml проходит на home-runner
EF-миграции готово (InitialCreate)
Orleans готово: silo + MatchActorGrain, включается Orleans:Enabled
Клиент Unity 6.6: 3D-сцены, логин, онбординг, коллекция, декбилдер, магазин, история/реплей, очередь, тренировка с ботом, бой с артами, маллиганом, зоной урона, анимациями и RU/EN
Лаунчер не начато

Требования

  • .NET SDK 10 (LTS). Версия зафиксирована в global.json.
  • Python 3 — только для переимпорта карт из первоисточника.

Быстрый старт

# проверить целостность контента
dotnet run --project server/src/Vanguard.Cli -- validate

# сводка по кланам, триггерам и редкостям
dotnet run --project server/src/Vanguard.Cli -- stats

# 1000 партий случайного бота с проверкой инвариантов
dotnet run --project server/src/Vanguard.Cli -- stress 1000

# тесты
dotnet test server/Vanguard.slnx

Запуск игрового сервера:

dotnet run --project server/src/Vanguard.Server --urls http://localhost:5080
# проверка: http://localhost:5080/health

Orleans по умолчанию выключен; Orleans__Enabled=true включает silo в том же процессе. В docker-compose.yml он уже включён; для локального запуска без Orleans ничего дополнительно настраивать не нужно. Состояние соединений остаётся в процессе, поэтому несколько реплик сервера пока не поддерживаются.

Контейнер: docker compose up --build, затем http://localhost:8080/health. Порт задаётся в .env (VANGUARD_PORT, VANGUARD_WS_URL); стек включает PostgreSQL и Redis (AOF). HTTP-контракт очереди и тикетов — docs/server-api.md.

Ожидаемый вывод валидатора:

Карт: 94   Принтов: 124

OK: ошибок 0, предупреждений 0

Структура

/server/src/Vanguard.Rules        ядро правил: карты, колоды, состояние игры
/server/src/Vanguard.Content      загрузка и проверка YAML-контента
/server/src/Vanguard.Shared       сетевые контракты (netstandard2.1 для Unity + net10.0)
/server/src/Vanguard.Server       ASP.NET Core: WebSocket, мета-API, магазин, матчи
  /Auth                           JWT, register/login/refresh, BCrypt
  /Meta                           коллекция, колоды, экономика, история, реплеи
  /Storage                        PostgreSQL-снапшоты и восстановление матчей
  /Matchmaking                    очередь, MMR, Redis-хранилище очереди
  /Tickets                        тикеты: память или Redis
/server/src/Vanguard.Cli          консольные команды
/server/tests                     тесты правил, контрактов и сервера (включая E2E)
/content/sets                     карты в YAML
/content/trial-decks.yaml         две триал-деки
/content/pack_odds.yaml           веса бустера
/content/keywords.yaml            ключевые слова и иконки
/content/translations/ru.yaml     русские тексты
/tools                            импорт и сид переводов
/docs                             протокол, API, правила перевода
/docker-compose.yml               PostgreSQL, Redis и сервер

Vanguard.Rules — чистая библиотека без Orleans, БД и сети. Это позволяет прогонять матчи в консоли и проверять правила до появления клиента.

Контент

Первоисточник — официальный карт-лист en.cf-vanguard.com: и параметры карт, и арты берутся с одного сайта (tools/import_official.py). Пересобрать YAML и докачать недостающие арты:

py tools/import_official.py --sets BT01,TD01,TD02

Полезные режимы: --list-sets (какие сеты есть и их id), --no-art, --dry-run, --limit N для пробного прогона. На Windows, где python — заглушка Microsoft Store, используйте py.

tools/import_cards.py — прежний вариант (триггеры и редкости брались из вики, арты — с Fandom); оставлен как справка. Ручные поля из существующих YAML (snipeBackRow, boost, nameRu, textRu) новый импорт сохраняет.

Валидатор проверяет инварианты, которые легко нарушить вручную:

  • у grade 0 щит 5000 только у Draw-триггера, иначе 10000;
  • Sentinel всегда со щитом 0;
  • параллельный принт (BT01/S01…S12) ссылается на существующий базовый принт той же карты;
  • в колоде ровно 50 карт, ≤4 копий по имени (а не по принту), ≤4 Sentinel, ≤4 Heal.

Тексты карт и иконки

Ключевые слова ([AUTO], [Counter-Blast 3], (VC/RC), <Kagero>) заменяются на иконки при отрисовке. Чтобы перевод не ломал разметку, тексты хранятся в виде шаблонов с токенами:

{auto}:{cb:2} When this unit is placed on {vc}, you may pay the cost...

Список токенов и их иконок — content/keywords.yaml. Русские тексты — content/translations/ru.yaml: заполняется только textRu. Поле nameRu существует, но пока содержит английское название — на случай, если позже решим переименовать карты. Правила перевода и спорные термины — docs/translation-rules.md.

Черновой перевод всех 66 текстов уже залит; его правит человек, после чего правила уточняются под фактические правки.

# создать файл переводов или обновить шаблоны, сохранив введённые переводы
dotnet run --project server/src/Vanguard.Cli -- translations build

# проверить заполнение и целостность токенов
dotnet run --project server/src/Vanguard.Cli -- translations check

Проверка ловит: незаполненные тексты, потерянные или лишние токены, токены, которых нет в справочнике. Карты без эффекта считаются готовыми сразу — им переводить нечего.

Язык клиента

Интерфейс переключается между RU и EN кнопкой в Login и Lobby; выбор сохраняется в PlayerPrefs. Переводы UI живут в client/Assets/Vanguard/Runtime/UI/Localization.cs, а имена и тексты карт берутся из пары nameRu/nameEn и textRu/textEn каталога /api/cards. Переключение применяется на лету, без перезагрузки сцены.

Документация

  • plan.md — исходный дизайн-документ.
  • DEVELOPMENT_CHECKLIST.md — решения, механики, экономика, риски.
  • IMPLEMENTATION_CHECKLIST.md — исторический план по блокам и гейтам.
  • docs/Development/IMPLEMENTATION_PLAN.md — активный журнал задач и шаблон плана.
  • docs/Development/AGENT-WORKFLOW.md — двухэтапный процесс: анализ → реализация (обе стадии на DeepSeek).
  • docs/HANDOFF.md — состояние на конец сессии и порядок следующих шагов.
  • docs/protocol.md — протокол матча: кадры, интенты, события, таймеры, реконнект.
  • docs/game-rules.md — конспект правил и сверка с текущей реализацией.
  • docs/server-api.md — HTTP API: JWT, коллекция, каталог, колоды, магазин, очередь, история и реплеи.
  • content/cards-mvp.md — каталог карт с разбором состава сетов.