Compare commits

..

No commits in common. "af3fb2b621bd99dd6adccdbde66bb4694b1f5c2a" and "29822be2adc4acb85cecd0fd0f202ea4f92baccc" have entirely different histories.

426 changed files with 790 additions and 8434 deletions

8
.gitignore vendored
View File

@ -5,10 +5,6 @@
appsettings.Production.json
secrets.json
# --- Python ---
__pycache__/
*.pyc
# --- .NET ---
bin/
obj/
@ -50,10 +46,6 @@ client/Assets/StreamingAssets/aa/*
client/*.log
client/TestResults*.xml
# Локальный 4x-арт (251 МБ, кодом не используется) — не коммитим
client/Assets/Vanguard/Resources/CardArt_4x/
client/Assets/Vanguard/Resources/CardArt_4x.meta
# --- Unity прочее ---
*.unitypackage
crashlytics-build.properties

View File

@ -49,8 +49,7 @@ description: Use for any work in the Vanguard ReMaster repository: Cardfight!! V
- **После блока:** клиентские EditMode, серверные тесты (на home), `validate`,
`translations check`, коммит и push.
- **Сначала план, потом код:** новые изменения проходят анализ DeepSeek с
записью в `docs/Development/IMPLEMENTATION_PLAN.md`, затем реализацию —
её тоже выполняет DeepSeek, отдельным проходом по готовому плану.
записью в `docs/Development/IMPLEMENTATION_PLAN.md`, затем реализацию Kimi.
Передача — через файлы и Git, не через память модели. Детали —
`docs/Development/AGENT-WORKFLOW.md`.

View File

@ -64,12 +64,6 @@
- **[D]** 3D-сцена, отдельные сцены Login/Lobby/DeckBuilder/Battle; HUD —
uGUI; reference 1920×1080.
- **[D]** Анимации описываются для локального игрока. Для противника
применяются те же правила, но зеркально с его стороны поля: направление,
сторона появления карты, наклон веера и порядок перекрытия зеркальны;
камера также отражается относительно центра стола. Отдельные
«противнические» анимации не делать, если это не подтверждённое
исключение.
- **[D]** Камера в покое фиксирована по центру поля с небольшим наклоном;
временно двигается только `CameraDirector` в trigger-последовательности.
- **[D]** Выбор карты/круга/зоны/цели — клик/драг по объекту; кнопки только
@ -118,8 +112,7 @@
## 4. Процесс разработки
Формальный двухэтапный процесс (анализ → план → реализация; обе стадии
выполняет DeepSeek, но раздельно) описан в
Формальный двухэтапный процесс DeepSeek → Kimi описан в
`docs/Development/AGENT-WORKFLOW.md`; активный план задачи — в
`docs/Development/IMPLEMENTATION_PLAN.md`. Ниже — краткие правила, без
дублирования шаблона плана.

View File

@ -40,9 +40,8 @@
## Вопросы
- **Все вопросы задавай только через специальный инструмент `question`.**
Это относится к любым уточнениям, выборам и открытым вопросам. Обычным
сообщением вопрос задавай только если инструмент недоступен.
- Для существенной неопределённости используй специальный инструмент
`question` (если он недоступен — задай вопрос обычным сообщением).
- Предлагай 2–4 коротких варианта с рекомендацией и возможность своего ответа.
- Дождись ответа, прежде чем принимать зависящее от него решение.
- Не спрашивай о том, что уже однозначно установлено кодом, документацией или
@ -51,23 +50,22 @@
## Двухэтапная разработка
- Любое пожелание, требующее изменения игры/кода, сначала проходит **анализ и
план**, затем **реализацию**. Оба этапа выполняет DeepSeek, но раздельно:
не начинай код в том же проходе, где анализируешь, кроме явно тривиальной
правки, которую пользователь разрешил сделать сразу.
план DeepSeek**, затем **реализацию Kimi**. Не начинай код без плана, кроме
явно тривиальной правки, которую пользователь разрешил сделать сразу.
- Активный план и журнал задач — `docs/Development/IMPLEMENTATION_PLAN.md`;
подробный процесс — `docs/Development/AGENT-WORKFLOW.md`.
- На этапе анализа не меняются игровой код, сцены, префабы, SO и конфиги;
можно читать, задавать вопросы и обновлять план/документацию.
- Перед реализацией прочитай `AGENTS.md`, Skill и раздел задачи, проверь Git и
актуальность файлов/методов. Устаревший план не является разрешением на
- DeepSeek на этапе анализа не меняет игровой код, сцены, префабы, SO и
конфиги; можно читать, задавать вопросы и обновлять план/документацию.
- Kimi перед реализацией читает `AGENTS.md`, Skill и раздел задачи, проверяет
Git и актуальность файлов/методов. Устаревший план не является разрешением на
изменения.
- Передача контекста — только через файлы репозитория и Git, не через память
модели. Если агенты в разных ветках/копиях, это фиксируется в плане.
- Статусы пунктов: `[ ]`, `[x]`, `[!]`, `[-]`; отдельно указывается
«Реализация» и «Проверка». `[x]` без проверки запрещён.
- На этапе реализации не расширяй объём, не делай необязательный рефакторинг и
не удаляй чужие изменения. При новом существенном решении пользователя —
вопрос и остановка зависимой части.
- Kimi не расширяет объём, не делает необязательный рефакторинг и не удаляет
чужие изменения. При новом существенном решении пользователя — вопрос и
остановка зависимой части.
## Изменения

View File

@ -98,22 +98,13 @@ OK: ошибок 0, предупреждений 0
## Контент
Первоисточник — официальный карт-лист `en.cf-vanguard.com`: и параметры карт,
и арты берутся с одного сайта (`tools/import_official.py`). Пересобрать YAML
и докачать недостающие арты:
Первоисточник — официальный карт-лист `en.cf-vanguard.com`; триггеры и редкости
выгружены из вики. Пересобрать YAML:
```powershell
py tools/import_official.py --sets BT01,TD01,TD02
python tools/import_cards.py
```
Полезные режимы: `--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;
@ -167,8 +158,7 @@ dotnet run --project server/src/Vanguard.Cli -- translations check
- `IMPLEMENTATION_CHECKLIST.md` — исторический план по блокам и гейтам.
- `docs/Development/IMPLEMENTATION_PLAN.md` — активный журнал задач и шаблон
плана.
- `docs/Development/AGENT-WORKFLOW.md` — двухэтапный процесс: анализ → реализация
(обе стадии на DeepSeek).
- `docs/Development/AGENT-WORKFLOW.md` — двухэтапный процесс DeepSeek → Kimi.
- `docs/HANDOFF.md` — состояние на конец сессии и порядок следующих шагов.
- `docs/protocol.md` — протокол матча: кадры, интенты, события, таймеры, реконнект.
- `docs/game-rules.md` — конспект правил и сверка с текущей реализацией.

View File

@ -84,7 +84,6 @@ MonoBehaviour:
m_SupportScreenSpaceLensFlare: 1
m_GPUResidentDrawerMode: 0
m_SmallMeshScreenPercentage: 0
m_ShadowSmallMeshScreenPercentages: {x: 0, y: 0, z: 0, w: 0}
m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
m_ShadowType: 1
m_LocalShadowsSupported: 0
@ -101,18 +100,18 @@ MonoBehaviour:
m_Keys: []
m_Values:
m_PrefilteringModeMainLightShadows: 3
m_PrefilteringModeAdditionalLight: 0
m_PrefilteringModeAdditionalLightShadows: 2
m_PrefilteringModeAdditionalLight: 4
m_PrefilteringModeAdditionalLightShadows: 0
m_PrefilterXRKeywords: 1
m_PrefilteringModeForwardPlus: 2
m_PrefilteringModeForwardPlus: 1
m_PrefilteringModeDeferredRendering: 0
m_PrefilteringModeScreenSpaceOcclusion: 2
m_PrefilteringModeScreenSpaceReflection: 0
m_PrefilteringModeScreenSpaceOcclusion: 1
m_PrefilteringModeScreenSpaceReflection: 1
m_PrefilterWriteSmoothness: 1
m_PrefilterDebugKeywords: 1
m_PrefilterWriteRenderingLayers: 1
m_PrefilterWriteRenderingLayers: 0
m_PrefilterHDROutput: 1
m_PrefilterAlphaOutput: 1
m_PrefilterAlphaOutput: 0
m_PrefilterSSAODepthNormals: 0
m_PrefilterSSAOSourceDepthLow: 1
m_PrefilterSSAOSourceDepthMedium: 1
@ -124,23 +123,20 @@ MonoBehaviour:
m_PrefilterSSAOSampleCountHigh: 1
m_PrefilterDBufferMRT1: 1
m_PrefilterDBufferMRT2: 1
m_PrefilterDBufferMRT3: 1
m_PrefilterSoftShadowsQualityLow: 1
m_PrefilterSoftShadowsQualityMedium: 1
m_PrefilterSoftShadowsQualityHigh: 1
m_PrefilterDBufferMRT3: 0
m_PrefilterSoftShadowsQualityLow: 0
m_PrefilterSoftShadowsQualityMedium: 0
m_PrefilterSoftShadowsQualityHigh: 0
m_PrefilterSoftShadows: 0
m_PrefilterScreenCoord: 1
m_PrefilterScreenSpaceIrradiance: 1
m_PrefilterScreenSpaceIrradiance: 0
m_PrefilterNativeRenderPass: 1
m_PrefilterUseLegacyLightmaps: 0
m_PrefilterBicubicLightmapSampling: 1
m_PrefilterBicubicLightmapSampling: 0
m_PrefilterReflectionProbeRotation: 0
m_PrefilterReflectionProbeBlending: 0
m_PrefilterReflectionProbeBoxProjection: 0
m_PrefilterReflectionProbeAtlas: 0
m_PrefilterPointSamplingUpsampling: 1
m_Light2DPrefilteringMode: 0
m_Light2DKeptVariantCombos: []
m_ShaderVariantLogLevel: 0
m_ShadowCascades: 0
m_Textures:

View File

@ -72,22 +72,7 @@ MonoBehaviour:
- rid: 6588237625532874761
- rid: 6588237625532874762
m_RuntimeSettings:
m_List:
- rid: 6852985685364965378
- rid: 6852985685364965380
- rid: 6852985685364965381
- rid: 6852985685364965384
- rid: 6852985685364965392
- rid: 6852985685364965394
- rid: 8712630790384254976
- rid: 4284062438471237637
- rid: 5747374308340793346
- rid: 5747374308340793347
- rid: 5747374308340793348
- rid: 6588237625532874753
- rid: 6588237625532874756
- rid: 6588237625532874759
- rid: 6588237625532874761
m_List: []
m_AssetVersion: 11
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
m_RenderingLayerNames:

View File

@ -115,21 +115,17 @@ namespace Vanguard.Editor
var active = SceneManager.GetActiveScene().name;
var environment = GameObject.Find("Vanguard 3D Environment");
var backdrop = GameObject.Find("LoginBackdrop");
var login = GameObject.Find("LoginScreen");
var lobby = GameObject.Find("MetaScreen");
var onboarding = GameObject.Find("OnboardingScreen");
var isLogin = active == SceneFlow.Login;
var isLobby = active == SceneFlow.Lobby;
var success = (isLogin || isLobby)
&& (login != null || lobby != null || onboarding != null)
&& (isLogin ? backdrop != null : environment != null);
var success = environment != null
&& (active == SceneFlow.Login || active == SceneFlow.Lobby)
&& (login != null || lobby != null || onboarding != null);
Debug.Log(
"SCENE_SMOKE success=" + success
+ " active=" + active
+ " env=" + (environment != null)
+ " backdrop=" + (backdrop != null)
+ " login=" + (login != null)
+ " lobby=" + (lobby != null)
+ " onboarding=" + (onboarding != null)

View File

@ -28,25 +28,15 @@ MonoBehaviour:
intercept: 1.9
perfectGuard: 2
inputLockTail: 0.15
eventPause: 1.5
postDrivePause: 1.5
postTriggerPause: 1.5
postDamagePause: 1.5
arrowShowDuration: 0.25
arrowHideDuration: 0.2
moveDuration: 0.8
importantMoveDuration: 1.3
moveDelayBetweenCards: 0.22
moveDuration: 0.5
importantMoveDuration: 0.9
moveDelayBetweenCards: 0.18
arcHeight: 0.45
introOverheadHold: 1.5
introCameraMoveDuration: 1
introMainHold: 1.5
introDrawDuration: 0.6
cameraZoomDuration: 0.5
vanguardRevealDuration: 0.8
triggerRevealDuration: 0.35
triggerRevealHold: 0.75
cameraReturnDuration: 0.5
cameraZoomDuration: 0.35
triggerRevealHold: 1.2
cameraReturnDuration: 0.4
cameraRezoomDuration: 0.3
growDuration: 0.35
dashScrollSpeed: 1.5

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 443 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Some files were not shown because too many files have changed in this diff Show More