18 KiB
18 KiB
Каталог готовых инструментов и reference-решений
Назначение
OpenWC следует принципу research before build: перед реализацией сложной подсистемы сначала ищется существующая библиотека, эмулятор, редактор, specification или test corpus. Цель — быстрее находить проверенные решения, сравнивать независимые реализации и не повторять уже проделанную работу.
Каталог не является списком автоматически одобренных dependencies. Любой кандидат проходит проверку лицензии, зрелости, fidelity, безопасности, производительности, поддержки платформ и стоимости интеграции.
Статусы
REFERENCE— источник идей, поведения, форматов или тестов; код не подключён.CANDIDATE— возможная dependency; требуется compatibility spike.EVALUATING— выполняется spike с зафиксированными критериями.ADOPTED— закреплены версия, boundary, лицензия, tests и update policy.REJECTED— не подходит; причина сохраняется, чтобы не повторять исследование.REPLACE— используется временно и имеет согласованный план замены.
Обязательная карточка кандидата
Name / URL:
Status:
Problem solved:
Planned boundary:
License:
Platforms/toolchain:
Fidelity evidence:
Known gaps:
Security/data risks:
Performance evidence:
Spike and acceptance criteria:
Pinned version/update policy:
Decision/ADR:
Реестр
| Инструмент | Статус | Область | Планируемое использование | Главный риск |
|---|---|---|---|---|
| OpenWC native loaders | ADOPTED | MPQ/BLP/ADT/WDT/M2/WMO | Текущий import/render pipeline | Неполная fidelity форматов |
| StormLib | ADOPTED | MPQ | Чтение архивов через native extension | Version/license/update audit |
| WowUnreal | REFERENCE | Полный клиент | Coverage, acceptance criteria, networking/UI research | Unreal-specific design |
| WoWee | REFERENCE | Клиент/editor/formats | Architecture, editor workflows, tests, open formats | Заявления требуют независимой проверки |
| Original WoW 3.3.5a build 12340 client | ADOPTED | Visual/behavior oracle | Private static/temporal capture corpus, settings and paired comparison | Proprietary artifacts remain outside Git; camera/settings provenance must be explicit |
| Noggit Red | REFERENCE | World editor | Terrain/placement UX, UID workflows и secondary render-composition reference | Не Godot architecture; не authoritative lighting/material/shadow/liquid oracle |
| open-realm | REFERENCE | Formats/runtime | Независимая проверка parsers/render behavior | Другая архитектура и coverage |
| whoa | REFERENCE | Client behavior | 3.3.5a runtime semantics и fixtures | Лицензия и переносимость отдельных решений |
| wow.export | REFERENCE | Asset conversion | M2/WMO/material/export edge cases | Web-specific pipeline |
| Blender WoW Studio | REFERENCE | Authoring/conversion | WMO/M2/ADT authoring knowledge | Blender-specific UI/data model |
| Wowser | REFERENCE | 3.3.5a web client | Auth/realm/character/world protocol, binary parsing, asset pipeline и render research | Старый JS/WebGL proof-of-concept, неполный клиент |
| Benilla | REFERENCE | WoW 1.12.1 client/render/UI | M2 GPU animation, materials, particles/ribbons, WMO portals, FrameXML/Lua architecture и compatibility-test ideas | Vanilla build 5875 и Bevy-specific implementation не доказывают WotLK build-12340 fidelity |
| warcraft-rs | CANDIDATE | WoW formats/CLI | Independent MPQ/DBC/BLP/ADT/WDT/WDL/M2/WMO validation и conversion oracle | Rust/tool duplication; claims require fixtures |
| WoWDBDefs | REFERENCE | Client DB schemas | Versioned DBC definitions и typed-code generation input | Definitions still require build-specific validation |
| wow_dbc | REFERENCE | DBC | 1.12/2.4.3/3.3.5 read/write и SQLite conversion ideas | Older release, Rust integration unnecessary by default |
| recast-rs | CANDIDATE | Navigation | Offline navmesh, reachability и dungeon validation | Server mmap compatibility не доказана |
| rilua | CANDIDATE | Lua/addons | Lua 5.1.1 runtime candidate и headless compatibility oracle | Taint/WoW API/FrameXML отсутствуют; Rust bridge |
| PUC-Rio Lua 5.1.1 | CANDIDATE | Lua reference/runtime | Authoritative Lua oracle и альтернативный embedded VM | Нужны WoW sandbox, taint и безопасный C++ boundary |
| GdUnit4 | CANDIDATE | Godot tests | GDScript, scene, Editor и CI test runner для Godot 4.6 | Plugin/toolchain pin и adoption spike |
| Keira3 | REFERENCE | AzerothCore DB editor | Field semantics, SQL generation и DB editor UX | AGPL; schema-specific web architecture |
| WowBench | REFERENCE | WoW UI/API | Offline XML/Lua API emulation и addon test ideas | Старый и неполный implementation |
rilua — карточка кандидата
- Problem solved: Lua 5.1.1 VM, bytecode, embedding и официальный compatibility corpus для addon runtime.
- Planned boundary: реализация внутреннего
LuaRuntimeinterface; FrameXML, TOC, WoW API, events и SavedVariables остаются независимыми слоями OpenWC. - License: MIT OR Apache-2.0.
- Fidelity evidence: официальный Lua 5.1.1 test suite и oracle comparison с PUC-Rio по заявлениям проекта; OpenWC обязан повторить проверки на pinned revision.
- Known gaps: WoW taint/secure execution заявлен как post-1.0; TOC, WoW API stubs и UI находятся вне scope; C ABI не совместим с
lua_State*; требуется измерение GC/OnUpdate performance. - Spike: сравнить
rilua, PUC-Rio 5.1.1 и оригинальный клиент на WoW-specific corpus; проверить restricted stdlib, globals,bit, errors, coroutines, byte strings, GC defaults, addon load и SavedVariables. - Decision policy: не связывать UI с Rust types и не объявлять addon parity до secure/taint и FrameXML/API tests.
Wowser — карточка референса
- Problem studied: полный путь клиента WoW 3.3.5a в браузере: получение assets, auth/realm/world connections, cryptography, binary packets, workers, audio и WebGL rendering.
- Useful repositories:
wowserhq/wowser, выделенныеwowserhq/clientиwowserhq/pipeline. - License: MIT для основного репозитория; лицензии выделенных репозиториев проверяются отдельно перед переносом кода.
- Fidelity evidence: заявлена поддержка только WotLK 3.3.5a; реализованы username/password auth, realm list/connection, character list, world join и packet logging. Любая packet semantics всё равно сверяется с server core и fixtures.
- Useful boundaries: разделение client и asset pipeline, async/background resource work, typed binary handling, protocol lifecycle и независимый WebGL renderer.
- Known gaps: proof-of-concept, неполный gameplay/UI, browser WebSocket proxy вместо native TCP, устаревший JS ecosystem (React 0.14/Three.js 0.77 era), архитектура не переносится напрямую в Godot.
- Decision policy: использовать для cross-check и test ideas; не добавлять Node/Web dependencies и не копировать browser-specific abstractions в OpenWC.
Benilla — карточка референса
- Name / URL: samwhosung/benilla.
- Status:
REFERENCE; код не подключён как dependency и не вендорится. - Pinned research revision:
9f3de200fb4a239809acd3641671d63146098a91(проверен 2026-08-12). Репозиторий публикуется автором как squashed snapshots из private tree, поэтому при повторном исследовании revision фиксируется заново. - Problem studied: полный независимый клиент WoW 1.12.1 build 5875 на Rust/Bevy, включая streamed world renderer, M2 animation/materials, WMO portal visibility, liquids/sky/weather, particles/ribbons/spell visuals и собственный TOC/FrameXML/Lua UI runtime.
- Planned boundary: использовать только как независимый источник алгоритмов, decomposition, diagnostics и test cases. OpenWC сохраняет свои
WorldRenderFacade, Godot main-thread/finalization boundaries,LuaRuntime, immutable UI view models/intents и build-12340 contracts; прямой Bevy/ECS или Rust-type bridge не вводится. - Useful renderer source map:
crates/benilla-world/src/model_render*,rig_anim*,rig_palette*,particles*,ribbons.rs,wmo_portal*,lighting*,weather*,terrain_stream*иshaders/wow_effect.wgsl; format-side M2 animation/particle/ribbon tracks находятся вcrates/benilla-formats/src/models/anim.rs,particles.rsиribbons.rs. - Useful UI/Lua source map: engine-free crate
crates/benilla-ui:toc.rs,framexml.rs,loader/*,layout.rs,widget/*,order.rs,script/event.rs,script/tick.rs,script/saved.rs, sandbox/stdlib bindings и compatibility tests. Особенно полезны сохранение document/load order, bottom-upOnLoad, nested-safe restore legacy globalsthis/event/argN, deterministic event/OnUpdateorder и разделение plain host state от engine adapter. - License:
MIT OR Apache-2.0; конкретное заимствование кода требует сохранения license/attribution и отдельной проверки совместимости с лицензиями OpenWC и third-party dependencies. - Platforms/toolchain: stable Rust, Bevy
0.18.1,mlua 0.11с vendored Lua 5.1 и локальнымlua-srcpatch pipeline. Это research stack, не предлагаемый OpenWC toolchain. - Fidelity evidence: исходники содержат подробные build-5875 byte-law annotations, corpus tests, parser fixtures и temporal/render probes. Сам приватный reverse-engineering corpus не входит в repository, а опубликованный код ориентирован на Vanilla 1.12.1, поэтому ни один его результат сам по себе не является evidence для WoW 3.3.5a build 12340.
- Known gaps: README прямо ограничивает Lua built-in UI и пока не заявляет third-party addon support; taint/secure execution отсутствуют; runtime использует Lua 5.1 с точечными Lua-5.0 compatibility patches для Vanilla; renderer и scheduling зависят от Bevy render phases/ECS. Layouts, M2 records, shader flags, spell visuals, UI API и security semantics должны повторно проверяться для WotLK.
- Security/data risks: Lua sandbox удаляет filesystem/OS/package/debug/native reach и принимает только text chunks, но без taint/protected-action модели этого недостаточно для 3.3.5a addons. Proprietary client assets и private RE artifacts не копируются; тесты OpenWC используют легально полученные локальные data и разрешённые metadata/fixtures.
- Performance evidence: Benilla документирует collapsed rig pose/palette arrays вместо десятков тысяч bone entities и один shared effect vertex/index stream вместо per-emitter dynamic meshes; source comments приводят локальные measurements (включая около 145 mesh changes/frame до shared stream). Эти числа не воспроизведены на Godot и служат только гипотезой для bounded spike.
- Spike and acceptance criteria: (1) renderer — на build-12340 M2 fixtures сравнить bone palette/global sequences, material ordering, particle plane/sphere/spline emitters, head/tail/model particles и ribbons по phase/duration/lifetime; затем проверить Godot-friendly shared effect buffer/pool без нарушения M03 budgets; (2) UI — прогнать WotLK TOC/FrameXML/Lua corpus на document order, inheritance, anchors, handler calling convention, event order,
OnUpdate, SavedVariables, restricted libraries и error text; secure actions/taint имеют отдельный обязательный corpus. Любое принятое решение требует original-client paired evidence, p50/p95/p99 и regression fixtures. - Pinned version/update policy: исследование и ссылки привязаны к указанному commit. Обновление проводится вручную по diff релевантных directories; moving
mainне становится новым oracle автоматически. - Decision / ADR:
REFERENCE, не dependency. ADR требуется только если Benilla-inspired решение меняет публичный renderer/effects/UI/Lua contract, cache/schema, engine boundary или добавляет dependency.
recast-rs — карточка кандидата
- Problem solved: Recast navmesh generation, Detour queries, tiled navigation и dynamic obstacles.
- Planned boundary: offline CLI/build job и versioned OpenWC navigation artifact.
- License: MIT OR Apache-2.0.
- Known gaps: совместимость
.mmap/.mmtileи параметров TrinityCore/AzerothCore не доказана. - Spike: synthetic + one WoW tile comparison с C++ Recast; затем отдельный server mmap compatibility experiment.
warcraft-rs — карточка кандидата
- Problem solved: единый CLI/library set для MPQ, DBC, BLP, ADT, WDT, WDL, M2 и WMO версий 1.12.1–5.4.8, включая заявленную full support 3.3.5a.
- Planned boundary: сначала внешний pinned CLI как independent parser/validator oracle; не заменять текущий native pipeline автоматически.
- License: MIT OR Apache-2.0.
- Spike: сравнить OpenWC и warcraft-rs на synthetic/corrupt/real local fixtures: parsed counts, bounds, flags, alpha, materials, animations и diagnostics.
- Decision policy: отдельные crates рассматриваются только если дают доказанное преимущество; Rust runtime/toolchain не вводится ради дублирования работающего C++ parser.
GdUnit4 — карточка кандидата
- Problem solved: Godot 4 GDScript/scene tests, assertions, mocks, input simulation, command-line and JUnit reports.
- Planned boundary: development/test plugin only; production export не зависит от test framework.
- License: MIT.
- Spike: закрепить совместимую с Godot 4.6.1 версию; проверить pure GDScript, scene lifecycle, input, EditorPlugin и headless CI sample; измерить startup overhead.
- Decision policy: ADOPTED только после воспроизводимого Windows/headless run и отсутствия конфликта с project plugins.
Процесс добавления инструмента
- Добавить карточку со статусом
REFERENCEилиCANDIDATE. - Указать конкретную проблему и boundary; «полезная библиотека» недостаточно.
- Проверить лицензию и возможность распространения.
- Создать bounded spike в соответствующем target, не меняя текущую цель без указания пользователя.
- Собрать fixtures и сравнить с исходным поведением WoW 3.3.5a или authoritative implementation.
- После решения обновить статус, pinned version, ADR и regression tests.
Вендорить или добавлять submodule до статуса ADOPTED не следует. Для быстро меняющихся проектов pinned commit обязателен.