17 KiB
Правила Vanguard ReMaster (Classic)
Статусы: [D] подтверждено пользователем, [C] подтверждено кодом,
[O] неизвестно/расхождение. Полный конспект официальных правил и сверка —
docs/game-rules.md; здесь рабочая база проекта.
1. Формат и матч
- [D] Формат проекта — Classic: BT01 + TD01/TD02. Не Standard, Premium или G Standard.
- [D] Матч BO1; сайд-дека нет.
- [D] В Classic нет Ride Deck, Persona Ride, Stride, Legion, Gift, G-зоны, Bind, Front/Over-триггеров и Grade Support.
- [C] В матче два игрока; первый определяется seeded RNG, но может быть зафиксирован тестом/сервером.
- [C][D] Первый ход: нет Battle и атак.
GameEngineумеет отключать это правило флагом для тестов, но серверный матч использует запрет. - [D] Таймер: 90 секунд на ход + банк 5 минут; отсутствие 5 минут — поражение. Реконнект: 0/2/10/30 секунд, затем полный snapshot.
- [C] Победа/поражение: 6 карт урона, пустая колода, сдача/выход/разрыв,
истечение времени или отсутствие. Дополнительное условие «авангард исчез»
есть в конспекте, но отдельной проверки в
GameEngineнет — [O].
2. Колода
[D][C] Основная колода:
- ровно 50 карт;
- ровно 16 триггер-карт;
- не более 4 копий одной карты по
nameId, а не по принту/арту; - не более 4 Heal-триггеров;
- не более 4 Sentinel;
- стартовый авангард — карта grade 0 без триггера; движок выбирает первого подходящего кандидата из колоды;
- смешивать кланы разрешено [D, 2026-10-24]. Это осознанное отклонение от
официального ограничения: эффекты, требующие клан/условие, могут не
сработать.
DeckValidatorединство клана не проверяет. - Колода должна быть собрана из карт, которыми владеет игрок (проверка
DeckService); в коллекции лимита копий нет — 4 копии ограничивают только колоду. - [O] Легальность по формату/banlist и обязательное наличие ровно одного
стартового авангарда в
DeckValidatorотдельно не выделены.
3. Начало партии
- Перемешать колоды.
- Положить стартового авангарда grade 0 без триггера в VC закрытым.
- Взять по 5 карт.
- Mulligan: каждый игрок один раз может вернуть любое количество карт в низ колоды, добрать столько же сверху, затем перемешать. Оба игрока проходят этап. Возвращённые карты не должны попасть в тот же добор.
- Открыть стартовых авангардов; первый игрок начинает.
[C] В коде MulliganCommand сразу выполняет возврат → добор → shuffle, а
FinishMulliganCommand передаёт очередь второму игроку; отдельной команды
«выбрать карты и подтвердить» нет.
4. Зоны
| Зона | Смысл |
|---|---|
| Deck | закрытая колода, добор сверху |
| Hand | рука; у противника видно только количество |
| Vanguard Circle (VC) | текущий авангард; под ним — Soul |
| Rear-guard Circles (RC) | 5 кругов: 0/1/2 задний ряд, 3/4 передний |
| Guardian Circle (GC) | временная зона защитников/перехватчиков |
| Damage | урон; 6+ — поражение |
| Drop | сброс/уничтоженные карты |
| Trigger | временная зона проверки триггера |
| Soul | карты под VC, не отдельная стопка на поле |
- [C] Карты на VC/RC/GC открыты. Закрытыми могут быть рука/колода и урон после Counter Blast.
- [C] Урон входит лицом вверх; Counter Blast переворачивает выбранные карты лицом вниз; Counter Charge — обратно.
- [D] Рука противника отображается только рубашкой; колода — только количеством; урон лицом вниз — только количеством.
- [C] Soul не показывается на столе; доступна через ПКМ/список у VC.
- [D] Drop по умолчанию пуст; сверху показывается последняя карта, по клику — весь список.
5. Фазы хода
[C] Порядок в движке: Stand → Draw → Ride → Main → Battle → End.
Mulligan — отдельная фаза до первого хода.
Stand
Все юниты активного игрока в Rest поднимаются, если нет CannotStand.
Ограничения UntilOwnerNextStand снимаются после подъёма.
Draw
Взять 1 карту сверху. Пустая колода — поражение.
Ride
- Карта из руки на VC; ранг равен текущему или на 1 выше.
- Старый авангард уходит в Soul.
- Ride — один раз за ход; можно пропустить.
- Новый авангард входит стоя и открытым.
- [C] После Ride сначала срабатывает
OnPlaceновой карты, затемOnRideOverстарой; еслиOnPlaceоткрыл pending-способность, текущая реализация не запускаетOnRideOverдо её завершения. Это техническая деталь, а не новое правило; при работе с такими картами проверяй сценарий.
Main
- Call: из руки в RC; grade ≤ grade своего VC. Занятый RC разрешён: прежний юнит уходит в Drop. Призыв из soul/deck и выбор круга работают так же. Число призывов не ограничено. Юнит входит стоя.
- Move: RC ↔ RC только в своей колонке: 0↔3, 2↔4; занятые меняются местами. VC в Move не участвует.
- Activate: ACT-способности; AUTO срабатывают по событиям.
- End Main: переход в Battle.
- [C] В Main также доступны
EndTurnи (если разрешено)EnterBattle.
Battle
- Атака: стоящий юнит переднего ряда (VC или RC 3/4), он уходит в Rest. Цель — VC или передний RC противника.
- Boost: стоящий юнит 0/1 ранга из заднего ряда той же колонки уходит в Rest; его сила добавляется атакующему до конца боя. Карта может получить Boost эффектом.
- Guard: защищающийся добавляет карты из руки в GC. Grade ≤ grade своего авангарда. Щит добавляется сразу.
- Intercept: подходящий RC (обычно grade 2, передний ряд) выходит в GC; атака переносится на него. Нельзя перехватывать атаку по самому себе.
- Drive Check: только из VC; 0–2 ранг — 1 проверка, 3+ — 2; эффект может изменить/обнулить. Арьергард по умолчанию проверок не делает.
- Сравнение: сила атакующего >= силы защищающегося + щит — попадание. Иначе промах. При попадании по RC цель уходит в Drop; при попадании по VC наносится урон, равный критическому удару.
- Damage Check: по одной карте за урон; триггеры срабатывают, затем карта идёт в Damage.
- После боя Guardian/Intercept уходят в Drop. Атакующий может атаковать снова, если есть стоящие передние юниты.
[C] Boost/Interceptor/Guard карты и их модификаторы очищаются в
ClearBattle; UntilEndOfBattle не переживает бой.
End
Сначала возвращаются карты с ReturnToDeckTiming.EndOfTurn, затем снимаются
UntilEndOfTurn модификаторы/выданные способности/ограничения. Ход переходит
противнику, начинается Stand.
6. Атака, защита, крит и урон
- [C] Обычная цель — только VC или передний RC. Задний ряд можно атаковать
только
CanSnipeBackRow(Tejas) и только в своей колонке. Tejas бьёт задний ряд и с VC (центральная колонка), и с RC. - [C] Атака/Boost/часть ACT переводят карту в Rest.
- [C] Guard:
def.Grade > VanguardGradeотклоняется. Sentinel сам по себе даёт 0 щита. Perfect Guard: сброс карты того же клана отменяет атаку; без оплаты — 0 щита и отмены нет. Сброс — опциональная стоимость. - [C] Guard/Intercept карты после боя уходят в Drop;
OnLeaveGuardianсрабатывает после закрытия боя. - [C] Урон — лицом вверх; 6-я карта вызывает поражение после разрешения эффектов. Damage Check-триггер сначала кладёт карту в Trigger, применяет эффект, затем в Damage.
- [C] Heal доступен, если урон игрока >= урона соперника и в своей зоне есть карты; лечится карта только из своей зоны урона.
7. Триггеры
[D][C] В Classic только Critical, Draw, Stand, Heal. Front/Over — нет.
- Триггеры срабатывают при Drive Check и Damage Check.
- Базовый бонус силы — +5000; действует до конца хода.
- Power target и второй эффект могут быть разными юнитами, если текст не запрещает.
- Critical: +5000 и +1 крит выбранному юниту.
- Stand: +5000 и поднять выбранного отдыхающего арьергарда; если арьергардов нет, второй эффект не применяется.
- Draw: +5000 и немедленно взять карту; отдельной цели для draw нет.
- Heal: +5000 и, при условии, лечение 1 урона из своей зоны; если нет карт/условия — лечение не активируется.
- [C] На Damage Check
GrantsPower = true: усиление тоже применяется. - После Drive Check карта уходит в руку; после Damage Check — в Damage.
- Бонусы триггеров снимаются в конце хода, в том числе у противника.
8. Стоимости
| Стоимость | Реализация |
|---|---|
| Counter Blast X | перевернуть X открытых карт урона лицом вниз; при выборе — конкретные |
| Counter Charge X | перевернуть X закрытых карт лицом вверх; если меньше — сколько есть |
| Soul Blast X | X карт из Soul в Drop |
| Soul Charge X | X верхних карт колоды в Soul |
| Discard | выбранная карта из руки в Drop |
| Rest self | повернуть источник |
| Retire self | убрать источник в Drop |
- [D] Multi-target Counter Blast: клиент выбирает карты урона; сервер
принимает
DamageIndexesи переворачивает именно их. Старый одиночныйDamageIndexсохранён для совместимости. - [O] Multi-target Soul Blast и другие стоимости ещё не имеют такого же выбора/протокола.
- [D] Стоимость выбирается по объектам, подтверждение — отдельной кнопкой
панели/оверлея; отдельный
CostPaymentOverlayтребуется, но пока не реализован (текущий CB использует счётчик в панели «Действия»).
9. Эффекты и порядок разрешения
- [C] Источник истины —
GameEngine; он меняетGameStateи пишетGameEvent. - [D] Эффект, сработавший при прохождении атаки, разрешается после получения урона и помещения карты в Damage.
- [D] Нельзя начинать новый эффект посреди текущего: цепочка идёт строго
друг за другом.
_resolvingDepthскладывает новые триггеры вPendingQueue; после завершения текущего они предлагаются/разрешаются. - [D] Рекурсию не поддерживаем; при найденном кейсе — отдельное решение.
- Несколько одновременных AUTO: игрок выбирает порядок; активный игрок первым
получает доступ к своим срабатываниям (
PendingOrder/SelectTriggerCommand). - Optional AUTO: движок спрашивает «активировать/пропустить»; без
Payэффект не выполняется.CanPayпроверяется до предложения. - CONT пересчитывается из состояния; вычисленную силу не хранить как истину.
- Модификаторы/способности/ограничения имеют источник,
EffectIdиModifierDuration:UntilEndOfBattle,UntilEndOfTurn,UntilOwnerNextStand,Permanent. OnPlaceне должен срабатывать от VC, если текст требует RC; проверяйIsVanguardOf/IsRearGuardOf/IsInHand.
10. Особые случаи
- [D] Move: если у RC доступен только один круг в колонке, клиент выполняет перемещение сразу, без выбора цели.
- [D] Draw после выбора цели силы сразу тянет карту; второй цели нет.
- [D] Heal просит цель только в своей зоне урона и только при выполнении серверных условий.
- [D] Tejas атакует задний ряд своей колонки с VC/RC.
- [D] Подсветка урона ограничена зоной урона локального игрока и режимом оплаты; вне оплаты урон не подсвечивается.
- [D] Call в занятый RC заменяет юнита; старый уходит в Drop.
- [D] В первый ход атака и переход в Battle недоступны.
- [C]
OnRideOverтекущей реализации срабатывает послеOnPlace, но может быть отложен/пропущен при pending-способностиOnPlace; это техническая граница, проверяй карты с обоими окнами. - [O] Отдельная проверка «авангард исчез» в
GameEngineне реализована; не описывай её как гарантированное поражение без решения.