diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index b4733a0..91040d0 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -9,6 +9,12 @@ OpenWC состоит из двух продуктов на общей плат Оба продукта используют общие канонические модели, импорт данных и renderer preview, но не разделяют UI, lifecycle и права на изменение данных. +Планируемый racing fork является третьим потребителем graphics foundation. Он +может использовать world streaming, materials, lighting, shadows, liquids, +characters, animation и effects contracts, но не зависит от WoW network, +gameplay state или proprietary asset repository. Его улучшения выбираются +отдельным `Racing` graphics profile и не меняют `Blizzlike335`. + ## Архитектурные принципы 1. Сервер авторитетен для боя, ресурсов, инвентаря, квестового прогресса и общего мира. @@ -57,6 +63,11 @@ TrinityCore/AzerothCore ◄── Network Adapter ◄── Runtime Client Renderer получает `StreamingFocus`, `WorldVisualSnapshot` и presentation-команды. Он НЕ ДОЛЖЕН читать packets, SQL или gameplay input. +`GraphicsProfile` выбирается на composition boundary и задаёт material, +lighting, shadow, liquid, effects, distance и post-processing capabilities. +Внутренние shader/services не смешивают Blizzlike/Enhanced/Racing policy через +неявные глобальные switches. + ### UI Владеет login/realm/character screens, HUD и FrameXML/Lua-compatible presentation. UI читает immutable view models и отправляет intents. Lua API получает capability-based facade; прямой доступ к network, filesystem и editor API запрещён. @@ -157,6 +168,7 @@ addons/ - `ServerSchemaAdapter` — inspect, import, diff, generate, validate. - `ContentTypeDescriptor` — schema, inspector, validator, compiler. - `WorldRenderer` — streaming focus и entity presentation. +- `GraphicsProfile` — explicit Blizzlike/Enhanced/Racing visual capabilities. - `GameplaySystem` — commands/events без scene dependency. - `EditorTool` — selection, command creation и gizmo, без прямой записи. - `TestFixtureProvider` — обезличенные packets, DB snapshots и content fixtures. diff --git a/docs/CODING_STANDARD.md b/docs/CODING_STANDARD.md index ee6e788..b658c38 100644 --- a/docs/CODING_STANDARD.md +++ b/docs/CODING_STANDARD.md @@ -197,7 +197,7 @@ func request_streaming_tile_load(request: StreamingTileLoadRequest) -> void: - Предпочитать именованные predicates длинным boolean expressions. - Branch по capability/profile должен быть локальным и типизированным. - Не распространять `if core == "azerothcore"` по проекту; использовать adapter/capability. -- Не смешивать Blizzlike и Enhanced branches в каждом shader/service: выбирать profile/strategy на boundary. +- Не смешивать Blizzlike, Enhanced и Racing branches в каждом shader/service: выбирать profile/strategy на boundary. - Pattern/table-driven mapping предпочтительнее сотен одинаковых `if`, если таблица остаётся читаемой и валидируемой. ## Comments diff --git a/docs/DOCUMENTATION_STANDARD.md b/docs/DOCUMENTATION_STANDARD.md index 180e5fc..209b078 100644 --- a/docs/DOCUMENTATION_STANDARD.md +++ b/docs/DOCUMENTATION_STANDARD.md @@ -181,7 +181,7 @@ stateDiagram-v2 - Uniform/global parameter: coordinate/color space, range, units и producer. - Material profile: supported WoW shader/blend modes и approximations. - Expensive branch/texture dependency имеет cost/fallback note. -- Blizzlike и Enhanced behavior документируются отдельно. +- Blizzlike, Enhanced и Racing behavior документируются отдельно. ### Network codecs diff --git a/docs/GODOT_BEST_PRACTICES.md b/docs/GODOT_BEST_PRACTICES.md index 18da630..b17eaa0 100644 --- a/docs/GODOT_BEST_PRACTICES.md +++ b/docs/GODOT_BEST_PRACTICES.md @@ -61,7 +61,7 @@ Gameplay state, network session, renderer world, editor session, caches конк - Visibility ranges/HLOD, occlusion и automatic mesh LOD использовать совместно по профилю. - Unique materials/textures минимизировать; descriptor/resource counts являются budget metric. - RenderingServer RIDs имеют явного владельца и освобождаются в deterministic shutdown test. -- Shader/material profiles разделяют Blizzlike и Enhanced; runtime не компилирует тяжёлые варианты при пересечении ADT boundary. +- Shader/material profiles разделяют Blizzlike, Enhanced и Racing; runtime не компилирует тяжёлые варианты при пересечении ADT boundary. ## EditorPlugin lifecycle diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index dac7fd1..e22511e 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -18,7 +18,20 @@ Готово, когда render sandbox сохраняет текущее качество, а domain тестируется без scene tree. -## M1 — Content Project и Editor shell +## M1 — Renderer fidelity и graphics foundation + +- Original-client build-12340 corpus: две базовые позиции выбранной локации, + settings/time/weather/camera metadata, static и temporal evidence. +- Точные color, terrain, M2/WMO material, sky/fog/weather и shadow rules. +- MH2O/MCLQ/MLIQ liquids, GPU animation, characters, particles и ribbons. +- Раздельные `Blizzlike335` и opt-in `Enhanced/Racing` graphics profiles. +- Paired semantic-region comparison, human approval и traversal/GPU budgets. + +Готово, когда утверждённая capture matrix не содержит неклассифицированных +визуально различимых gaps, а общие graphics contracts пригодны клиенту, Editor +preview и racing fork. + +## M2 — Content Project и Editor shell - `addons/openwc_editor` с workspace и docks. - Content Project schema, stable IDs, save/load/migration. @@ -28,7 +41,7 @@ Готово, когда небольшой synthetic project можно создать, изменить, undo, перезапустить Editor и получить идентичное состояние. -## M2 — Server inspector и adapters +## M3 — Server inspector и adapters - TrinityCore/AzerothCore connection profiles. - Schema detection и capabilities. @@ -38,7 +51,7 @@ Готово, когда одна сущность round-trip проходит оба поддерживаемых adapter profile без молчаливой потери данных. -## M3 — World Editor MVP +## M4 — World Editor MVP - Map viewport и coordinate overlays. - Server spawn visualization. @@ -48,7 +61,7 @@ Готово, когда NPC размещается в Editor и появляется на тестовом core в ожидаемой позиции. -## M4 — Quest vertical slice +## M5 — Quest vertical slice - Quest form и chain graph. - Kill/collect/explore objectives, giver/ender, rewards и localization. @@ -57,7 +70,7 @@ Готово, когда созданный в Editor квест полностью проходится клиентом. -## M5 — Playable network client +## M6 — Playable network client - Auth, realm, character selection и world session. - Entity/update fields и world spawn. @@ -66,7 +79,7 @@ Готово, когда клиент стабильно входит в мир, перемещается и видит синхронизированные entities. -## M6 — Core gameplay +## M7 — Core gameplay - Combat/spells/auras/death. - Inventory/equipment/loot/vendors. @@ -76,7 +89,7 @@ Готово, когда базовый leveling loop проходит без внешнего клиента. -## M7 — Dungeon authoring +## M8 — Dungeon authoring - DungeonPackage, encounters, triggers, doors и spawn groups. - SmartAI/script skeleton generation. @@ -85,7 +98,7 @@ Готово, когда custom dungeon собирается, разворачивается и проходится группой на test core. -## M8 — Compatibility и completeness +## M9 — Compatibility и completeness - Feature matrix WoW 3.3.5a. - Addon compatibility tiers. @@ -98,17 +111,17 @@ При равной ценности порядок такой: 1. безопасность данных и воспроизводимость; -2. корректность протокола и authoritative state; -3. пользовательский vertical slice; -4. diagnostics и testability; -5. frame pacing; -6. визуальная точность и polish. +2. original-client renderer fidelity и frame pacing текущего M04; +3. корректность протокола и authoritative state; +4. пользовательский vertical slice; +5. diagnostics и testability; +6. opt-in визуальные улучшения после Blizzlike evidence. ## Не делать раньше времени - прямую запись в production DB; - универсальный visual scripting для любой C++ механики; - массовую реализацию Lua API без работающего UI slice; -- большой rewrite существующего renderer; +- полный custom renderer до bounded shader/backend spike и profiler evidence; - multi-expansion abstraction до устойчивого профиля 3.3.5a; - proprietary asset packaging в репозитории. diff --git a/docs/TEAM_WORKFLOW.md b/docs/TEAM_WORKFLOW.md index 3343534..097bdf8 100644 --- a/docs/TEAM_WORKFLOW.md +++ b/docs/TEAM_WORKFLOW.md @@ -44,8 +44,8 @@ ID записывается в claim, ветке, PR/MR и handoff. Нельзя ```text M01-FND-COORDS-001 M03-RND-SCHEDULER-001 -M08-NET-SRP-001 -M12-UIA-LUA-SPIKE-001 +M09-NET-SRP-001 +M13-UIA-LUA-SPIKE-001 ``` Program codes определены в [`../targets/DEVELOPMENT_ROADMAP.md`](../targets/DEVELOPMENT_ROADMAP.md). @@ -214,7 +214,7 @@ Merge order: ```text fnd(M01): add canonical coordinate mapper -net(M08): decode auth challenge safely +net(M09): decode auth challenge safely rnd(M03): extract streaming target planner test(M00): add paired checkpoint manifest ``` diff --git a/docs/TESTING.md b/docs/TESTING.md index 02ffa77..bc4445d 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -71,6 +71,25 @@ tools/verify_render_performance_stability.ps1 -RepeatedSampleComparison + +## Outcome + +Довести графическую основу OpenWC до evidence-backed визуальной совместимости с +оригинальным клиентом WoW 3.3.5a build 12340 и создать общий graphics contract +для дальнейшего клиента, Editor preview и отдельного racing-профиля. + +Noggit используется как дополнительный ориентир композиции и authoring preview, +но не заменяет оригинальный клиент как fidelity oracle. + +## Reference corpus + +- [ ] Принять versioned CSV manifest и валидатор оригинальных captures. +- [ ] Импортировать минимум две позиции каждой выбранной локации: `wide` для + неба/тумана/дальности/композиции и `ground` для terrain/material/M2/WMO. +- [ ] Сохранять map/zone/subzone, WoW/server coordinates, orientation, доступные + camera parameters, time, weather, graphics profile, viewport и имя артефакта. +- [ ] Не угадывать отсутствующие camera значения: хранить `Unknown`, landmark и + ограничение сравнения. +- [ ] Хранить proprietary screenshots/video вне Git; в репозитории сохранять + manifest, SHA-256, provenance, metrics, classifications и human approval. +- [ ] Добавить выбранную матрицу dawn/day/dusk/night, weather, shadow и liquid + quality без полного комбинаторного умножения всех локаций. +- [ ] Добавить temporal clips/кадры для water, animation, billboards, particles, + ribbons, weather и spell effect lifecycle. + +## Graphics foundation + +- [ ] Ввести явный graphics profile contract: `Blizzlike335` и opt-in + `Enhanced/Racing`; улучшения не меняют Blizzlike-путь и не маскируют gaps. +- [ ] Зафиксировать color pipeline: source color space, sampling, gamma, + tonemapping, fog, alpha coverage и deterministic capture output. +- [ ] Заменять approximate constants только после paired original-client + evidence; каждое осознанное расхождение регистрировать по подсистеме. +- [ ] Сохранить `WorldRenderFacade`, streaming budgets, cache versioning и + main-thread GPU finalization boundaries M03. +- [ ] Не начинать полный custom `RenderingDevice` renderer без bounded spike, + profiler evidence и ADR; сначала использовать точные Godot shader passes. + +## Required implementation order + +- [ ] Environment: точная DBC interpolation, sky/skybox, ambient/directional + light, zone transitions, fog, day/night и weather presentation. +- [ ] Terrain: MCNK topology/normals/holes, MCAL variants/layer animation, + filtering/mips, MCSH/baked shadow data, seams и WDL distant terrain. +- [ ] M2/WMO materials: build-12340 blend/depth/cull flags, alpha test, + multi-texture combiners, vertex colors, emissive/unlit, UV animation, + billboards, WMO indoor/outdoor, portals, local lights и fog semantics. +- [ ] Shadows: воспроизвести оригинальную policy для выбранных graphics settings; + terrain/baked, character/object и dynamic shadows проверять раздельно. +- [ ] Liquids: MH2O/MCLQ/MLIQ geometry, masks/heights/depth, original animated + textures и water/ocean/magma/slime/underwater behavior. Enhanced reflections, + normals и shore blending остаются opt-in. +- [ ] Animation/characters: GPU skinning path, sequences/blending/global + sequences, attachments, geosets, customization, equipment, mounts и vehicles; + CPU deformation оставить только измеренным fallback/diagnostic path. +- [ ] Effects: M2 particles/ribbons, texture animation, weather emitters, + SpellVisual/SpellVisualKit cast/projectile/impact/aura presentation, pooling, + deterministic lifetime и visibility budgets. +- [ ] Racing readiness: renderer/world/character/effects APIs не зависят от WoW + gameplay/network; racing profile меняет только явные graphics capabilities. + +## Verification + +- Original-client/OpenWC paired captures используют одинаковые viewport, camera + contract, position, time, weather и graphics profile либо явно классифицируют + неизвестное поле. +- Static comparison включает full-frame и semantic regions; geometry/framing, + material, lighting, shadow, liquid, animation/effect gaps не смешиваются. +- Temporal comparison проверяет phase, duration, trajectory, UV motion и emitter + lifetime, а не только один случайный кадр. +- GPU test matrix покрывает Godot Forward+/D3D12/Vulkan, cold/warm load, rapid + traversal, teleport, weather/time transitions и profile switching. +- Обязательны p50/p95/p99, max hitch, draw calls, visible objects, CPU/GPU memory, + shader/cache stability и Node/Resource/RID leak checks. + +## Exit criteria + +- Reference corpus покрывает обязательные static и temporal классы и проходит + schema/provenance/hash validation. +- Все пункты renderer coverage map имеют evidence-backed статус; `Verified` + допускается только с original-client fixture и human approval. +- Для утверждённой build-12340 capture matrix не остаётся неклассифицированных + визуально различимых gaps; принятые engine/GPU отклонения имеют измеренный + tolerance, rationale и artifact evidence. +- `Blizzlike335` сохраняет оригинальную policy, `Enhanced/Racing` выключаем и не + изменяет default behavior. +- Long traversal не создаёт recurring hitches, cache churn или renderer leaks; + M03 performance budgets остаются зелёными либо изменены только отдельным + evidence-backed решением. +- Character, animation, liquid, shadow и effects contracts пригодны для runtime, + Editor preview и будущего racing fork без зависимости от network/gameplay. + +## Evidence + +- Date: +- Revision/worktree: +- Original-client build/settings/corpus: +- Commands: +- Static/temporal comparison results: +- Performance and lifetime results: +- Human approval: +- API/module docs and diagrams: +- Changed files: +- Remaining risks: diff --git a/targets/04-editor-shell.md b/targets/05-editor-shell.md similarity index 95% rename from targets/04-editor-shell.md rename to targets/05-editor-shell.md index f5da69c..2a5a950 100644 --- a/targets/04-editor-shell.md +++ b/targets/05-editor-shell.md @@ -1,6 +1,6 @@ -# M04 — Godot Editor Shell +# M05 — Godot Editor Shell - + ## Outcome diff --git a/targets/05-content-project.md b/targets/06-content-project.md similarity index 98% rename from targets/05-content-project.md rename to targets/06-content-project.md index 8b47768..76bd121 100644 --- a/targets/05-content-project.md +++ b/targets/06-content-project.md @@ -1,4 +1,4 @@ -# M05 — Content Project +# M06 — Content Project diff --git a/targets/06-server-adapters.md b/targets/07-server-adapters.md similarity index 96% rename from targets/06-server-adapters.md rename to targets/07-server-adapters.md index df2f62e..dcfddf6 100644 --- a/targets/06-server-adapters.md +++ b/targets/07-server-adapters.md @@ -1,4 +1,4 @@ -# M06 — TrinityCore/AzerothCore Server Adapters +# M07 — TrinityCore/AzerothCore Server Adapters diff --git a/targets/07-world-editor-slice.md b/targets/08-world-editor-slice.md similarity index 97% rename from targets/07-world-editor-slice.md rename to targets/08-world-editor-slice.md index a6b6fa3..72db9c2 100644 --- a/targets/07-world-editor-slice.md +++ b/targets/08-world-editor-slice.md @@ -1,4 +1,4 @@ -# M07 — World Editor Vertical Slice +# M08 — World Editor Vertical Slice diff --git a/targets/08-network-foundation.md b/targets/09-network-foundation.md similarity index 97% rename from targets/08-network-foundation.md rename to targets/09-network-foundation.md index 928b911..d266964 100644 --- a/targets/08-network-foundation.md +++ b/targets/09-network-foundation.md @@ -1,4 +1,4 @@ -# M08 — WoW 3.3.5a Network Foundation +# M09 — WoW 3.3.5a Network Foundation diff --git a/targets/09-gameplay-domain.md b/targets/10-gameplay-domain.md similarity index 97% rename from targets/09-gameplay-domain.md rename to targets/10-gameplay-domain.md index c358788..459937e 100644 --- a/targets/09-gameplay-domain.md +++ b/targets/10-gameplay-domain.md @@ -1,4 +1,4 @@ -# M09 — Gameplay Domain +# M10 — Gameplay Domain diff --git a/targets/10-playable-client.md b/targets/11-playable-client.md similarity index 97% rename from targets/10-playable-client.md rename to targets/11-playable-client.md index 6f12bb6..c370b10 100644 --- a/targets/10-playable-client.md +++ b/targets/11-playable-client.md @@ -1,4 +1,4 @@ -# M10 — First Playable Client Slice +# M11 — First Playable Client Slice diff --git a/targets/11-quest-end-to-end.md b/targets/12-quest-end-to-end.md similarity index 97% rename from targets/11-quest-end-to-end.md rename to targets/12-quest-end-to-end.md index 87c9445..3f01198 100644 --- a/targets/11-quest-end-to-end.md +++ b/targets/12-quest-end-to-end.md @@ -1,4 +1,4 @@ -# M11 — Quest End-to-End +# M12 — Quest End-to-End diff --git a/targets/12-client-completeness.md b/targets/13-client-completeness.md similarity index 98% rename from targets/12-client-completeness.md rename to targets/13-client-completeness.md index 29e9c2f..e6910d0 100644 --- a/targets/12-client-completeness.md +++ b/targets/13-client-completeness.md @@ -1,4 +1,4 @@ -# M12 — WoW 3.3.5a Client Completeness +# M13 — WoW 3.3.5a Client Completeness diff --git a/targets/13-dungeon-authoring.md b/targets/14-dungeon-authoring.md similarity index 97% rename from targets/13-dungeon-authoring.md rename to targets/14-dungeon-authoring.md index 529c7da..f4dc48b 100644 --- a/targets/13-dungeon-authoring.md +++ b/targets/14-dungeon-authoring.md @@ -1,4 +1,4 @@ -# M13 — Dungeon and Encounter Authoring +# M14 — Dungeon and Encounter Authoring diff --git a/targets/DEVELOPMENT_ROADMAP.md b/targets/DEVELOPMENT_ROADMAP.md index 45335d0..daf9e9b 100644 --- a/targets/DEVELOPMENT_ROADMAP.md +++ b/targets/DEVELOPMENT_ROADMAP.md @@ -8,12 +8,15 @@ Godot-specific implementation rules обязательны из [`../docs/GODOT_ ## Итоговый продукт -OpenWC должен предоставить четыре согласованных режима: +OpenWC должен предоставить пять согласованных режимов/потребителей: 1. `Blizzlike335` — клиент WoW 3.3.5a build 12340 с максимально точным наблюдаемым поведением. 2. `Enhanced` — opt-in графические, UX и accessibility улучшения, не меняющие wire protocol и server authority без отдельного profile. 3. `AuthoringStudio` — инструменты мира, контента, БД и playtest внутри Godot Editor. 4. `HeadlessTools` — import, validation, bake, packet replay, content build и CI без GUI. +5. `Racing` — downstream fork/profile, использующий общие world, character, + animation, effects и graphics contracts без зависимости от WoW gameplay и + network lifecycle. Один кодовый путь должен обслуживать runtime и editor preview через публичные contracts. Generated preview nodes, DB records и caches не являются источником истины. @@ -21,7 +24,7 @@ OpenWC должен предоставить четыре согласованн - MPQ/BLP/ADT/WDT/M2/WMO native parsing и renderer vertical slice уже существуют. - Runtime streaming, terrain quality, MultiMesh M2, WMO caches, liquids, sky и character experiments находятся в рабочем состоянии, но сосредоточены в крупных orchestration scripts. -- Renderer baseline M00 завершён: paired comparison с оригинальным клиентом записывает измеренные gaps без заявления parity, а обязательные diagnostic gaps закрыты или явно классифицированы. M01 завершил coordinate, identity и streaming-focus seams; M02 декомпозировал player input, movement, terrain query, camera и presentation без observable regression. Текущая работа M03 закрывает renderer стабильным facade и извлекает planner/scheduler без rewrite. +- Renderer baseline M00 завершён: paired comparison с оригинальным клиентом записывает измеренные gaps без заявления parity, а обязательные diagnostic gaps закрыты или явно классифицированы. M01 завершил coordinate, identity и streaming-focus seams; M02 декомпозировал player input, movement, terrain query, camera и presentation без observable regression. M03 закрыл renderer стабильным facade, planner/scheduler и извлечёнными services. Текущий M04 доводит графическую основу до evidence-backed build-12340 fidelity до начала Editor/network milestones. - Gameplay domain, network protocol, production UI/Lua, audio orchestration и server adapters в основном предстоит реализовать. - Editor plugin пока решает extraction/preview задачи, но не является полноценной authoring platform. @@ -45,14 +48,15 @@ M00 renderer baseline └─ M01 coordinates/contracts └─ M02 input/movement/camera/presentation split └─ M03 renderer facade - ├─ M04 editor shell → M05 content → M06 server adapters → M07 world editor - └─ M08 network → M09 gameplay domain → M10 playable client - M07 + M10 → M11 quest end-to-end - └─ M12 completeness waves - └─ M13 dungeon authoring + └─ M04 renderer fidelity/graphics foundation + ├─ M05 editor shell → M06 content → M07 server adapters → M08 world editor + └─ M09 network → M10 gameplay domain → M11 playable client + M08 + M11 → M12 quest end-to-end + └─ M13 completeness waves + └─ M14 dungeon authoring ``` -M12 не является одним большим этапом. Он выполняется последовательными completeness waves: +M13 не является одним большим этапом. Он выполняется последовательными completeness waves: 1. `C1 Core loop` — combat, spells, auras, death, loot, inventory, quests. 2. `C2 Character` — creation/customization, equipment, animation, pets, mounts. @@ -73,16 +77,17 @@ M12 не является одним большим этапом. Он выпо | M01 | FND typed coordinates/IDs/contracts | Server/ADT/Godot round-trip и StreamingFocus | | M02 | FND composition, GMP movement, RND presenters | Player split без visual/control regression | | M03 | RND facade/planner/scheduler, FND jobs | Renderer доступен через API и сохраняет budgets | -| M04 | EDT plugin shell, QAR editor tests | Reload-safe workspace, commands, undo/recovery | -| M05 | FND content schemas/cache, EDT project | Deterministic Content Project build/migration | -| M06 | SRV environments/snapshots/adapters | Two-core read/diff/dry-run round-trip | -| M07 | EDT world editing/navigation/deploy | NPC placement на dev-core без ручного SQL | -| M08 | NET transport/auth/protocol/entities | Headless auth → world и deterministic replay | -| M09 | GMP world state/movement/targeting | Packet replay → deterministic gameplay snapshot | -| M10 | FND app lifecycle, RND/UIA presentation | Игрок входит, видит entities и перемещается | -| M11 | GMP quests, EDT quest tools, SRV deploy, UIA quest UI | Author → deploy → complete quest своим клиентом | -| M12 C1–C8 | NET/GMP/RND/UIA completeness + QAR | Feature matrix `Compatible/Verified` по waves | -| M13 | EDT dungeon/encounter, SRV modules, GMP instances | Custom dungeon group playtest end-to-end | +| M04 | RND/QAR reference corpus, materials, environment, shadows, liquids, characters/effects | Original-client-paired graphics foundation и отделённый Enhanced/Racing profile | +| M05 | EDT plugin shell, QAR editor tests | Reload-safe workspace, commands, undo/recovery | +| M06 | FND content schemas/cache, EDT project | Deterministic Content Project build/migration | +| M07 | SRV environments/snapshots/adapters | Two-core read/diff/dry-run round-trip | +| M08 | EDT world editing/navigation/deploy | NPC placement на dev-core без ручного SQL | +| M09 | NET transport/auth/protocol/entities | Headless auth → world и deterministic replay | +| M10 | GMP world state/movement/targeting | Packet replay → deterministic gameplay snapshot | +| M11 | FND app lifecycle, RND/UIA presentation | Игрок входит, видит entities и перемещается | +| M12 | GMP quests, EDT quest tools, SRV deploy, UIA quest UI | Author → deploy → complete quest своим клиентом | +| M13 C1–C8 | NET/GMP/RND/UIA completeness + QAR | Feature matrix `Compatible/Verified` по waves | +| M14 | EDT dungeon/encounter, SRV modules, GMP instances | Custom dungeon group playtest end-to-end | ## Recommended implementation rhythm @@ -101,6 +106,8 @@ M12 не является одним большим этапом. Он выпо ## Cross-cutting contracts - `BuildProfile` — `Blizzlike335`, `Enhanced`, authoring и test capabilities. +- `GraphicsProfile` — explicit Blizzlike/Enhanced/Racing material, lighting, + shadow, liquid, effects, distance и post-processing capabilities. - `CoordinateMapper` — единственное преобразование WoW/Godot/ADT/server coordinates. - `AssetRepository` — original assets, overlays, caches и provenance. - `ProtocolProfile` — build, opcodes, update fields, codecs и server capabilities. diff --git a/targets/README.md b/targets/README.md index 0b21686..e4d86f6 100644 --- a/targets/README.md +++ b/targets/README.md @@ -4,13 +4,13 @@ Этот каталог задаёт обязательную последовательность реализации. Архитектура описана в `docs/`, фактическое состояние renderer — в `RENDER.md`, а здесь находятся исполняемые milestones. -Полная инженерная декомпозиция всех подсистем находится в [`DEVELOPMENT_ROADMAP.md`](DEVELOPMENT_ROADMAP.md). Перед работой над milestone агент читает соответствующий subsystem plan из `targets/roadmap/`, но статус меняет только в исполняемом target-файле M00–M13. +Полная инженерная декомпозиция всех подсистем находится в [`DEVELOPMENT_ROADMAP.md`](DEVELOPMENT_ROADMAP.md). Перед работой над milestone агент читает соответствующий subsystem plan из `targets/roadmap/`, но статус меняет только в исполняемом target-файле M00–M14. Параллельная командная работа выполняется по [`../docs/TEAM_WORKFLOW.md`](../docs/TEAM_WORKFLOW.md): отдельные worktrees, claims, exclusive paths, contract-first и интегратор milestone. ## Current target -`M04` — [04-editor-shell.md](04-editor-shell.md) +`M04` — [04-renderer-fidelity.md](04-renderer-fidelity.md) Одновременно `ACTIVE` может быть только одна цель. Следующая цель становится `ACTIVE` после появления валидной `OPENWC_TARGET_DONE` метки у предыдущей. @@ -37,26 +37,27 @@ | M01 | [Coordinates and architecture seams](01-coordinates-and-seams.md) | M00 | DONE | | M02 | [Player decomposition](02-player-decomposition.md) | M01 | DONE | | M03 | [Renderer facade and extraction](03-renderer-facade.md) | M02 | DONE | -| M04 | [Godot Editor shell](04-editor-shell.md) | M03 | ACTIVE | -| M05 | [Content Project](05-content-project.md) | M04 | OPEN | -| M06 | [Server database adapters](06-server-adapters.md) | M05 | OPEN | -| M07 | [World Editor vertical slice](07-world-editor-slice.md) | M06 | OPEN | -| M08 | [Network foundation](08-network-foundation.md) | M03 | OPEN | -| M09 | [Gameplay domain](09-gameplay-domain.md) | M08 | OPEN | -| M10 | [Playable client slice](10-playable-client.md) | M09, M03 | OPEN | -| M11 | [Quest end-to-end](11-quest-end-to-end.md) | M07, M10 | OPEN | -| M12 | [WoW 3.3.5a completeness](12-client-completeness.md) | M11 | OPEN | -| M13 | [Dungeon authoring](13-dungeon-authoring.md) | M12 foundation | OPEN | +| M04 | [Renderer fidelity and graphics foundation](04-renderer-fidelity.md) | M03 | ACTIVE | +| M05 | [Godot Editor shell](05-editor-shell.md) | M04 | OPEN | +| M06 | [Content Project](06-content-project.md) | M05 | OPEN | +| M07 | [Server database adapters](07-server-adapters.md) | M06 | OPEN | +| M08 | [World Editor vertical slice](08-world-editor-slice.md) | M07 | OPEN | +| M09 | [Network foundation](09-network-foundation.md) | M04 | OPEN | +| M10 | [Gameplay domain](10-gameplay-domain.md) | M09 | OPEN | +| M11 | [Playable client slice](11-playable-client.md) | M10, M04 | OPEN | +| M12 | [Quest end-to-end](12-quest-end-to-end.md) | M08, M11 | OPEN | +| M13 | [WoW 3.3.5a completeness](13-client-completeness.md) | M12 | OPEN | +| M14 | [Dungeon authoring](14-dungeon-authoring.md) | M13 foundation | OPEN | -M12 выполняется восемью completeness waves, определёнными в [`DEVELOPMENT_ROADMAP.md`](DEVELOPMENT_ROADMAP.md), а не одной массовой реализацией. +M13 выполняется восемью completeness waves, определёнными в [`DEVELOPMENT_ROADMAP.md`](DEVELOPMENT_ROADMAP.md), а не одной массовой реализацией. -M07 и M08 могут выполняться параллельными командами только после M06/M03 соответственно и только если пользователь явно разрешил параллельную работу. Их результаты сходятся в M11. +M08 и M09 могут выполняться параллельными командами только после M07/M04 соответственно и только если пользователь явно разрешил параллельную работу. Их результаты сходятся в M12. -`recast-rs` запланирован как optional navigation backend в M05, исследовательский CLI spike и world validation в M07, затем полноценная dungeon navigation validation в M13. Он не блокирует M00–M04 и не считается автоматически совместимым с server `mmaps`. +`recast-rs` запланирован как optional navigation backend в M06, исследовательский CLI spike и world validation в M08, затем полноценная dungeon navigation validation в M14. Он не блокирует M00–M05 и не считается автоматически совместимым с server `mmaps`. -`rilua` зарегистрирован как Lua 5.1.1 runtime/test-oracle candidate для M12. До compatibility spike он не добавляется как dependency; UI строится через заменяемый `LuaRuntime`, поскольку WoW API, FrameXML, secure actions и taint не входят в готовый VM. +`rilua` зарегистрирован как Lua 5.1.1 runtime/test-oracle candidate для M13. До compatibility spike он не добавляется как dependency; UI строится через заменяемый `LuaRuntime`, поскольку WoW API, FrameXML, secure actions и taint не входят в готовый VM. -Wowser зарегистрирован как независимый MIT reference для M08 и M12: auth → world protocol lifecycle, binary/data handling, asset pipeline и общий client coverage. Его старый browser stack не является кандидатом на интеграцию; полезные решения принимаются только после проверки против build 12340 и server cores. +Wowser зарегистрирован как независимый MIT reference для M09 и M13: auth → world protocol lifecycle, binary/data handling, asset pipeline и общий client coverage. Его старый browser stack не является кандидатом на интеграцию; полезные решения принимаются только после проверки против build 12340 и server cores. ## Общий quality gate diff --git a/targets/roadmap/01-foundation-and-data.md b/targets/roadmap/01-foundation-and-data.md index 2947e32..4f05059 100644 --- a/targets/roadmap/01-foundation-and-data.md +++ b/targets/roadmap/01-foundation-and-data.md @@ -10,7 +10,7 @@ - Отделить user settings, developer settings, server connection profiles и content project settings. - Secrets хранить вне Git/Resource; поддержать environment/OS credential provider. - Настройки иметь schema version, defaults, validation, migration и reset-by-section. -- `Blizzlike335` сделать неизменяемым базовым профилем; enhanced settings наследуют его явно. +- `Blizzlike335` сделать неизменяемым базовым профилем; Enhanced/Racing settings наследуют его явно и не меняют default behavior. ## FND-2. Application lifecycle diff --git a/targets/roadmap/02-rendering-and-graphics.md b/targets/roadmap/02-rendering-and-graphics.md index 0b4f32c..fc9a73f 100644 --- a/targets/roadmap/02-rendering-and-graphics.md +++ b/targets/roadmap/02-rendering-and-graphics.md @@ -4,6 +4,43 @@ Воспроизвести визуальные правила WoW 3.3.5a и дать opt-in улучшения, сохранив frame pacing на больших мирах Godot. +## M04 execution policy + +M04 выполняет renderer fidelity до Editor, network и gameplay milestones. M03 +facade, ownership, streaming budgets и cache rules сохраняются: fidelity работа +расширяет services и shaders, но не возвращает прямой cross-layer доступ к +streamer internals. + +Authoritative oracle — оригинальный клиент build 12340. Noggit полезен для +обзорной композиции, placements и будущего Editor viewport, но не подтверждает +точные lighting, shadow, liquid, material или effect semantics. + +Reference corpus принимает versioned CSV и приватные captures. Для каждой +выбранной локации базовый набор содержит две позиции: `wide` для sky/fog/WDL и +общей композиции, `ground` для terrain/material/M2/WMO. Специализированные +water, interior, shadow, character и effect viewpoints добавляются только когда +две базовые позиции не покрывают уникальную визуальную policy. + +Repository хранит schema, coordinates/camera/settings metadata, SHA-256, +comparison metrics, gap classification и human approval. Proprietary image/video +bytes остаются вне Git. Неизвестные camera/time/weather/settings поля отмечаются +как `Unknown`; их запрещено угадывать или автоматически считать parity evidence. + +Обязательный порядок реализации: + +1. reference manifest, validator, paired capture и semantic region diff; +2. deterministic color/gamma/sampling/alpha/fog pipeline; +3. environment/sky/weather и terrain/WDL/MCSH; +4. M2/WMO material passes и indoor/outdoor lighting; +5. graphics-setting-aware shadows и liquids; +6. GPU animation, characters, attachments, equipment и mounts; +7. particles, ribbons, weather и spell visual lifecycle; +8. Enhanced/Racing profile separation, traversal/performance/lifetime closeout. + +Полный custom `RenderingDevice` backend допускается только после bounded spike, +доказавшего, что точный critical pass нельзя реализовать Godot spatial/sky/ +particle/compositor механизмами в установленном performance budget. + ## RND-1. Renderer architecture - `WorldRenderFacade` принимает focus, environment snapshot и entity presentation commands. @@ -99,4 +136,9 @@ ## Gate -Видимый мир не деградирует при декомпозиции; under-foot/near-field quality готова до появления в кадре; long traversal не создаёт recurring hitches/leaks; Enhanced всегда отключаем. +Для утверждённой original-client capture matrix отсутствуют неклассифицированные +визуально различимые gaps; каждый `Verified` class имеет fixture, metrics и human +approval. Under-foot/near-field quality готова до появления в кадре; temporal +effects совпадают по phase/duration/trajectory; long traversal не создаёт +recurring hitches/leaks; Enhanced/Racing всегда отключаем и не меняет +`Blizzlike335` default behavior. diff --git a/targets/roadmap/06-editor-and-content-tools.md b/targets/roadmap/06-editor-and-content-tools.md index 1244d04..a8888ce 100644 --- a/targets/roadmap/06-editor-and-content-tools.md +++ b/targets/roadmap/06-editor-and-content-tools.md @@ -66,7 +66,7 @@ ## EDT-8. Graphics extension tools -- Material/shader profile editor с Blizzlike/Enhanced comparison. +- Material/shader profile editor с Blizzlike/Enhanced/Racing comparison. - Texture replacement/upscale overlays и mip/alpha/color-space validation. - Water/sky/weather/light preview with fixed time and reference capture. - Character/equipment/animation/attachment preview.